微信支付到目前为止总有六种支付产品:
其中, 除刷卡支付以外, 其他的五种支付产品是 web 中经常使用的. 这五种支付产品的使用场景不同, 对应的支付流程的前置操作及拉起支付操作都不同.
查看文档可以看到, 无论哪一种支付产品, 都有几个相同的操作:
所以通用的支付流程大概如下:
┌ ─ ─ ─ ─ ─ ─ ─ ┐ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
apply payment ─ ─▶ call wechat charge │─ ─▶ charge notification
└ ─ ─ ─ ─ ─ ─ ─ ┘ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
不同的支付产品, 主要是在申请预支付交易之前有一些前置动作 (例如公众号支付需要获取 openid
), 以及拉起支付的方式不同 (例如公众号支付只能在微信内支付, H5 支付只能在微信外浏览器拉起微信客户端进行支付.)
所以, 五种支付产品可以分类为两类:
微信外浏览器拉起微信客户端支付
MWEB
mweb_url
mweb_url
, 由微信提供的网页拉起微信客户端进行支付redirect_url
其中, 在 mweb_url
中, 微信会生成一个 weixin://
开头的 url, 通过这个 url 拉起微信客户端
mweb_url
时需要由浏览器跳转, 跳转到 mweb_url
后, 微信会检查 referer
, 这个地址的 domain
必须同公众号配置的网页授权域名一致spbill_create_ip
必传, 微信会检查跳转支付的用户 IP 是否与调用统一下单的时候传的 spbill_create_ip
一致mweb_url
的时候, redirect_url
需要手动拼装到 mweb_url
上, 并且它的 domain
必须与公众号配置的网页授权域名一致weixin
这个 schememweb_url
可以由服务器模拟, 抓取到 weixin://
的 url, 通过自己的页面拉起微信客户端mweb_url
时, 注意 spbill_create_ip
应为你的服务器地址mweb_url
很慢, 甚至超时, 那么你可以买台腾讯云低配主机当代理, 并且将 spbill_create_ip
设置为你的代理机器的 IPJSAPI
code
code
获取 open id
, 调用统一下单接口, 获取 prepay_id
. 生成支付参数, 下发给页面open id
才能支付APP