php實現銀聯商務公眾號+服務窗支付的示例程式碼
之前我們學習了銀聯商務的H5支付,但是現在H5支付不支援微信支付,最後發現銀聯商務的公眾號+服務窗支付可以支援支付寶支付+微信支付+銀聯支付
一:介面地址:
測試介面地址:https://qr-test2.chinaums.com/netpay-portal/qmf/webPay.do?
正式介面地址:https://qr.chinaums.com/netpay-portal/qmf/webPay.do?
二:主要引數說明:
介面使用的是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
8:tid
銀聯商務的公眾號+服務窗支付產品的終端號
9:totalAmount
支付總金額,單位為分
10:notifyUrl
支付結果通知地址
11:returnUrl
網頁跳轉地址
12:sign
簽名,將上面的引數按照a-z的順序進行排序,排序完成之後用&字元連線起來,連線起來之後如果存在轉義字元,那麼去掉轉義字元,然後進行md5加密獲取到簽名
三:銀聯商務的公眾號+服務窗支付例項:
//測試號相關資訊 $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/netpay-route-server/api/
正式介面:https://qr.chinaums.com/netpay-route-server/api/
2:主要引數說明
(1)msgSrc
訊息來源,例:WWW.TEST.COM
(2)msgType
訊息來源,直接填入:refund
(3)requestTimestamp
報文請求時間,格式為yyyy-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; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援碼農教程。