用户端是微信小程序,对接小程序支付接口。
使用的SDK是微信支付的httpclient程序 。
首先用户发起支付会调用小程序的下单接口,微信返回一个下单标识。
小程序前端程序使用该下单标识调用小程序的方法唤起支付窗口,用户进行支付。
支付成功,微信通过通知接口调用服务端接口。
服务端程序也会调用微信的支付结果查询接口查询支付结果,根据支付结果更新订单的支付状态。
用户退款接口我们对接小程序的退款接口,用户发起退款申请,通过退款结果查询接口查询退款状态。
微信小程序支付的产品文档:小程序支付产品文档
1. 前期准备
1.1 注册商户
进行小程序运营的企业需要申请成为微信的普通商户,为企业提供支付服务的需要注册成为普通服务商。微信支付商家助手
步骤:
1、申请成为商户
点击“成为商户”填写法人、公司等信息等待审核。
2、申请AppID
对于普通商户,该社交载体可以是公众号,小程序或App。
需要申请一个小程序账号,拿到AppID。
3、申请mchid(商户号)
进入商户平台申请
4、绑定AppID及mchid
AppID和mchid全部申请完毕后,需要建立两者之间的绑定关系。
1.2 开通微信支付
-
申请小程序开发者账号,进行微信认证,获取AppID登录《微信公众平台》 (opens new window),注册一个小程序的开发者账号。小程序账号申请指引(opens new window)
-
小程序开通微信支付,即申请或复用微信支付商户号,申请完小程序后,登录小程序后台 (opens new window)。点击左侧导航栏的微信支付,在页面中进行开通。
点击开通按钮后,有2种方式可以获取微信支付能力,新申请微信支付商户号或绑定一个已有的微信支付商户号,请根据你的业务需要和具体情况选择,只能二选一。
2. SDK调研
为了方便进行支付接口对接,可通过SDK程序快速进行开发。
SDK介绍地址:微信支付开发工具
开发者可以根据自己的需要,选择对应的库。
-
wechatpay-java(推荐)wechatpay-apache-httpclient,适用于Java开发者。
-
wechatpay-php(推荐)、wechatpay-guzzle-middleware,适用于PHP开发者。
-
wechatpay-go,适用于Go开发者
本项目使用wechatpay-apache-httpclient
3. 小程序支付接口
3.1 总体流程
小程序支付接口地址:API。根据业务需求对接不同的接口。
示例:
下边的流程是业务系统(凡是和微信支付对接的系统统称为业务系统)与微信支付接口的交互流程,列出了支付、支付结果查询、退款三个接口的交互流程。
(1)首先用户发起支付会调用小程序的下单接口,微信返回一个下单标识。
(2)小程序前端程序使用该下单标识调用小程序的方法唤起支付窗口,用户进行支付。
(3)支付成功,微信通过通知接口调用服务端接口。
(4)服务端程序也会调用微信的支付结果查询接口查询支付结果,根据支付结果更新订单的支付状态。
(5)用户退款接口我们对接小程序的退款接口,用户发起退款申请,通过退款结果查询接口查询退款状态。
业务系统请求微信支付下单要将业务系统自己的订单号和订单金额告诉微信支付,只要这样在支付完成后才可以根据业务系统的订单号去查询支付结果。
3.2 小程序下单
当点击支付时,业务系统向微信发起下单请求。小程序下单接口
3.2.1 请求方式
【POST】/v3/pay/transactions/jsapi
3.2.2 请求域名
【主域名】https://api.mch.weixin.qq.com
3.2.3 请求方向
业务系统--->微信
3.2.4 请求参数
除了appid、mchid商户id等必要参数以外,与业务相关的最重要的就是out_trade_no和amount,它是业务系统中的订单号及订单金额。
业务系统请求微信支付下单要将业务系统自己的订单号和订单金额告诉微信支付,只要这样在支付完成后才可以根据业务系统的订单号去查询支付结果。
3.2.5 签名认证
在head参数中有一个Authorization,它表示请求接口的签名认证信息,是按照微信要求生成的加密串和一些基本信息。
此部分由SDK处理了无需程序员手动编码。
地址:微信支付开发工具
3.3 小程序调起支付
小程序下单成功后微信返回一个prepay_id即预支付会话标识,小程序使用微信支付提供的小程序方法调起小程序支付。
小程序前端使用 wx.requestPayment
方法,通过服务端返回的 prepay_id
发起支付。
详细参考官方文档:
3.4 支付通知
微信支付通过支付通知接口将用户支付成功消息通知给商户的业务系统。
回调URL: 该链接是通过基础下单接口中的请求参数“notify_url”来设置的,要求必须为HTTPS地址。请确保回调URL是外部可正常访问的,且不能携带后缀参数,否则可能导致商户无法接收到微信的回调通知信息。回调URL示例:"https://pay.weixin.qq.com/wxpay/pay.action"
3.5 商户通过订单号查询订单
商户可以通过查询订单接口主动查询订单状态。商户订单号查询订单
这里要注意的是最终业务系统要根据支付结果更新订单的支付状态,所以带着这个需求去查阅接口。
3.6 退款申请
用户在小程序中申请退款,前端将退款请求发送到服务器。服务器处理退款请求,调用微信支付的退款接口。退款申请
4. 总结
微信小程序支付接口的对接流程包括了下单、支付、支付结果通知、主动查询和退款等多个步骤。通过微信提供的 wechatpay-apache-httpclient
SDK 可以实现与微信支付后台的安全通信与数据交互。关键点包括:
- API 签名与校验:每次与微信支付的通信都需要进行签名操作,确保数据的安全性。
- 支付结果通知与主动查询:为了保证支付的可靠性,除了依赖通知机制,还可以通过主动查询接口获取支付状态。
- 退款操作:退款涉及证书和安全机制,商户必须通过 API 来确保退款的正确执行。
在实际开发中,必须确保支付流程的安全性、健壮性和准确性,避免因网络问题或其他原因导致订单状态不同步的情况。