开发前,商户必须在公众平台后台设置支付回调URL。URL实现的功能:接收用户扫码后微信支付系统回调的productid和openid;URL设置详见回调地址设置。

1.业务流程时序图





图6.8:原生支付接口模式一时序图


业务流程说明:

1)商户后台系统根据微信支付规定格式生成二维码(规则见下文第2节),展示给用户扫码。

2)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。

3)微信支付系统收到客户端请求,发起对商户后台系统支付回调URL的调用。调用请求将带productid和用户的openid等参数,并要求商户系统调返回prepay_id(【统一下单API】返回的交易会话标识,有效期2小时)才能发起用户支付。

4)商户后台系统收到微信支付系统的回调请求,根据productid生成商户系统的订单。

5)商户系统调用微信支付【统一下单API】请求生成交易会话标识。

6)微信支付系统根据商户系统的请求生成预支付交易,返回交易会话标识prepay_id。

7)商户后台系统得到交易会话标识prepay_id。

8)商户后台系统将prepay_id返回给微信支付系统。

9)微信支付系统根据交易会话标识,发起用户端授权支付流程。

10)用户在微信客户端输入密码,确认支付后,微信客户端提交支付授权。

11)微信支付系统验证后扣款,完成支付交易。

12)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。

13)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。

14)未收到支付通知的情况,商户后台系统调用【查询订单API】。

15)商户确认订单已支付后给用户发货。

2.生成二维码规则

二维码中的内容为链接,形式为:

weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX

其中XXXXX为商户需要填写的内容,商户将该链接生成二维码,如需要打印发布二维码,需要采用此格式。商户可调用第三方库生成二维码图片。参数说明如下:

表6.1生成二维码所需参数列表

名称变量名类型必填示例值描述
公众账号IDappidString(32)wx8888888888888888微信分配的公众账号ID
商户号mch_idString(32)1900000109微信支付分配的商户号
时间戳time_stampString(10)1414488825系统当前时间,定义规则详见时间戳
随机字符串nonce_strString(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS随机字符串,不长于32位。推荐随机数生成算法
商品IDproduct_idString(32)88888商户定义的商品id 或者订单号
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6签名,详见签名生成算法

举例:

weixin://wxpay/bizpayurl?appid=wx2421b1c4370ec43b&mch_id=10000100&nonce_str=f6808210402125e30663234f94c87a8c&product_id=1&time_stamp=1415949957&sign=512F68131DD251DA4A45DA79CC7EFE9D

3.回调商户支付URL

商户提供的支付回调URL(回调地址设置)需要实现以下功能:接收用户扫码后微信支付系统发送的数据,根据接收的数据生成支付订单,调用【统一下单API】提交支付交易。

3.1.输入参数

表6.2输入参数说明
名称变量名类型必填示例值描述
公众账号IDappidString(32)wx8888888888888888微信分配的公众账号ID
用户标识openidString(128)o8GeHuLAsgefS_80exEr1cTqekUs用户在商户appid下的唯一标识
商户号mch_idString(32)1900000109微信支付分配的商户号
是否关注公众账号is_subscribeString(1)Y用户是否关注公众账号,仅在公众账号类型支付有效,取值范围:Y或N;Y-关注;N-未关注
随机字符串nonce_strString(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS随机字符串,不长于32位。推荐随机数生成算法
商品IDproduct_idString(32)88888商户定义的商品id 或者订单号
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6返回数据签名,签名生成算法

3.2.输出参数

表6.3输出参数说明
名称变量名类型必填示例值描述
返回状态码return_codeString(16)SUCCESSSUCCESS/FAIL,此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
返回信息return_msgString(128)签名失败返回信息,如非空,为错误原因;签名失败;具体某个参数格式校验错误.
公众账号IDappidString(32)wx8888888888888888微信分配的公众账号ID
商户号mch_idString(32)1900000109微信支付分配的商户号
随机字符串nonce_strString(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS微信返回的随机字符串
预支付IDprepay_idString(64)wx201410272009395522657a690389285100调用统一下单接口生成的预支付ID
业务结果result_codeString(16)SUCCESSSUCCESS/FAIL
错误描述err_code_desString(128) 当result_code为FAIL时,商户展示给用户的错误提
签名signString(32)C380BEC2BFD727A4B6845133519F3AD6返回数据签名,签名生成算法
©著作权归作者所有:来自51CTO博客作者wx59c524c28c333的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 第五章 主生产计划MPS 第4~5节 MPS计划生成、MPS运算结果
  2. 最小生成树(C语言, prim算法)
  3. web打印动态分页、预览。内容满了,自动换页、移动端兼容 生成PDF
  4. 你知道吗?还有比自回归方式更快更好的序列生成!
  5. 【论文解读】UniLM:一种既能阅读又能自动生成的预训练模型
  6. 在图像生成领域里,GAN这一大家族是如何生根发芽的
  7. 支付宝支付--沙箱支付教程+案例 | PC端网站支付(超级详细版本)
  8. 拯救单身狗:这个对象生成器帮你看看未来对象长啥样
  9. 浅谈递归 II

随机推荐

  1. Android(安卓)NIO简易聊天室
  2. android属性
  3. Android经典三部曲:
  4. Android OpenGL开发目录
  5. Android(安卓)线性布局(LinearLayout)相关
  6. Android用户界面设计学习之旅-第六站
  7. Android 数据库之 SQLiteConnectionPool
  8. Android 对象序列化之 Parcelable 取代 S
  9. Android(安卓)Canvas绘图详解(图文)
  10. 去掉RecycleView或者ListView上下滑动阴