php 工商银行公众号支付代码_php实现银联商务公众号+服务窗支付
一:接口地址:
二:主要參數(shù)說明:
接口使用的是get傳參,直接將接口參數(shù)放到接口地址后,此接口是由瀏覽器直接跳轉到接口
1:instMid
業(yè)務類型,直接填入:YUEDANDEFAULT
2:merOrderId
商戶訂單號
3:mid
銀聯(lián)商務的公眾號+服務窗支付產(chǎn)品的商戶號
4:msgSrc
5:msgType(這個參數(shù)是否重要,主要區(qū)分使用什么進行支付)
消息類型:微信支付使用:WXPay.jsPay,支付寶支付使用:trade.jsPay,銀聯(lián)支付使用:qmf.jspay或qmf.webPay
6:orderDesc
訂單描述
7:requestTimestamp
報文請求時間,格式為:yyyy-MM-dd HH:mm:ss,如2019-10-01 12:12:12
8:tid
銀聯(lián)商務的公眾號+服務窗支付產(chǎn)品的終端號
9:totalAmount
支付總金額,單位為分
10:notifyUrl
支付結果通知地址
11:returnUrl
網(wǎng)頁跳轉地址
12:sign
簽名,將上面的參數(shù)按照a-z的順序進行排序,排序完成之后用&字符連接起來,連接起來之后如果存在轉義字符,那么去掉轉義字符,然后進行md5加密獲取到簽名
三:銀聯(liá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è)務類型 'merOrderId' => $merOrderId,//訂單號 'mid' => $mid,//商戶號 'msgSrc' => 'WWW.TEST.COM',//消息來源 'msgType' => $msgType,//消息類型 'orderDesc' => '測試',//訂單描述 'requestTimestamp' => $requestTimestamp,//報文請求時間 'tid' => $tid,//終端號 'totalAmount' => '1',//支付金額 'notifyUrl' => 'http://d9vhs4.natappfree.cc',//支付結果通知地址,結果頁面會將返回參數(shù)通過post傳過來。通過status值來判斷是否支付成功 'returnUrl' => 'http://d9vhs4.natappfree.cc',//網(wǎng)頁跳轉地址,結果頁面會將返回參數(shù)通過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參數(shù)取值:
四:支付退款
既然有支付那么就有退款,那么如何進行退款呢
1:退款接口
2:主要參數(shù)說明
(1)msgSrc
(2)msgType
消息來源,直接填入:refund
(3)requestTimestamp
報文請求時間,格式為yyyy-MM-dd HH:mm:ss,如:2019-10-01 12:12:12
(4)merOrderId
商戶訂單號
(5)instMid
業(yè)務類型,直接填入YUEDANDEFAULT
(6)mid
銀聯(lián)商務的公眾號+服務窗支付產(chǎn)品的商戶號
(7)tid
銀聯(lián)商務的公眾號+服務窗支付產(chǎn)品的終端號
(8)refundAmount
退款金額,單位為分
(9)refundDesc
退款說明
(10)sign
簽名
實現(xià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,//報文請求時間 'merOrderId' => $merOrderId,//訂單號 'instMid' => $params['instMid'],//業(yè)務類型 '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) //提交的數(shù)據(jù)的格式 ->send();
if ($response->isOk) {
$data = $response->data;
if ($data['refundStatus'] == 'SUCCESS') {
//退款成功 return true;
}
}
return false;
}以上內(nèi)容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業(yè)務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發(fā)、服務器性能調(diào)優(yōu)、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優(yōu)化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家或 者關注咱們下面的知乎專欄PHP架構師圈子?zhuanlan.zhihu.com
總結
以上是生活随笔為你收集整理的php 工商银行公众号支付代码_php实现银联商务公众号+服务窗支付的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: protel DXP软件应用技巧
- 下一篇: php创建不重复的7位数字,php如何生