开发指引

更新时间:2025.01.09

1、开发前准备

1.1、设置安全联系人

微信支付日常安全监测发现技术异常时,会向安全联系人和超级管理员发送风险提醒。请商户超级管理员尽快设置技术同事为安全联系人,确保能及时接收异常信息评估业务风险,详见安全联系人设置指引

1.2、熟悉微信支付接口规则

正式进入开发前,开发者需要先阅读基本规则签名和验签规则了解调用微信支付接口的基本规则和签名规则。

1.3、准备开发参数

在发起接口请求时,开发者需传入必要参数,如商户号、appid、密钥及证书序列号等,获取方式详见:普通商户模式开发必要参数说明

2、整体业务开发流程概览

  • 商户后端通过调用Natvie合单支付下单接口获取二维码code(code_url)后,然后由商户侧前端将二维码code转换为二维码图片展示给用户,用户微信扫描二维码拉起支付收银台。

  • 当用户在收银台完成支付后点击完成按钮,微信支付会给商户后端发送合单订单支付成功回调通知,如商户后端未收到支付回调可以轮询调用查询合单订单API接口查询订单状态,并根据查询的订单状态进行相应的业务逻辑处理(在商户页面向用户展示查询到的订单支付状态、在商户内部系统更新订单状态等)。具体的支付回调和查单的实现方案,商户可以参考支付回调和查单实现指引

  • 最后商户可通过下载交易账单进行对账。需要退款的订单,也可调用申请退款接口完成退款

3、详细步骤说明

3.1、商户下单

商户通过调用Native合单支付下单API接口生成订单并获取二维码链接code_url,随后将该code_url传递至前端,由前端将其转换为二维码图片展示给用户。

下单接口关键参数说明:

combine_appid:合单发起方商户号combine_mchid、子单参与方商户号sub_order.mchid绑定的appid,具体参考合单支付-商户号绑定APPID操作说明

combine_mchid:合单发起方的商户号,需要与combine_appid有绑定关系。

sub_order.mchid:子单参与方的商户号,需要与combine_appid有绑定关系。

time_expire支付结束时间。若传递该参数,则用户只能在订单设置的支付结束时间time_expire之前进行支付,超过支付结束时间后,用户支付将收到:"订单已超过商户设置的最晚支付成功时间,请重新发起支付"的提示,商户需对订单进行关单处理。若不传该参数,默认订单支付有效期为7天,用户可在7天内进行支付,超出7天,订单将被关闭。

code_url二维码链接。此URL用于生成支付二维码,然后提供给用户扫码支付。code_url有效期为2小时,超过2小时,商户需要使用原下单参数重新请求下单接口,获取新的code_url

3.2、用户扫码调起支付

用户通过微信扫一扫,扫商户前端展示的支付二维码图片来调起微信收银台。具体请参考Native调起支付

注意:

二维码不支持通过相册识别或长按识别二维码的方式完成支付

3.3、用户支付

用户在微信收银台完成支付/取消支付,商户后端则需要轮询调用查询合单订单API接口获取订单状态,并根据订单状态向用户展示支付结果。

同时,如果用户支付成功,微信支付系统会向商户发送合单订单支付成功回调通知。未收到回调时,商户也可调用查询合单订单API接口确认订单状态。具体实现方案商户可以参考支付回调和查单实现指引

若商户需要限制用户支付的时间,有以下两种方式:

1、下单时通过time_expire参数,设置订单的支付结束时间,超过设置的结束时间后,商户进行关单处理。

2、商户在自己的系统内进行倒计时,超过有效期,进行关单处理。

若因特殊原因需在用户可支付时间范围内关闭订单,商户可通过调用查询合单订单API接口确认订单状态(请勿使用非合单支付的查单接口查询合单订单),若订单仍是未支付状态,商户可以调用关闭合单订单API接口关单(关闭整个合单订单,而非关闭单个子单),关单后可以将订单当作失败终态处理。

3.4、商户对账

合单支付的订单账单是以子单为维度,每笔子单都会记录在各个子单商户账单内,需要各个子单商户自己进行下载。详细参考:账单产品介绍

3.5、订单退款

合单支付的订单退款,无法通过合单商户订单号combine_out_trade_no退款,只能根据单个子单进行退款。详细参考:退款产品介绍

4、合单支付订单状态流转图

1、商户调用Native合单支付下单接口下单成功后,商户可以调用查询合单订单接口来确认订单状态,详情请参考支付回调和查单实现指引

2、当订单状态处于未支付(sub_orders.trade_state:NOTPAY)时,用户可对订单进行支付,若用户支付失败,订单状态不变。

3、7天内商户可对无需继续支付的订单(例如用户超过商户系统内部规定的支付时间,或超过商户下单设置的最晚支付时间(time_expire)的订单)调用关闭合单订单接口,使订单关闭,或超过7天后由微信侧自动关单。关单后,订单状态会从未支付(sub_orders.trade_state:NOTPAY)流转为已关闭(sub_orders.trade_state:CLOSED)。

4、当用户成功支付订单时,订单状态会从未支付(sub_orders.trade_state:NOTPAY)流转为支付成功(sub_orders.trade_state:SUCCESS)。

5、当订单状态为支付成功(sub_orders.trade_state:SUCCESS)时,如果用户需要退款,商户可调用申请退款接口(仅支持支付成功后1年内的订单),退款申请成功后,退款状态可通过查询退款单接口进行确认。

6、以下两个状态为终态

  • sub_orders.trade_state:CLOSED

  • sub_orders.trade_state:SUCCESS