php銀聯ビジネス公衆番号+サービスウィンドウ支払いを実現

4843 ワード

以前、私たちは銀聯ビジネスのH 5支払いを勉強しましたが、今H 5支払いは微信支払いをサポートしていません.最後に、銀聯ビジネスの公衆番号+サービスウィンドウ支払いは支付宝支払い+微信支払い+銀聯支払いをサポートできることを発見しました.
一:インタフェースアドレス:
テストインタフェースアドレス:https://qr-test2.chinaums.com...
正式なインタフェースアドレス:https://qr.chinaums.com/netpa...
二:主なパラメータの説明:
インタフェースはgetパラメータを使用し、インタフェースパラメータをインタフェースアドレスに直接配置した後、このインタフェースはブラウザからインタフェースに直接ジャンプします.
1:instMid
業務タイプ、直接記入:YUEDANDEFAULT
2:merOrderId
商家注文番号
3:mid
銀聯ビジネスの公衆番号+サービスウィンドウ支払製品の商家番号
4:msgSrc
WWW.TEST.COM
5:msgType(このパラメータが重要かどうかは、主に何を使って支払うかを区別します)
メッセージタイプ:微信支払い使用:WXPay.jsPay,支付宝支払使用:trade.jsPay,銀聯支払使用:qmf.jspayまたはqmf.webPay
6:orderDesc
オーダーの説明
7:requestTimestamp
メッセージ要求時間:yyyy-MM-dd HH:mm:ss、例えば2019-10-01 12:12:12:12
8:tid
銀聯ビジネスの公衆番号+サービスウィンドウ支払製品の端末番号
9:totalAmount
支払い総額、単位は分
10:notifyUrl
支払結果通知先
11:returnUrl
Webページのジャンプアドレス
12:sign
署名は、上のパラメータをa-zの順に並べ替え、並べ替えが完了したら&文字で接続し、接続後にエスケープ文字が存在する場合はエスケープ文字を削除しmd 5暗号化して署名を取得します
三:銀聯ビジネスの公衆番号+サービスウィンドウの支払い例:
//       
$mdKey = 'fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR';
$mid = '898340149000005';
$tid = '88880001';
$time = time();
$requestTimestamp = date('Y-m-d H:i:s',$time);
$merOrderId = date('YmdHis') . mt_rand(100000, 999999);
$msgType = 'qmf.jspay';//    :WXPay.jsPay,     :trade.jsPay,    :qmf.jspay(qmf.webPay)
$data = [
    'instMid' => 'YUEDANDEFAULT',//    
    'merOrderId' => $merOrderId,//   
    'mid' => $mid,//   
    'msgSrc' => 'WWW.TEST.COM',//    
    'msgType' => $msgType,//    
    'orderDesc' => '  ',//    
    'requestTimestamp' => $requestTimestamp,//      
    'tid' => $tid,//   
    'totalAmount' => '1',//    
    'notifyUrl' => 'http://d9vhs4.natappfree.cc',//        ,            post   。  status          
    'returnUrl' => 'http://d9vhs4.natappfree.cc',//      ,            get   。  status          
];
ksort($data);
reset($data);
$options = '';
foreach ($data as $key => $value) {
    $options .= $key . '=' . $value .'&';
}
$options = rtrim($options, '&');
//      ,      
if(get_magic_quotes_gpc()){
    $options = stripslashes($options);
}
$sign = md5($options . $mdKey);
$options .= '&sign=' . $sign;
$url = 'https://qr-test2.chinaums.com/netpay-portal/webpay/pay.do?'.$options;
//   url        

支払い終了後に返されるstatusパラメータの値:
四:返金の支払い
支払いがあれば返金がありますが、どうやって返金しますか?
1:返金インタフェース
テストインタフェース:https://qr-test2.chinaums.com...
正式なインタフェース:https://qr.chinaums.com/netpa...
2:主なパラメータの説明
(1)msgSrc
メッセージソース、例:WWW.TEST.COM
(2)msgType
メッセージソース、直接入力:refund
(3)requestTimestamp
メッセージ要求時間、フォーマットyyyyy-MM-dd HH:mm:ss、例えば:2019-10-01 12:12:12
(4)merOrderId
商家注文番号
(5)instMid
業務タイプ、直接YUEDANDEFAULTに記入
(6)mid
銀聯ビジネスの公衆番号+サービスウィンドウ支払製品の商家番号
(7)tid
銀聯ビジネスの公衆番号+サービスウィンドウ支払製品の端末番号
(8)refundAmount
払戻金額、単位は分
(9)refundDesc
返金の説明
(10)sign
に署名
実装方式は支払い中の署名と同じである
五:払戻の支払い例
//       
$mdKey = 'fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR';
$mid = '898340149000005';
$tid = '88880001';
$requestTimestamp = date('Y-m-d H:i:s',time());
$data = [
    'msgSrc' => 'WWW.TEST.COM',//    
    'msgType' => 'refund',//    
    'requestTimestamp' => $requestTimestamp,//      
    'merOrderId' => $merOrderId,//   
    'instMid' => $params['instMid'],//    
    'mid' => $mid,//   
    'tid' => $tid,//   
    'refundAmount' => 1,//    
    'refundDesc' => '  ',//    
];
ksort($data);
reset($data);
$options = '';
foreach ($data as $key => $value) {
    $options .= $key . '=' . $value .'&';
}
$options = rtrim($options, '&');
//      ,      
if(get_magic_quotes_gpc()){
    $options = stripslashes($options);
}
//  
$sign = md5($options . $mdKey);
$data['sign'] = $sign;
$client = new Client();
$response = $client->createRequest()
    ->setMethod('POST')
    ->setUrl('https://qr-test2.chinaums.com/netpay-route-server/api/')
    ->setData($data)
    ->setHeaders([
        'Content-Type'=>'application/json'
    ])
    ->setFormat(Client::FORMAT_JSON) //        
    ->send();
if ($response->isOk) {
    $data = $response->data;
    if ($data['refundStatus'] == 'SUCCESS') {
        //    
        return true;
    }
}
return false;
}