754 lines
36 KiB
PHP
754 lines
36 KiB
PHP
<?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());
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|