php实现银联扫码支付

最近公司十分的忙,好长时间没有写博客了,今天终于忙里偷闲了一把,最近公司有个项目需要使用到扫码支付,这里记录下银联的扫码支付实现

一:接口地址

测试接口: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开头

你可能感兴趣的:(银联,支付,php,yii2,httpclient)