开发指引

更新时间:2024.12.23

1、开发前准备

1.1、设置安全联系人

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

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

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

1.3、准备开发参数

在发起接口请求时,开发者还需传入一些必要参数,如服务商商户号、子商户号(也叫特约商户号)、sp_appid、证书私钥、公钥等,获取方式详见:服务商模式开发必要参数说明

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

  • 服务商通过调用H5支付下单接口获取H5支付链接(h5_url),然后服务商在已配置H5支付域名的前端网页跳转该支付链接(如需支付后返回指定页面,可在H5支付链接后拼接redirect_url参数),并唤起微信支付收银台。

  • 当用户在收银台完成支付后点击完成按钮,或中途取消支付,页面会从收银台返回到拉起支付前的H5页面(若拉起收银台时有拼接redirect_url参数将返回指定页面),此时服务商后端需调用查询订单API接口确认订单状态,并根据订单状态进行相应的业务逻辑处理(在服务商H5页面向用户展示查询到的订单支付状态、在服务商内部系统更新订单状态等)。如果订单支付成功,微信支付系统还会发送支付成功回调通知给服务商。具体的支付回调和查单的实现方案,服务商可以参考支付回调和查单实现指引

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

3、详细步骤说明

3.1、商户下单

用户在服务商H5页面操作下单后,服务商需要通过调用H5支付下单API接口生成订单并获取微信H5支付链接(h5_url)。在这个过程中,服务商必须做好安全校验,防止本次交易被不法分子利用。

  • 当跨域请求不是简单请求时,浏览器会发起Options预检请求,此时服务商后台需要支持Options请求且校验Origin头部,如果不在允许的白名单列表内,则返回403且不返回"Access-Control-Allow-*"相关头部。

  • 针对GET/POST的跨域下单请求,服务商后台需要校验Origin头部是否合法且用户Cookie是否完备(若用户未登陆则先引导登陆服务商站点),否则返回403且不返回"Access-Control-Allow-*"相关头部。

安全标准规范流程图:

注意:

  • 服务商需按照安全规范进行接入,若因未遵循规范接入而出现安全问题,财付通将根据《微信支付服务协议》条款处理。

  • 以上图示,仅为示例,只供参考。请服务商自行确认是否实现了跨域访问白名单限制和用户登录态校验。

 

下单接口关键参数说明:

sub_mchid:子商户的商户号,也是订单对应的收款商户号,在订单支付成功后,订单收款的资金将进入该子商户的基本账户内。

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

h5_url支付跳转链接。调起支付时需要使用的参数,h5_url有效期为5分钟,超过5分钟,服务商需要使用原下单参数重新请求下单接口,获取新的h5_url

profit_sharing:订单分账标识,如果订单在支付成功后需要进行分账,必须传参数值为true如果无需分账,可以不传该参数,或传false

3.2、商户调起支付

服务商调起支付前,请确保已在服务商平台配置好H5支付域名,只有配置了H5支付域名的网页才能跳转H5支付链接(如需在支付后返回至指定页面,可在h5支付链接后面拼接上redirect_url参数)调起微信支付页面

3.3、用户支付

用户在微信收银台完成支付/取消支付,会返回服务商调起支付时的页面,若调起支付时拼接了redirect_url,则会返回指定的页面,此时服务商需要调用查询订单API接口确认订单状态,并根据订单状态展示支付结果。

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

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

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

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

若因特殊原因需在用户可支付时间范围内关闭订单,服务商可通过调用查询订单API接口确认订单状态,若订单仍是未支付状态,服务商可以调用关闭订单API接口关单,关单后可以将订单当作失败终态处理。

3.4、商户对账

详细参考:账单产品介绍

3.5、订单退款

详细参考:退款产品介绍

4、普通支付订单状态流转图

 

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

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

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

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

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

6、以下三个状态为终态

  • trade_state:CLOSED

  • trade_state:SUCCESS

  • trade_state:REFUND