微信支付介绍 - 1556461835/note GitHub Wiki

微信支付介绍

商户接入微信支付,调用API必须遵循以下规则:

类型 描述
传输方式 为保证交易安全性,采用HTTPS传输
提交方式 采用POST方法提交
数据格式 提交和返回数据都为XML格式,根节点名为xml
字符编码 统一采用UTF-8字符编码
签名算法 MD5,后续会兼容SHA1、SHA256、HMAC等。
签名要求 请求和接收数据均需要校验签名,详细方法请参考安全规范-签名算法
证书要求 调用申请退款、撤销订单接口需要商户证书
判断逻辑 先判断协议字段返回,再判断业务返回,最后判断交易状态

支付流程

                        + 未完成
         购买            提交订单
立即购买 -------> 确认订单 -------> 支付中心 -------> 支付结果 -------> 我的订单
                商品信息          选择支付          + 支付成功        + 已完成
                优惠券            + 支付宝         + 支付失败         + 未完成
                商品价格          + 微信

微信扫码支付

支付模式一和模式二的区别

模式一和模式二提供了两种不同的能力,适用于不同的场景,看商户具体的需求。

两种模式,在支付的流程中,有一定的共同的流程:

  1. 生成订单。
  2. 用户支付。

差别在于:

  • 模式一,先扫码,再生成订单。
  • 模式二,先生成订单,再扫码。

而 生成订单,代表着 本次支付给商户的金额是否是已经确定了。

  • 在模式一中,用户扫描的二维码,此时可以还没有确定实际要支付的金额。
  • 在模式二中,用户扫描的二维码,金额已经是确定的。

可以这么理解,模式一中的二维码,是商品的二维码。模式二中的二维码,是 订单的二维码,也因为这个是订单的二维码,所以必须要有时效性。

那么这两个场景的玩法,可以有一个明显的差别,

  • 模式一,更适合无人职守的自动售卖机。所有的商品都有一个固定的二维码,价格相对稳定,当用户使用微信支付扫描了二维码,微信再请求自动售卖机的服务提供商的 后台接口,注意,这个请求中,是包含了商品ID以及用户信息的,这样,商户系统就可以根据 商品ID,以及用户的身份,再来确定用户实际要支付的金额。

  • 模式二,更适合有人职守的,支付金额非常不确定的场合。比如,你去饭馆吃饭,虽然每个菜的金额是固定的,但一桌子饭菜的金额不固定,甚至是你还可能使用饭馆事先发放的代金券。这个时候,就需要收银员,预先创建一个订单,确定好金额,然后你再来扫描这个二维码来支付。

当然,用模式二来实现无人值守的自动售卖机,也是可以的。只是这个自动售卖机的就要多承担一些交互以及业务逻辑,在生成二维码之前,创建订单。

扫码支付的这两个实现模式对于非专业人士可能理解起来有点小难度,通俗的说,其实就是线下支付和线上支付连各种模式:

  1. 模式1—也就是线下支付,这种模式是商户自己为商品生成链接二维码,顾客通过扫描商品二维码得到商品详细信息并选择是否确认购买;
  2. 模式2—也就是线上支付,这种模式是顾客在线选好商品选择调用微信支付,商户平台给予相应,完成购买动作。

参考