微信公众号开发教程——微信扫码支付开发者文档(中)

目录

  1. 微信扫码支付开发步骤

    1. 根据应用场景选择实现模式

  2. 场景模式一

    1. 业务流程时序图

    2. 业务流程说明

    3. 生成二维码规则

    4. 回调商户支付URL

    5. 请求输入参数

    6. 响应输出参数

  3. 场景模式二

    1. 业务流程时序图

    2. 业务流程说明

    3. 生成二维码规则

  4. 二维码相关知识

1、扫码支付开发步骤

1.1、根据应用场景选择实现模式

扫码支付可分为两种模式,商户根据支付场景选择相应模式。

【模式一】:商户后台系统根据微信支付规则链接生成二维码,链接中带固定参数productid(可定义为产品标识或订单号)。用户扫码后,微信支付系统将productid和用户唯一标识(openid)回调商户后台系统(需要设置支付回调URL),商户后台系统根据productid生成支付交易,最后微信支付系统发起用户支付流程。

商户支付回调URL设置指引:进入公众平台-->微信支付-->开发配置-->扫码支付-->修改,如图1所示。

扫码支付参数设置栏目入口

(图1) 扫码支付回调URL设置


【模式二】:商户后台系统调用微信支付【统一下单API】生成预付交易,将接口返回的链接生成二维码,用户扫码后输入密码完成支付交易。注意:该模式的预付单有效期为2小时,过期后无法支付。

1.2、模式一

模式一开发前,商户必须在公众平台后台设置支付回调URL。

URL实现的功能:接收用户扫码后微信支付系统回调的productidopenid

URL设置详见(图1)回调地址设置。

1.2.1、业务流程时序图

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

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

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

生成二维码所需参数列表

名称变量名类型必填示例值描述
公众账号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

1.2.4、回调商户支付URL

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

输入参数说明

名称变量名类型必填示例值描述
公众账号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返回数据签名,签名生成算法

1.2.5、 输出参数

输出参数说明

名称变量名类型必填示例值描述
返回状态码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返回数据签名,签名生成算法

 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生成二维码

原生支付“模式二”二维码示例

 原生支付“模式二”二维码示例

二维码相关知识

二维码背景知识介绍:

Java生成带logo的二维码

Java生成二维码使用QRCode和ZXing两种方式

二维码的生成细节和原理


未经允许请勿转载:程序喵 » 微信公众号开发教程——微信扫码支付开发者文档(中)

点  赞 (4) 打  赏
分享到: