getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; if(empty($data)){ return Model::asReturnError('参数获取失败'); } $method = 'gnete.psbc.electronic.PsbcReceiverApply'; $methodName = 'applyC'; $setBizContent['tranDate'] = date('Ymd', time()); $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = $apply_no; $setBizContent['psMerOrderNo'] = $data['applyNo']; $setBizContent = array_merge($setBizContent,$data); $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $requestBody = $client->__get("requestBody"); \Yii::info('银联申请绑定-请求报文:'.json_encode($requestBody,JSON_UNESCAPED_UNICODE),'electronic'); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); \Yii::info('银联申请绑定-返回信息:'.json_encode($responseBody,JSON_UNESCAPED_UNICODE),'electronic'); if($responseBody['response']['respCode'] != 'PSBC0000'){ return Model::asReturnError($responseBody['response']['respMessage']); } if($responseBody['code'] != '00000'){ return Model::asReturnError($responseBody['msg']); } return Model::asReturnSuccess('发送成功,请输入短信验证码'); }catch (\Exception $e){ \Yii::info('银联申请绑定-错误:'.$e->getMessage(),'electronic'); return Model::asReturnError($e->getMessage()); } } //短信重发接口 public function send_sms_reNotify($data,$apply_no) { try { $plugin = new \app\models\common\PluginService(); $updcService = $plugin->getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; if(empty($data)){ return Model::asReturnError('参数获取失败'); } $method = 'gnete.psbc.electronic.PsSms'; $methodName = 'reNotify'; $setBizContent['tranDate'] = date('Ymd', time()); $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = $apply_no; $setBizContent['psMerOrderNo'] = $data['applyNo']; $setBizContent = array_merge($setBizContent,$data); $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $requestBody = $client->__get("requestBody"); \Yii::info('银联短信重发-请求报文:'.json_encode($requestBody,JSON_UNESCAPED_UNICODE),'electronic'); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); \Yii::info('银联短信重发-返回信息:'.json_encode($responseBody,JSON_UNESCAPED_UNICODE),'electronic'); if($responseBody['response']['respCode'] != 'PSBC0000'){ return Model::asReturnError($responseBody['response']['respMessage']); } if($responseBody['code'] != '00000'){ return Model::asReturnError($responseBody['msg']); } return Model::asReturnSuccess('发送成功,请输入短信验证码'); }catch (\Exception $e){ \Yii::info('银联短信重发-错误:'.$e->getMessage(),'electronic'); return Model::asReturnError($e->getMessage()); } } //短信确认 public function verify_sms($data,$apply_no) { try { //获取银联配置 $plugin = new \app\models\common\PluginService(); $updcService = $plugin->getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; if(empty($data)){ return Model::asReturnError('参数获取失败'); } $method = 'gnete.psbc.electronic.PsSms'; $methodName = 'check'; $setBizContent['tranDate'] = date('Ymd', time()); $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = $apply_no; $setBizContent['psMerOrderNo'] = $data['applyNo']; $setBizContent = array_merge($setBizContent,$data); $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $requestBody = $client->__get("requestBody"); \Yii::info('银联短信确认-请求报文:'.json_encode($requestBody,JSON_UNESCAPED_UNICODE),'electronic'); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); \Yii::info('银联短信确认-返回信息:'.json_encode($responseBody,JSON_UNESCAPED_UNICODE),'electronic'); if($responseBody['response']['respCode'] != 'PSBC0000'){ return Model::asReturnError($responseBody['response']['respMessage']); } if($responseBody['code'] != '00000'){ return Model::asReturnError($responseBody['msg']); } return Model::asReturnSuccess('绑定成功'); }catch (\Exception $e){ \Yii::info('银联短信确认-错误:'.$e->getMessage(),'electronic'); return Model::asReturnError($e->getMessage()); } } //银联文件上传 public function psUpload($pic) { try { //获取银联配置 $plugin = new \app\models\common\PluginService(); $updcService = $plugin->getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; $method = 'gnete.psbc.electronic.PsbcFile'; $methodName = 'upload'; $doc_pic = SiteHelper::getFullUrl($pic); $extension = pathinfo($doc_pic)['extension']; $filename = pathinfo($doc_pic)['filename']; //basename有后缀,filename无后缀 $file_md5 = md5_file($doc_pic); //md5值 $file_md5_low = strtolower($file_md5); $bytes = []; $byteArray = unpack("c*",file_get_contents($doc_pic)); foreach ($byteArray as $k=>$v){ $bytes[] = $v; } $data['acsMerNo'] = $mchId; //接入商户号 $data['fileName'] = $filename; $data['fileType'] = $extension; //文件类型 $data['md5Code'] = $file_md5; //文件内容hash值 根据文件内容进行MD5计算后的值,注意小写 $data['fileData'] = $bytes; //文件内容 文件转换成byte数组 $setBizContent['tranDate'] = date('Ymd', time()); $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = date('YmdHis', time()); //例:2551698526628233216 $setBizContent['psMerOrderNo'] = 'PS' . date('YmdHis', time());; //例:PS255169852662823321601 $setBizContent['fileType'] = $extension; $setBizContent['fileData'] = $bytes; $setBizContent['fileName'] = $filename; $setBizContent['md5Code'] = $file_md5; $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent,JSON_UNESCAPED_UNICODE); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); \Yii::info('银联文件上传返回信息:'.json_encode($responseBody,JSON_UNESCAPED_UNICODE),'electronic'); if($responseBody['response']['respCode'] != 'PSBC0000'){ $subMsg = $responseBody['response']['respMessage']; return Model::asReturnError($subMsg); } if($responseBody['code'] != '00000'){ $retMsg = $responseBody['msg']; return Model::asReturnError($retMsg); } $psFileId = $responseBody['response']['data']['psFileId']; return Model::asReturnSuccess('上传成功',['psFileId' => $psFileId]); }catch (\Exception $e){ \Yii::info('银联文件上传信息-'.$e->getMessage(),'electronic'); return Model::asReturnError($e->getMessage()); } } public function psOrder($paymentOrder,$param) { try { return Model::asReturnSuccess('分账申请成功'); //获取银联配置 $plugin = new \app\models\common\PluginService(); $updcService = $plugin->getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; $paymentOrderUnion = PaymentOrderUnion::findOne(['id' => $paymentOrder->payment_order_union_id,'is_pay' => 1]); if($paymentOrderUnion == null){ $msg = "银联单次分账-{$paymentOrder->order_no}-PaymentOrderUnion信息不存在-{$paymentOrder->payment_order_union_id}"; \Yii::info($msg,'union_pay'); return Model::asReturnError($msg); } $psReceivers = []; $psReceivers['type'] = 'C'; $psReceivers['psNo'] = CardUnion::getPsNo($param['card_id']); $psReceivers['psAmount'] = sprintf('%.2f',$param['money']) * 100; $psReceivers['psAmount'] = (string)$psReceivers['psAmount']; $psReceivers['psRemark'] = '分到个人'; $psReceivers['remark'] = $paymentOrderUnion->id; $method = 'gnete.psbc.trade.PsOrder'; $methodName = 'psOrder'; $out_trade_no = $paymentOrderUnion->out_trade_no; $psMerOrderNo = UniqueOrderNo::generate(UniqueOrderNo::ORDER_TYPE_PS_MER_ORDER,OrderUnionMeta::class,24,1,3,'ps_mer_order_no'); $data['tranDate'] = $param['tranDate']; $data['acsMerNo'] = $mchId; //接入商户号 $data['merOrderNo'] = $out_trade_no; //商户订单号 //在商户侧须唯一,单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号只能请求一次。只能是数字、大小写字母 $data['psMerOrderNo'] = $psMerOrderNo; //商户分账单号 $data['orderAmount'] = sprintf('%.2f', $paymentOrderUnion->amount) * 100; $data['orderAmount'] = (string)$data['orderAmount']; //订单金额,单位分 /** * 分账接收方列表 *'type' => 'C',//分账接收方类型 *'psNo' => 'C', //分账接收方编码 *'psAmount' => 'C', //分账金额 *'psRemark' => '分到个人', //分账备注 *'remark' => '', //备注,商户保留域,显示到报表 */ $data['psReceivers'] = $psReceivers; $data['remark'] = ''; //备注 $setBizContent['tranDate'] = $param['tranDate']; $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = $out_trade_no; $setBizContent['psMerOrderNo'] = $psMerOrderNo; $setBizContent = array_merge($setBizContent,$data); $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $requestBody = $client->__get("requestBody"); \Yii::info("银联单次分账-请求报文:-{$paymentOrder->order_no}".json_encode($requestBody,JSON_UNESCAPED_UNICODE),'union_pay'); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); $order_union_meta['user_id'] = $paymentOrderUnion->user_id; $order_union_meta['payment_order_union_id'] = $paymentOrderUnion->id; $order_union_meta['ps_mer_order_no'] =$psMerOrderNo; $order_union_meta['type'] = $methodName; $order_union_meta['is_delete'] = 0; $order_union_meta['created_at'] = time(); $order_union_meta['deleted_at'] = 0; if($responseBody['response']['respCode'] != 'PSBC0000'){ $subMsg = $responseBody['response']['respMessage']; $order_union_meta['desc'] = $subMsg; \Yii::info("银联单次分账-返回信息:-{$paymentOrder->order_no}-{$subMsg}",'union_pay'); \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); return Model::asReturnError($subMsg); } if($responseBody['code'] != '00000'){ $retMsg = $responseBody['msg']; $order_union_meta['desc'] = $retMsg; \Yii::info("银联单次分账-返回信息:-{$paymentOrder->order_no}-{$retMsg}",'union_pay'); \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); return Model::asReturnError($retMsg); } $order_union_meta['desc'] = 'SUCCESS'; \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); \Yii::info('银联单次分账-SUCCESS'.$paymentOrderUnion->id,'union_pay'); return Model::asReturnSuccess('分账申请成功',['merOrderNo' => $out_trade_no,'psMerOrderNo' => $psMerOrderNo]); }catch (\Exception $e){ \Yii::info('银联单次分账-'.$e->getMessage(),'union_pay'); return Model::asReturnError($e->getMessage()); } } //多次分账 public function psOrderMulti($paymentOrder,$param) { try { return Model::asReturnSuccess('分账申请成功'); //获取银联配置 $plugin = new \app\models\common\PluginService(); $updcService = $plugin->getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; $paymentOrderUnion = PaymentOrderUnion::findOne(['id' => $paymentOrder->payment_order_union_id]); if($paymentOrderUnion == null){ $msg = "银联多次分账-{$paymentOrder->order_no}-PaymentOrderUnion信息不存在-{$paymentOrder->payment_order_union_id}"; \Yii::info($msg,'union_pay'); return Model::asReturnError($msg); } $psReceivers = []; $psReceivers['type'] = 'C'; $psReceivers['psNo'] = CardUnion::getPsNo($param['card_id']); $psReceivers['psAmount'] = sprintf('%.2f',$param['money']) * 100; $psReceivers['psAmount'] = (string)$psReceivers['psAmount']; $psReceivers['psRemark'] = '分到个人'; $psReceivers['remark'] = $paymentOrderUnion->id; $method = 'gnete.psbc.trade.PsOrder'; $methodName = 'psOrderMulti'; $out_trade_no = $paymentOrderUnion->out_trade_no; $psMerOrderNo = UniqueOrderNo::generate(UniqueOrderNo::ORDER_TYPE_PS_MER_ORDER,OrderUnionMeta::class,24,1,3,'ps_mer_order_no'); $data['tranDate'] = date('Ymd', time()); $data['acsMerNo'] = $mchId; //接入商户号 $data['merOrderNo'] = $out_trade_no; //商户订单号 //在商户侧须唯一,单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号只能请求一次。只能是数字、大小写字母 $data['psMerOrderNo'] = $psMerOrderNo; //商户分账单号 $data['orderAmount'] = sprintf('%.2f', $paymentOrderUnion->amount) * 100; $data['orderAmount'] = (string)$data['orderAmount']; //订单金额,单位分 /** * 分账接收方列表 *'type' => 'C',//分账接收方类型 *'psNo' => 'C', //分账接收方编码 *'psAmount' => 'C', //分账金额 *'psRemark' => '分到个人', //分账备注 *'remark' => '', //备注,商户保留域,显示到报表 */ $data['psReceivers'] = $psReceivers; $data['remark'] = ''; //备注 $setBizContent['tranDate'] = date('Ymd', time()); $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = $out_trade_no; $setBizContent['psMerOrderNo'] = $psMerOrderNo; $setBizContent = array_merge($setBizContent,$data); $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $requestBody = $client->__get("requestBody"); \Yii::info("银联多次分账-请求报文:-{$paymentOrder->order_no}".json_encode($requestBody,JSON_UNESCAPED_UNICODE),'union_pay'); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); $order_union_meta['user_id'] = $paymentOrderUnion->user_id; $order_union_meta['payment_order_union_id'] = $paymentOrderUnion->id; $order_union_meta['ps_mer_order_no'] =$psMerOrderNo; $order_union_meta['type'] = $methodName; $order_union_meta['is_delete'] = 0; $order_union_meta['created_at'] = time(); $order_union_meta['deleted_at'] = 0; if($responseBody['response']['respCode'] != 'PSBC0000'){ $subMsg = $responseBody['response']['respMessage']; $order_union_meta['desc'] = $subMsg; \Yii::info("银联多次分账-返回信息:-{$paymentOrder->order_no}-{$subMsg}",'union_pay'); \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); return Model::asReturnError($subMsg); } if($responseBody['code'] != '00000'){ $retMsg = $responseBody['msg']; $order_union_meta['desc'] = $retMsg; \Yii::info("银联多次分账-返回信息:-{$paymentOrder->order_no}-{$retMsg}",'union_pay'); \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); return Model::asReturnError($retMsg); } $order_union_meta['desc'] = 'SUCCESS'; \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); \Yii::info('银联多次分账-SUCCESS'.$paymentOrderUnion->id,'union_pay'); return Model::asReturnSuccess('分账申请成功',['merOrderNo' => $out_trade_no,'psMerOrderNo' => $psMerOrderNo]); }catch (\Exception $e){ \Yii::info('银联多次分账-'.$e->getMessage(),'union_pay'); return Model::asReturnError($e->getMessage()); } } /** * 分账完结 */ public function psOrderFinish($paymentOrder) { try { return Model::asReturnSuccess('分账申请成功'); //获取银联配置 $plugin = new \app\models\common\PluginService(); $updcService = $plugin->getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; $paymentOrderUnion = PaymentOrderUnion::findOne(['id' => $paymentOrder->payment_order_union_id]); if($paymentOrderUnion == null){ $msg = "银联分账完结-{$paymentOrder->order_no}-PaymentOrderUnion信息不存在-{$paymentOrder->payment_order_union_id}"; \Yii::info($msg,'union_pay'); return $msg; } $method = 'gnete.psbc.trade.PsOrder'; $methodName = 'psOrderFinish'; $merOrderNo = $paymentOrderUnion->out_trade_no; $psMerOrderNo = UniqueOrderNo::generate(UniqueOrderNo::ORDER_TYPE_PS_MER_ORDER,OrderUnionMeta::class,24,1,3,'ps_mer_order_no'); $data['tranDate'] = date('Ymd', time()); $data['acsMerNo'] = $mchId; //接入商户号 $data['merOrderNo'] = $merOrderNo; //商户订单号 与原交易商户订单号一致 //在商户侧须唯一,单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号只能请求一次。只能是数字、大小写字母 $data['psMerOrderNo'] = $psMerOrderNo; //商户分账单号 $data['orderAmount'] = sprintf('%.2f', $paymentOrderUnion->amount) * 100; $data['orderAmount'] = (string)$data['orderAmount']; //订单金额,单位分 $data['psRemark'] = $merOrderNo.'完结分账'; //备注 $setBizContent['tranDate'] = date('Ymd', time()); $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = $merOrderNo; $setBizContent['psMerOrderNo'] = $psMerOrderNo; $setBizContent = array_merge($setBizContent,$data); $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $requestBody = $client->__get("requestBody"); \Yii::info("银联分账完结-请求报文-{$paymentOrder->order_no}-".json_encode($requestBody,JSON_UNESCAPED_UNICODE),'union_pay'); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); $order_union_meta['user_id'] = $paymentOrderUnion->user_id; $order_union_meta['payment_order_union_id'] = $paymentOrderUnion->id; $order_union_meta['ps_mer_order_no'] =$psMerOrderNo; $order_union_meta['type'] = $methodName; $order_union_meta['is_delete'] = 0; $order_union_meta['created_at'] = time(); $order_union_meta['deleted_at'] = 0; if($responseBody['response']['respCode'] != 'PSBC0000'){ $subMsg = $responseBody['response']['respMessage']; $order_union_meta['desc'] = $subMsg; \Yii::info("银联分账完结-请求报文-{$paymentOrder->order_no}-".$subMsg,'union_pay'); \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); return Model::asReturnError($subMsg); } if($responseBody['code'] != '00000'){ $retMsg = $responseBody['msg']; $order_union_meta['desc'] = $retMsg; \Yii::info("银联分账完结-请求报文-{$paymentOrder->order_no}-".$retMsg,'union_pay'); \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); return Model::asReturnError($retMsg); } $order_union_meta['desc'] = 'SUCCESS'; \Yii::$app->db->createCommand()->insert(OrderUnionMeta::tableName(), $order_union_meta)->execute(); \Yii::info('银联分账完结-SUCCESS'.$paymentOrderUnion->id,'union_pay'); return Model::asReturnSuccess('分账成功'); }catch (\Exception $e){ \Yii::info('银联分账完结-'.$e->getMessage(),'union_pay'); return Model::asReturnError($e->getMessage()); } } //分账结果查询 public function psResultQuery($param) { try { return Model::asReturnSuccess('银联分账结果查询',['status' => '02']); //获取银联配置 $plugin = new \app\models\common\PluginService(); $updcService = $plugin->getUpdcService(0); $appId = $updcService->appId; $mchId = $updcService->mchId; $private_cert = $updcService->privateKey; $public_cert = $updcService->publicKey; $password = $updcService->privateKeyPassword; $url = $updcService->url; $method = 'gnete.psbc.trade.PsOrderQuery'; $methodName = 'psResultQuery'; $data['tranDate'] = date('Ymd', time()); $data['acsMerNo'] = $mchId; //接入商户号 $data['merOrderNo'] = $param['merOrderNo']; //商户订单号 与原交易商户订单号一致 //在商户侧须唯一,单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号只能请求一次。只能是数字、大小写字母 $data['psMerOrderNo'] = $param['psMerOrderNo']; //商户分账单号 $setBizContent['tranDate'] = date('Ymd', time()); $setBizContent['acsMerNo'] = $mchId; //接入商户号 $setBizContent['merOrderNo'] = $param['merOrderNo']; $setBizContent['psMerOrderNo'] = $param['psMerOrderNo']; $setBizContent = array_merge($setBizContent,$data); $setBizContent['msgBody'] = $data; $bizContentJson = json_encode($setBizContent); $client=new Client(); $client->__set("appId",$appId); $client->__set("url",$url); $client->__set("privateKeyPassword",$password); $client->__set("privateKey",$private_cert); $client->__set("publicKey",$public_cert); $client->__set("isHttps",true); //设置加密算法类型 $client->__set("algorithm",Algorithm::SHA256withRSA); //设置公共请求参数对象 $gateWayRequest=new GateWayRequest(); //服务名 $gateWayRequest->__set("apiInterfaceId",$method); //方法名 $gateWayRequest->__set("methodName",$methodName); //版本号 $gateWayRequest->__set("version","1.0.1"); $gateWayRequest->__set("bizContent",$bizContentJson); $client->__set("gateWayRequest",$gateWayRequest); $client->apiRequest(); $requestBody = $client->__get("requestBody"); \Yii::info('银联分账结果查询-请求报文:'.json_encode($requestBody,JSON_UNESCAPED_UNICODE),'union_select'); $responseBody = $client->__get("responseBody"); $responseBody = json_decode($responseBody,true); \Yii::info('银联分账结果查询-返回信息:'.json_encode($responseBody,JSON_UNESCAPED_UNICODE),'union_select'); if($responseBody['response']['respCode'] != 'PSBC0000'){ $subMsg = $responseBody['response']['respMessage']; return Model::asReturnError($subMsg); } if($responseBody['code'] != '00000'){ $retMsg = $responseBody['msg']; return Model::asReturnError($retMsg); } \Yii::info('银联分账结果查询-SUCCESS-'.$param['order_no'],'union_select'); return Model::asReturnSuccess('分账成功',$responseBody['response']['data']); }catch (\Exception $e){ \Yii::info('银联分账结果查询-'.$e->getMessage(),'union_select'); return Model::asReturnError($e->getMessage()); } } }