最近公司十分的忙,好长时间没有写博客了,今天终于忙里偷闲了一把,最近公司有个项目需要使用到扫码支付,这里记录下银联的扫码支付实现
一:接口地址
测试接口:https://qr-test2.chinaums.com...
正式接口:https://qr.chinaums.com/netpa...
二:主要参数说明:
1:instMid
业务类型,直接填:QRPAYDEFAULT
2:mid
银联商务的商户号
3:msgSrc
消息来源,如:WWW.TEST.COM
4:msgType
消息类型:扫码支付填:bills.getQRCode
5:requestTimestamp
报文请求时间,格式为:yyyy-MM-dd HH:mm:ss,如2019-10-01 12:12:12
6:tid
银联商务终端号
7:billNo
订单号
8:billDate
订单日期,格式:yyyy-MM-dd
9:billDesc
订单描述
10:totalAmount
支付总金额,单位为分
11:notifyUrl
支付结果通知地址
12:sign
签名,将上面的参数按照a-z的顺序进行排序,排序完成之后用&字符连接起来,连接起来之后如果存在转义字符,那么去掉转义字符,然后进行md5加密获取到签名
三:银联扫码支付实例(银联扫码支付是一个接口,这里我是用Yii框架的yiisoft/yii2-httpclient拓展来实现)
例:
$mdKey = 'fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR';
$mid = '898340149000005';
$tid = '00000001';
$msgSrc = 'WWW.TEST.COM';
$time = time();
$requestTimestamp = date('Y-m-d H:i:s',$time);
$merOrderId = '3194' . date('YmdHis') . mt\_rand(100000, 999999);
$data = \[
'msgSrc' => $msgSrc,//消息来源
'msgType' => 'bills.getQRCode',//消息类型
'requestTimestamp' => $requestTimestamp,
'mid' => $mid,
'tid' => $tid,
'instMid' => 'QRPAYDEFAULT',
'billNo' => $merOrderId,
'billDate' => date('Y-m-d'),
'billDesc' => '图像采集',
'totalAmount' => 1,
'notifyUrl' => 'http://j527ks.natappfree.cc/test-pay/back',//接受支付通知的商户服务 url
\];
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;
$data = json\_encode($data);
$client = new Client(\[
'baseUrl' => 'https://qr-test2.chinaums.com'
\]);
$response = $client
->post('/netpay-route-server/api/', $data, \[
'Content-Type'=>'application/json'
\])
->send();
if ($response->isOk && $response->data\['errCode'\] == 'SUCCESS') {
//获取到的billQRCode参数是一个连接,将此连接生成二维码即可
$qrcode = Yii::$app->get('qrcode'); //这里获取的qrcode项为你配置文件中配置的QrCode的参数
Yii::$app->response->format = Response::FORMAT\_RAW;
Yii::$app->response->headers->add('Content-Type', $qrcode ->getContentType());
return $qrcode
->setText($response->data\['billQRCode'\]) //设置扫码二维码之后的显示信息,如果为链接的话,扫描二维码跳转至指定的链接
->writeString();
}
如上就可以实现扫码支付,以上需要注意的是订单号必须以来源编号开头,例如我使用的测试号就是3194开头
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。