当前位置: 首页 > 后端技术 > PHP

php实现银联商务公众号+服务窗口支付

时间:2023-03-29 22:26:33 PHP

之前我们学习了银联商务的H5支付,但是现在H5支付不支持微信支付,最后发现银联商务的公众号+服务窗口支付可以支持支付宝支付+微信支付+银联支付1:接口地址:测试接口地址:https://qr-test2.chinaums.com...官方接口地址:https://qr.chinaums.com/netpa...2:主要参数说明:接口使用get传递参数。直接把接口参数填入接口地址后,该接口被浏览器直接跳转到接口1:instMid业务类型,直接填写:YUEDANDEFAULT2:merOrderId商户订单号3:公众号+服务窗口的mid商户ID银联支付产品4:msgSrc消息来源,如:WWW.TEST.COM5:msgType(这个参数是否重要,主要区分用什么支付)消息类型:微信支付使用:WXPay.jsPay,支付宝支付使用:trade.jsPay,银联支付使用:qmf.jspay或qmf.webPay6:orderDesc订单描述7:requestTimestamp消息请求时间,格式为:yyyy-MM-ddHH:mm:ss,如2019-10-0112:12:128:tidUnionPay的公众号+服务窗口支付产品终端号9:totalAmount支付总额,单位为分10:notifyUrl支付结果通知地址11:returnUrl网页跳转地址12:签名签名,将以上参数排序在a-z的顺序,将它们连接起来排序完成后的&字符,如果连接后有转义符,去掉转义符,然后进行md5加密得到签名3:银联商务公众号+服务窗口支付示例://考号相关信息$mdKey='fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR';$mid='898340149000005';$tid='88880001';$time=time();$requestTimestamp=date('Y-m: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'=>'test',//订单描述'requestTimestamp'=>$requestTimestamp,//消息请求时间'tid'=>$tid,//终端号'totalAmount'=>'1',//支付金额'notifyUrl'=>'http://d9vhs4.natappfree.cc',//支付结果通知地址,结果页面会通过post传递返回参数。使用状态值判断支付是否成功'returnUrl'=>'http://d9vhs4.natappfree.cc',//网页跳转地址,结果页面会通过get传递返回参数。使用状态值判断支付是否成功];ksort($data);reset($data);$options='';foreach($dataas$key=>$value){$options.=$k哎。'='。$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参数的值付款后:4:付款退款既然有付款就有退款,那么如何退款1:退款接口测试接口:https://qr-test2.chinaums.com...正式接口:https://qr.chinaums.com/netpa...2:主要参数说明(1)msgSrcmessageSource,例如:WWW.TEST.COM(2)msgTypemessagesource,直接填写:refund(3)requestTimestamp消息请求时间,格式为yyyy-MM-ddHH:mm:ss,如:2019-10-0112:12:12(4)merOrderId商户订单号(5)instMid业务类型,直接填写YUEDANDEFAULT(6)mid银联业务+服务窗口支付产品商户ID(7)tid银联业务公众号+服务窗口支付产品的终端编号(8)refundAmount退款金额,单位为分(9)refundDesc退款说明(10)signsignature实现方法同支付签名5:Paymentrefundexample//testnumber相关信息$mdKey='fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR';$mid='898340149000005';$tid='88880001';$requestTimestamp=date('Yrc-m-dH:i:s',time());$data='>msWWW.TEST.COM',//消息来源'msgType'=>'refund',//消息类型'requestTimestamp'=>$requestTimestamp,//消息请求时间'merOrderId'=>$merOrderId,//订单号'instMid'=>$params['instMid'],//商户类型'mid'=>$mid,//商户号'tid'=>$tid,//终端号'refundAmount'=>1,//退款amount'refundDesc'=>'test',//退款描述];ksort($data);reset($data);$options='';foreach($dataas$key=>$value){$options.=$键。'='。$value.'&';}$options=rtrim($options,'&');//有转义符,则去掉转义符if(get_magic_quotes_gpc()){$options=stripslashes($options);}//签名$sign=md5($options.$mdKey);$data['sign']=$sign;$客户=新客户();$response=$client->createRequest()->setMmethod('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'){//退款成功returntrue;}}返回假;}