php實(shí)現(xiàn)銀聯(lián)商務(wù)公眾號(hào)+服務(wù)窗支付的示例代碼
之前我們學(xué)習(xí)了銀聯(lián)商務(wù)的H5支付,但是現(xiàn)在H5支付不支持微信支付,最后發(fā)現(xiàn)銀聯(lián)商務(wù)的公眾號(hào)+服務(wù)窗支付可以支持支付寶支付+微信支付+銀聯(lián)支付
一:接口地址:
測(cè)試接口地址:https://qr-test2.chinaums.com/netpay-portal/qmf/webPay.do?
正式接口地址:https://qr.chinaums.com/netpay-portal/qmf/webPay.do?
二:主要參數(shù)說明:
接口使用的是get傳參,直接將接口參數(shù)放到接口地址后,此接口是由瀏覽器直接跳轉(zhuǎn)到接口
1:instMid
業(yè)務(wù)類型,直接填入:YUEDANDEFAULT
2:merOrderId
商戶訂單號(hào)
3:mid
銀聯(lián)商務(wù)的公眾號(hào)+服務(wù)窗支付產(chǎn)品的商戶號(hào)
4:msgSrc
消息來源,如:WWW.TEST.COM
5:msgType(這個(gè)參數(shù)是否重要,主要區(qū)分使用什么進(jìn)行支付)
消息類型:微信支付使用:WXPay.jsPay,支付寶支付使用:trade.jsPay,銀聯(lián)支付使用:qmf.jspay或qmf.webPay
6:orderDesc
訂單描述
7:requestTimestamp
報(bào)文請(qǐng)求時(shí)間,格式為:yyyy-MM-dd HH:mm:ss,如2019-10-01 12:12:12
8:tid
銀聯(lián)商務(wù)的公眾號(hào)+服務(wù)窗支付產(chǎn)品的終端號(hào)
9:totalAmount
支付總金額,單位為分
10:notifyUrl
支付結(jié)果通知地址
11:returnUrl
網(wǎng)頁跳轉(zhuǎn)地址
12:sign
簽名,將上面的參數(shù)按照a-z的順序進(jìn)行排序,排序完成之后用&字符連接起來,連接起來之后如果存在轉(zhuǎn)義字符,那么去掉轉(zhuǎn)義字符,然后進(jìn)行md5加密獲取到簽名
三:銀聯(lián)商務(wù)的公眾號(hào)+服務(wù)窗支付實(shí)例:
//測(cè)試號(hào)相關(guān)信息 $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,銀聯(lián)支付:qmf.jspay(qmf.webPay) $data = [ 'instMid' => 'YUEDANDEFAULT',//業(yè)務(wù)類型 'merOrderId' => $merOrderId,//訂單號(hào) 'mid' => $mid,//商戶號(hào) 'msgSrc' => 'WWW.TEST.COM',//消息來源 'msgType' => $msgType,//消息類型 'orderDesc' => '測(cè)試',//訂單描述 'requestTimestamp' => $requestTimestamp,//報(bào)文請(qǐng)求時(shí)間 'tid' => $tid,//終端號(hào) 'totalAmount' => '1',//支付金額 'notifyUrl' => 'http://d9vhs4.natappfree.cc',//支付結(jié)果通知地址,結(jié)果頁面會(huì)將返回參數(shù)通過post傳過來。通過status值來判斷是否支付成功 'returnUrl' => 'http://d9vhs4.natappfree.cc',//網(wǎng)頁跳轉(zhuǎn)地址,結(jié)果頁面會(huì)將返回參數(shù)通過get傳過來。通過status值來判斷是否支付成功 ]; ksort($data); reset($data); $options = ''; foreach ($data as $key => $value) { $options .= $key . '=' . $value .'&'; } $options = rtrim($options, '&'); //存在轉(zhuǎn)義字符,那么去掉轉(zhuǎn)義 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之后直接跳轉(zhuǎn)即可
支付結(jié)束后返回的status參數(shù)取值:
四:支付退款
既然有支付那么就有退款,那么如何進(jìn)行退款呢
1:退款接口
測(cè)試接口:https://qr-test2.chinaums.com/netpay-route-server/api/
正式接口:https://qr.chinaums.com/netpay-route-server/api/
2:主要參數(shù)說明
(1)msgSrc
消息來源,例:WWW.TEST.COM
(2)msgType
消息來源,直接填入:refund
(3)requestTimestamp
報(bào)文請(qǐng)求時(shí)間,格式為yyyy-MM-dd HH:mm:ss,如:2019-10-01 12:12:12
(4)merOrderId
商戶訂單號(hào)
(5)instMid
業(yè)務(wù)類型,直接填入YUEDANDEFAULT
(6)mid
銀聯(lián)商務(wù)的公眾號(hào)+服務(wù)窗支付產(chǎn)品的商戶號(hào)
(7)tid
銀聯(lián)商務(wù)的公眾號(hào)+服務(wù)窗支付產(chǎn)品的終端號(hào)
(8)refundAmount
退款金額,單位為分
(9)refundDesc
退款說明
(10)sign
簽名
實(shí)現(xiàn)方式同支付中簽名相同
五:支付退款實(shí)例
//測(cè)試號(hào)相關(guān)信息 $mdKey = 'fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR'; $mid = '898340149000005'; $tid = '88880001'; $requestTimestamp = date('Y-m-d H:i:s',time()); $data = [ 'msgSrc' => 'WWW.TEST.COM',//消息來源 'msgType' => 'refund',//消息類型 'requestTimestamp' => $requestTimestamp,//報(bào)文請(qǐng)求時(shí)間 'merOrderId' => $merOrderId,//訂單號(hào) 'instMid' => $params['instMid'],//業(yè)務(wù)類型 'mid' => $mid,//商戶號(hào) 'tid' => $tid,//終端號(hào) 'refundAmount' => 1,//退款金額 'refundDesc' => '測(cè)試',//退款說明 ]; ksort($data); reset($data); $options = ''; foreach ($data as $key => $value) { $options .= $key . '=' . $value .'&'; } $options = rtrim($options, '&'); //存在轉(zhuǎn)義字符,那么去掉轉(zhuǎn)義 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) //提交的數(shù)據(jù)的格式 ->send(); if ($response->isOk) { $data = $response->data; if ($data['refundStatus'] == 'SUCCESS') { //退款成功 return true; } } return false; }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PHP傳值到不同頁面的三種常見方式及php和html之間傳值問題
這篇文章主要介紹了PHP傳值到不同頁面的三種常見方式及php和html之間傳值問題的相關(guān)資料,需要的朋友可以參考下2015-11-11php字符編碼轉(zhuǎn)換之gb2312轉(zhuǎn)為utf8
PHP輸出頁面時(shí)經(jīng)常有亂碼,怎么辦呢?今天我就提供一個(gè)方法,可以自動(dòng)判斷php字符編碼,把gbk或gb2312編碼的字符串轉(zhuǎn)為utf8 。2013-10-10PHP判斷表達(dá)式中括號(hào)是否匹配的簡單實(shí)例
下面小編就為大家?guī)硪黄狿HP判斷表達(dá)式中括號(hào)是否匹配的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10thinkphp框架表單數(shù)組實(shí)現(xiàn)圖片批量上傳功能示例
這篇文章主要介紹了thinkphp框架表單數(shù)組實(shí)現(xiàn)圖片批量上傳功能,結(jié)合實(shí)例形式分析了js前端圖片上傳與后臺(tái)thinkPHP文件處理相關(guān)操作技巧,需要的朋友可以參考下2020-04-04Yii中實(shí)現(xiàn)處理前后臺(tái)登錄的新方法
這篇文章主要介紹了Yii中實(shí)現(xiàn)處理前后臺(tái)登錄的新方法,具體分析了Yii中前后臺(tái)登錄的新思路與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-12-12php 處理png圖片白色背景色改為透明色的實(shí)例代碼
這篇文章主要介紹了php 處理png圖片白色背景色改為透明色的實(shí)例代碼,文中通過實(shí)例代碼給大家介紹了用PHP的GD庫把圖片的背景替換成透明背景,需要的朋友參考下2018-12-12PHP刪除字符串中非字母數(shù)字字符方法總結(jié)
在本篇文章里小編給大家分享了關(guān)于PHP刪除字符串中非字母數(shù)字字符方法和知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。2019-01-01