cxgj/models/common/union/CardFrom.php
2023-11-27 09:45:13 +08:00

754 lines
36 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @author Any
* @description KISS
* @date 2021年9月28日
* @version 1.0.0
*
* _____LOG_____
*
*/
namespace app\models\common\union;
use app\components\SysConst;
use app\models\Balance;
use app\models\CardUnion;
use app\models\Goods;
use app\models\GoodsHub;
use app\models\Model;
use app\components\SiteHelper;
use app\models\Order;
use app\models\OrderDetail;
use app\models\OrderUnionMeta;
use app\models\PaymentOrder;
use app\models\PaymentOrderUnion;
use app\models\UniqueOrderNo;
use app\models\User;
use updc\bean\Algorithm;
use updc\bean\Client;
use updc\bean\GateWayRequest;
class CardFrom extends Model
{
//发送申请
public function send_bank_apply($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.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());
}
}
}