PC网站通过微信扫码支付之服务端实现
支付申请说明参考:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=3_1
微信扫码支付可分为两种模式,本示例选择模式二,具体流程及API文档参考:
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5
下面仅说明服务端的实现,主要包含两部分:
一、根据客户端请求生成内部订单信息,然后调用微信统一下单API,得到预支付交易链接(二维码图片地址),返回给客户端
可参看前一篇文章:微信内网页开发 - 公众号支付
1、前端H5页面请求服务端生成唯一订单号(包括用户信息,支付金额,商品信息等),服务端在数据库创建一条新记录
2、前端H5页面请求服务端Perl CGI脚本进行支付: 例如https:/xxxx/cgi-bin/pay.pl?do=qrcodepay&order_id=xxxxxxx&openid=xxxxxx
////脚本处理
if ($cgi->param('do') eq "qrcodepay") {
}
3、CGI脚本调用接口访问数据库,获取支付记录信息,调用微信统一下单接口
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
与H5公众号支付区别的几个参数如下:
if ($qrcode) {#PC扫码支付
$PayInfo->{service}= "pay.weixin.native";
} else {#公众号内支付必须传sub_openid
$PayInfo->{sub_openid} = $openid;
$PayInfo->{service}= "pay.weixin.jspay";
}
4、服务端得到二维码链接code_url、code_img_url后,CGI重定向到H5指定的页面,客户端向用户展示二维码
my $redirect_url = "http://xxxx/recharge_pay.html?order_id=$order_id&RMB=$order_info->{rmb}&code_url=$code_url&code_img_url=$code_img_url";
print $cgi->redirect($redirect_url);
二、用户扫码支付后,微信服务器向notify_url指定的回调地址通知支付结果
*三、支付成功后如何通知前端(PC端)页面进行刷新?
方式一、可以定时访问服务端的某个接口,根据订单号获取支付状态
方式二、如果客户端和服务端通信的协议支持长连接,比如websocket,那么服务端收到微信服务器的notify通知后,就可以采取推送消息给客户端,让客户端刷新页面