欢迎留言、转发
微信极速开发系列文章:http://www.jianshu.com/p/a172a1b69fdd
上一篇文章介绍了微信提供的那些支付方式以及公众号支付http://www.jianshu.com/p/cb2456a2d7a7
这篇文章我们来聊聊微信扫码支付(模式一以及模式二)
微信扫码支付文档
扫码支付分为以下两种方式:
【模式一】:商户后台系统根据微信支付规则链接生成二维码,链接中带固定参数productid(可定义为产品标识或订单号)。用户扫码后,微信支付系统将productid和用户唯一标识(openid)回调商户后台系统(需要设置支付回调URL),商户后台系统根据productid生成支付交易,最后微信支付系统发起用户支付流程。
【模式二】:商户后台系统调用微信支付统一下单API生成预付交易,将接口返回的链接生成二维码,用户扫码后输入密码完成支付交易。注意:该模式的预付单有效期为2小时,过期后无法支付。详细接入步
扫码支付模式一
1、设置支付回调URL
商户支付回调URL设置指引:进入公众平台–>微信支付–>开发配置–>扫码支付–>修改 如下图(来自官方文档)
在开源项目weixin-guide中
扫码支付模式一
的回调URL为http://域名[/项目名称]/pay/wxpay
2、根据微信支付规则链接生成二维码
2.1 生成二维码规则
二维码中的内容为链接,形式为:
weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
详细的参数说明参考文档 点击这里
商户ID(mch_id)如何获取点击这里
签名安全规则文档 点击这里
在开源项目weixin-guide中
扫码支付模式一
生成二维码规则封装如下:
|
|
以上action
在开源项目weixin-guide中 访问地址为http://域名[/项目名称]/pay/getCodeUrl
其中 product_id
根据实际的业务逻辑可以当做参数传入
2.2 生成二维码并在页面上显示
根据2.1生成二维码规则生成了二维码中的内容(链接)来生成二维码。
商户可调用第三方库生成二维码图片
这里使用google 开源图形码工具Zxing
项目中引入相关的jar包 具体配置参考项目中的pom.xml
|
|
封装的工具类为com.javen.kit.ZxingKit
|
|
OK 上面就是生成支付二维码的部分,接下来就是要将二维码显示在页面上,于是就有了下面的代码:com.javen.weixin.controller.WeixinPayController.getPayQRCode()
src\\main\\webapp\\view\\payQRCode.jsp
|
|
JSP 部分代码如下
最终生成二维码访问地址为
http://域名[/项目名称]/pay/scanCode1
以上就是微信扫码支付(模式一)生成支付二维码的全过程
3、扫码回调商户支付URL
用户扫码后,微信支付系统将productid和用户唯一标识(openid)回调商户后台系统。
此回调的URL为上文
设置支付回调的URL
。特别要注意的是返回参数是xml输入流
|
|
|
|
4、根据回调参数生成预付订单进行支付
根据回调参数调用统一下单API生成预支付交易的prepay_id
|
|
商户后台系统将prepay_id返回给微信支付系统,微信支付系统根据交易会话标识,发起用户端授权支付流程。
|
|
5、支付结果通用通知
官方文档 点击这里
对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。
推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,防止数据泄漏导致出现“假通知”,造成资金损失。
技术人员可登进微信商户后台扫描加入接口报警群。
此通知接收地址为生成预付订单时设置的notify_url
。在开源项目weixin-guide中通知默认的地址为http://域名[/项目名称]/pay/pay_notify
以上是微信扫码支付模式一的全过程。
扫码支付模式二
模式二与模式一相比,流程更为简单,不依赖设置的回调支付URL。商户后台系统先调用微信支付的统一下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。注意:code_url有效期为2小时,过期后扫码不能再发起支付。
微信支付的统一下单接口具体实现上文也有提及到,如果还不是很清楚可以看 com.javen.weixin.controller.WeixinPayController
中的scanCode2
以及官方文档介绍
以下是调用预付订单返回的xml
其中code_url
就是生成二维码的链接
扫码即可进行支付,code_url有效期为2小时,过期后扫码不能再发起支付
最终生成二维码访问地址为
http://域名[/项目名称]/pay/scanCode2
码字完毕,以上就是微信扫码支付(模式一、模式二)的详细介绍。
欢迎留言、转发
微信极速开发系列文章:http://www.jianshu.com/p/a172a1b69fdd
后续更新预告
1、刷卡支付
2、微信红包
3、企业转账