where(['is_settle'=>StatusEnum::ENABLED, 'order_status'=>HappinessPensionEnum::NO_SEND,'mall_id'=>$mall_id])->asArray()->all(); if(empty($list)) { return; } $user_ids=array_column($list,'user_id'); $third_users = HappinessThirdUser::find()->where(['user_id'=>$user_ids,'status'=>StatusEnum::ENABLED,'is_real'=>1,'type'=>1]) ->asArray()->indexBy('user_id')->all(); if(empty($third_users)) { return; } $send_ids=[]; foreach ($list as $order) { if(!isset($third_users[$order['user_id']])) { continue; } $res=$this->send($third_users[$order['user_id']]['third_id'],$order['money']); if($res===false) { Yii::error($this->error); } $send_ids[]=$order['id']; $main_order = HappinessOrder::getOne([['order_id' => $order['order_id']]],true); $service=new CommissionService(); $res=$service->statsItem( [ 'mall_id' => $mall_id, 'order_id' => $order['order_id'], 'order_no' => $order['order_no'], 'order_money' => $main_order['price'], 'user_id' => $order['user_id'], 'store_id' => $main_order['store_id'], 'money' => $order['money'], ],'pension_money'); if($res===false) { throw new \Exception($service->error); } } if(!empty($send_ids)) { HappinessPension::updateAll(['order_status'=>HappinessPensionEnum::IS_SEND],['in','id',$send_ids]); } return true; } public function record($order, $order_status) { //记录订单 $findOrder=HappinessPension::find()->where(['order_id'=>$order['id']])->one(); if($findOrder) { $findOrder->is_settle=StatusEnum::ENABLED; $findOrder->settle_time=time(); $res=$findOrder->save(); if($res===false) { $this->error = $findOrder->getErrorMessage(); return false; } return true; } $setting = \Yii::$app->services->setting->addons->get($order['mall_id'], HappinessEnum::ADDONS_NAME, 'basic'); $pension_scale = $setting['pension_scale'] ?? 0; if(empty($pension_scale)) { $this->error = '请先设置养老金比例'; return false; } $is_settle=StatusEnum::DISABLED; if($order_status==$setting['settlement_method']) { $is_settle=StatusEnum::ENABLED; } //查询是否有订单 $pension_order=HappinessPension::find()->where(['order_no'=>$order['order_no']])->asArray()->one(); if(!empty($pension_order)) { $res = HappinessPension::setData([ 'id'=>$pension_order['id'], 'is_settle'=>$is_settle ]); if($res === false) { $this->error=HappinessPension::getStaticError(); return false; } } $money=bcmul($order['pay_money'],bcdiv($pension_scale,100,4),2); if($money<=0) { $this->error = '赠送金额为0'; return false; } $data['user_id']=$order['user_id']; $data['mall_id']=$order['mall_id']; $data['order_id']=$order['id']; $data['order_no']=$order['order_no']; $data['order_status']=StatusEnum::DISABLED; $data['is_settle']=$is_settle; $data['settle_time']=0; $data['money']=$money; //查询是否有第三方平台账号 $third=HappinessThirdUser::find()->where(['user_id'=>$order->user_id,'mall_id'=>$order->mall_id, 'status'=>StatusEnum::ENABLED,'type'=>1])->one(); $data['uid']=$third?$third->third_id:0; $res=HappinessPension::setData($data); if($res===false) { $this->error = HappinessPension::getStaticError(); Yii::error('赠送养老金失败'); Yii::error($this->error); return false; } return true; } //入账养老金 public function send($uid, $money) { //若未注册用户需要先注册用户并实名认证(一般在注册用户的时候会自动注册) //给予用户发送养老金 try { $data=['uid'=>$uid,'pension'=>$money]; $time=time(); $sign=$this->sign($data,$time); $this->post($this->url.'gzc',$data,$sign,$time); return true; } catch (\Exception $e) { $exception = FormatHelper::exception($e, "养老金入账报错".$e->getFile()); Yii::error($exception); $this->error = $e->getMessage(); return false; } } //实名操作 public function real($user_id,$uid,$user_name,$user_card,$card_positive,$card_reverse,$mobile) { try { $data=['uid'=>$uid,'user_name'=>$user_name,'user_card'=>$user_card,'mobile'=>$mobile, 'card_positive'=>$card_positive,'card_reverse'=>$card_reverse]; $time=time(); $sign=$this->sign($data,$time); $res=$this->post($this->url.'certification',$data,$sign,$time); if(isset($res['data']) && $res['data']) { //保存第三方信息 $saveData=[ 'type'=>1, 'user_id'=>$user_id, 'id_no'=>$user_card, 'is_real'=>1, 'id_img'=>$card_positive, 'id_back_img'=>$card_reverse, 'user_name' => $user_name, ]; $res=HappinessThirdUser::setData($saveData); if($res===false) { $this->error=HappinessThirdUser::getStaticError(); return false; } return true; } return false; } catch (\Exception $e) { $exception = FormatHelper::exception($e, "养老金实名报错".$e->getFile()); Yii::error($exception); $this->error = $e->getMessage(); return false; } } public function register($mobile,$mall_id,$user_id) { try { $data=['phone'=>$mobile,'spread'=>0]; $time=time(); $sign=$this->sign($data,$time); $res=$this->post($this->url.'register',$data,$sign,$time); if(isset($res['data']) && $res['data']['uid']) { //保存第三方信息 $saveData=[ 'uid'=>$res['data']['uid'], 'mall_id'=>$mall_id, 'type'=>1, 'user_id'=>$user_id ]; $resSave=HappinessThirdUser::setData($saveData); if($resSave===false) { $this->error=HappinessThirdUser::getStaticError(); return false; } return $res['data']; } $this->error='注册失败'; return false; } catch (\Exception $e) { $exception = FormatHelper::exception($e, "养老金注册报错".$e->getFile()); Yii::error($exception); $this->error = $e->getMessage(); return false; } } protected function sign($data,$time) { //$data = [ // 'phone' => 15210999641, // 'spread' =>0, //]; ksort($data); $params = ''; foreach ($data as $key => $value) { $params .= '&' . $key . '=' . $value; } $params = ltrim($params, '&'); $sign=strtoupper(md5($params . '&key=' . $this->thirdKey . '&signKey=' . $this->thirdSignKey . '×tamp=' . $time)); return $sign; } protected function post($url,$data,$sign,$time) { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $data, CURLOPT_HTTPHEADER => [ "key: $this->thirdKey", "sign: $sign", "timestamp: $time" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { throw new \Exception('curl错误:' . $err); } else { Yii::error('养老金返回信息'); Yii::error($response); $result = json_decode($response,true); if (isset($result['status']) && $result['status'] != '200') { throw new \Exception($result['message']); } return $result; } } public static function cancel($order_id) { HappinessPension::updateAll(['order_status'=>HappinessPensionEnum::CANCEL],['order_id'=>$order_id]); } }