微信支付接入注意事项

微信支付截止目前为止支持5种场景的接入,每一种场景需要特定的开发工作,列举如下:

  1. 公众号支付,适用于在公众号、朋友圈、聊天窗口等微信内完成支付的场景。
  2. APP支付,适用于在移动端APP中集成微信支付功能的场景。
  3. 扫码支付,适用于PC网站支付、实体店单品等场景。
  4. 刷卡支付,适用于线下面对面收银的场景,如超市、便利店等。
  5. H5支付,适用于具有H5网页版商城,通过移动端网页调起微信客户端进行支付的场景。
  6. 微信买单,无需开发。

公众号支付

需要商户已有H5网站,在微信客户端内发起支付流程。

公众号内配置

公众号支付需要在H5页面通过JS接口发起微信支付申请,因此需要在公众号内设置JS接口安全域名。只有在设置的域名或路径下才有权限调用微信开放的JS接口。设置目录为:公众平台–>设置–>公众号设置–>功能设置。
JS接口安全域名设置注意事项:

  1. 最多可以添加3个域名或路径(建议写域名,这样域名下任何路径的H5页面均可以在微信中使用JS开放接口)
  2. 域名必须通过ICP备案
  3. 下载验证文件并放至服务器根目录,确保通过域名可以访问。例如域名设置为「m.com」,则文件要放置的路径为「m.com/MP_verify_XXX.txt」
  4. 最重要的一点,安全域名一个月仅能修改3次,确认好业务域名或路径后,尽量把三个域名全部利用起来。

安全域名设置

微信支付商户平台配置

支付授权目录配置

公众号支付在请求支付的时候会校验请求来源是否有在商户平台做了配置,所以必须确保支付目录已经正确的被配置,否则将验证失败,请求支付不成功。
支付授权目录的配置路径:商户平台–>产品中心–>开发配置–>支付配置

支付授权目录配置

API证书下载及密钥设置

部分安全性要求较高的API需要使用API证书来确认调用者的身份,公众号支付中退款接口需要证书。

API密钥的作用:

在API调用时用来按照指定规则对你的请求参数进行签名,服务器收到你的请求时会进行签名验证,既可以界定你的身份也可以防止其他人恶意篡改请求数据。部分API单独使用API密钥签名进行安全加固,部分安全性要求更高的API会要求使用API密钥签名和API证书同时进行安全加固。

证书下载及密钥设置路径:商户平台–>账户中心–>账户安全–>API安全
API证书下载及密钥设置

支付流程

微信支付流程图

支付业务时序图

时序图

Server开发注意事项

  • 微信有两套JS接口可以调起支付(JS-SDK和WeixinJSBridge),所有参数确保与对应的接口保持一致,包括大小写
  • 统一订单生成时所使用的签名算法,与返回给H5页面的预支付信息中的签名算法必须保持一致。为确保不出现莫名签名失败问题,最好统一使用MD5.
  • 支付回调接口,需做幂等处理,防止多次回调引起业务逻辑问题。
  • 订单查询功能可以查看当前订单的状态,进而处理下一步业务逻辑
    • 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
    • 调用支付接口后,返回系统错误或未知交易状态情况;
    • 调用刷卡支付API,返回USERPAYING的状态;
    • 调用关单或撤销接口API之前,需确认支付状态;
  • 订单关闭功能使用场景(订单生成后5分钟内不能关单
    • 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付
    • 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口