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通知后,就可以采取推送消息给客户端,让客户端刷新页面

相关推荐