目录
微信扫码支付开发步骤
根据应用场景选择实现模式
1、扫码支付开发步骤
1.1、根据应用场景选择实现模式
扫码支付可分为两种模式,商户根据支付场景选择相应模式。
【模式一】:商户后台系统根据微信支付规则链接生成二维码,链接中带固定参数productid(可定义为产品标识或订单号)。用户扫码后,微信支付系统将productid和用户唯一标识(openid)回调商户后台系统(需要设置支付回调URL),商户后台系统根据productid生成支付交易,最后微信支付系统发起用户支付流程。
商户支付回调URL设置指引:进入公众平台-->微信支付-->开发配置-->扫码支付-->修改,如图1所示。
【模式二】:商户后台系统调用微信支付【统一下单API】生成预付交易,将接口返回的链接生成二维码,用户扫码后输入密码完成支付交易。注意:该模式的预付单有效期为2小时,过期后无法支付。
1.2、模式一
模式一开发前,商户必须在公众平台后台设置支付回调URL。
URL实现的功能:接收用户扫码后微信支付系统回调的productid和openid;
URL设置详见(图1)回调地址设置。
1.2.1、业务流程时序图
1.2.2、业务流程说明:
(1)商户后台系统根据微信支付规定格式生成二维码(规则见下文),展示给用户扫码。
(2)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。
(3)微信支付系统收到客户端请求,发起对商户后台系统支付回调URL的调用。调用请求将带productid和用户的openid等参数,并要求商户系统返回交数据包,详细请见"回调数据输入参数"
(4)商户后台系统收到微信支付系统的回调请求,根据productid生成商户系统的订单。
(5)商户系统调用微信支付【统一下单API】请求下单,获取交易会话标识(prepay_id)
(6)微信支付系统根据商户系统的请求生成预支付交易,并返回交易会话标识(prepay_id)。
(7)商户后台系统得到交易会话标识prepay_id(2小时内有效)。
(8)商户后台系统将prepay_id返回给微信支付系统。返回数据见"回调数据输出参数"
(9)微信支付系统根据交易会话标识,发起用户端授权支付流程。
(10)用户在微信客户端输入密码,确认支付后,微信客户端提交支付授权。
(11)微信支付系统验证后扣款,完成支付交易。
(12)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。
(13)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。
(14)未收到支付通知的情况,商户后台系统调用【查询订单API】。
(15)商户确认订单已支付后给用户发货。
1.2.3、生成二维码规则
二维码中的内容为链接,形式为:
weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
其中XXXXX为商户需要填写的内容,商户将该链接生成二维码,如需要打印发布二维码,需要采用此格式。商户可调用第三方库生成二维码图片。参数说明如下:
生成二维码所需参数列表
名称 | 变量名 | 类型 | 必填 | 示例值 | 描述 |
---|---|---|---|---|---|
公众账号ID | appid | String(32) | 是 | wx8888888888888888 | 微信分配的公众账号ID |
商户号 | mch_id | String(32) | 是 | 1900000109 | 微信支付分配的商户号 |
时间戳 | time_stamp | String(10) | 是 | 1414488825 | 系统当前时间,定义规则详见时间戳 |
随机字符串 | nonce_str | String(32) | 是 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串,不长于32位。推荐随机数生成算法 |
商品ID | product_id | String(32) | 是 | 88888 | 商户定义的商品id 或者订单号 |
签名 | sign | String(32) | 是 | C380BEC2BFD727A4B6845133519F3AD6 | 签名,详见签名生成算法 |
举例:
weixin://wxpay/bizpayurl?appid=wx2421b1c4370ec43b&mch_id=10000100&nonce_str=f6808210402125e30663234f94c87a8c&product_id=1&time_stamp=1415949957&sign=512F68131DD251DA4A45DA79CC7EFE9D
1.2.4、回调商户支付URL
商户提供的支付回调URL(回调地址设置【见图1】)需要实现以下功能:接收用户扫码后微信支付系统发送的数据,根据接收的数据生成支付订单,调用【统一下单API】提交支付交易。
名称 | 变量名 | 类型 | 必填 | 示例值 | 描述 |
---|---|---|---|---|---|
公众账号ID | appid | String(32) | 是 | wx8888888888888888 | 微信分配的公众账号ID |
用户标识 | openid | String(128) | 是 | o8GeHuLAsgefS_80exEr1cTqekUs | 用户在商户appid下的唯一标识 |
商户号 | mch_id | String(32) | 是 | 1900000109 | 微信支付分配的商户号 |
是否关注公众账号 | is_subscribe | String(1) | 是 | Y | 用户是否关注公众账号,仅在公众账号类型支付有效,取值范围:Y或N;Y-关注;N-未关注 |
随机字符串 | nonce_str | String(32) | 是 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串,不长于32位。推荐随机数生成算法 |
商品ID | product_id | String(32) | 是 | 88888 | 商户定义的商品id 或者订单号 |
签名 | sign | String(32) | 是 | C380BEC2BFD727A4B6845133519F3AD6 | 返回数据签名,签名生成算法 |
1.2.5、 输出参数
输出参数说明
名称 | 变量名 | 类型 | 必填 | 示例值 | 描述 |
---|---|---|---|---|---|
返回状态码 | return_code | String(16) | 是 | SUCCESS | SUCCESS/FAIL,此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 |
返回信息 | return_msg | String(128) | 否 | 签名失败 | 返回信息,如非空,为错误原因;签名失败;具体某个参数格式校验错误. |
公众账号ID | appid | String(32) | 是 | wx8888888888888888 | 微信分配的公众账号ID |
商户号 | mch_id | String(32) | 是 | 1900000109 | 微信支付分配的商户号 |
随机字符串 | nonce_str | String(32) | 是 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 微信返回的随机字符串 |
预支付ID | prepay_id | String(64) | 是 | wx201410272009395522657a690389285100 | 调用统一下单接口生成的预支付ID |
业务结果 | result_code | String(16) | 是 | SUCCESS | SUCCESS/FAIL |
错误描述 | err_code_des | String(128) | 否 | 当result_code为FAIL时,商户展示给用户的错误提 | |
签名 | sign | String(32) | 是 | C380BEC2BFD727A4B6845133519F3AD6 | 返回数据签名,签名生成算法 |
1.3、模式二
1.3.1、业务流程时序图
业务流程说明
(1)商户后台系统根据用户选购的商品生成订单。
(2)用户确认支付后调用微信支付【统一下单API】生成预支付交易;
(3)微信支付系统收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url。
(4)商户后台系统根据返回的code_url生成二维码。
(5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。
(6)微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。
(7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。
(8)微信支付系统根据用户授权完成支付交易。
(9)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。
(10)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。
(11)未收到支付通知的情况,商户后台系统调用【查询订单API】。
(12)商户确认订单已支付后给用户发货。
生成二维码规则
对应链接格式:weixin://wxpay/bizpayurl?sr=XXXXX。请商户调用第三方库将code_url生成二维码图片。该模式链接较短,生成的二维码打印到结账小票上的识别率较高。
例如,将weixin://wxpay/s/An4baqw生成二维码
原生支付“模式二”二维码示例
二维码相关知识
二维码背景知识介绍:
未经允许请勿转载:程序喵 » 微信公众号开发教程——微信扫码支付开发者文档(中)