今天写了一篇非技术文,需求来源于老大的老大,老老大。
这偏文章用以说明微信/支付宝相关参数之间错综复杂的关系,所有资料来自微信/支付宝官网,以及相关银联给的微信/支付宝对接文档。
嘿嘿,如果同行的小伙伴,也有这个疑惑,希望本篇文章帮你解惑。
微信
名词解释:
- appid:公众号、小程序、移动应用唯一标识
- mchid:商户申请微信支付后,由微信支付分配的商户收款账号。
- openid,微信用户在公众号 appid 下的唯一用户标识,可用于永久标记一个用户
- sub_appid:子 appid,服务商模式/银行服务商模式起作用
- sub_mch_id:子商户号, 服务商模式/银行服务商模式起作用
- sub_openid:子 appid 下的唯一标识
- channel_id:服务商模式下,微信支付分配给收单服务商的ID
微信支付接入可以分为
- 普通商户
- 服务商模式
- 普通服务商
- 银行类服务商
银行类服务商与普通类服务商的最大区别在于,普通类服务商不能清算资金,微信将会直接把资金清算给商户账户。
而银行类服务商是可以为下属特约商户清算资金的。
现有银行类服务商实际上是通过银联/网联转接微信
银行服务商省申请资质要求较高,一般只有银行、支付机构可以申请成为银行类服务商。两者申请要求如下:
官网地址:https://pay.weixin.qq.com/partner/public/home
普通商户
普通商户模式下,商户需要向微信申请 appid 以及 mchid。接入微信普通商户版本的支付接口。
文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html
JSAPI 支付模式,需要提前登陆授权,需要获取用户的 openid。三者关系如下图:
同一个 mchid 可以绑定多个 appid,两者可以是同一个公司主体,也可以不同公司主体(限定资格开放)。mchid 最多可以绑定 50 个 appid;
同一个 appid 又可以被多个 mch id 绑定,不过需要注意的是,mchid 费率必须不相同。
所以 appid 与 mchid 原则上是多对多的关系。
这里需要注意,微信清算资金实际上是基于 mchid。即同一个 mchid,使用多个 appid 做交易,第二天资金是清算到 mchid 绑定的商户的账户。
服务商模式
第三方服务商向微信申请自己的 appid,并通过 appid 申请服务商mch_id,以此获得微信支付服务商能力。再通过服务商 mch_id 为所服务的特约商户申请创建微信支付 sub_mch_id,创建好的 sub_mch_id 默认和服务商的mch_id 建立父子授权关系。银行服务商模式可以通过接入入驻特约商户,而普通服务商只能通过页面入驻。
服务商模式下,可以配置特约商户使用自己申请 appid,传入 sub_appid 字段。
官方解释:
sub_appid 可为公众号,APP 或小程序的 appid,服务商在服务商商户平台可手动为每个特约商户绑定与渠道商主体或特约商户主体一致的公众号,APP或小程序的appid;针对小程序,还支持绑定服务商主体的小程序 appid。目前最多配置5个. 手工配置路径:”服务商商户平台-服务商功能-子商户管理-开发配置-特约商户appid 配置
服务商模式下使用 JSAPI,若特约商户想基于自己 appid 做交易,可以基于特约商户 appid 登陆授权获取 openid,然后传入 sub_appid 与 sub_openid 。
若没传入,只能使用服务商 appid 登陆授权,获取 openid。
总结
普通商户模式,需要商户自己开发团队对接微信。而服务商模式,一般有服务商开发自己的收款功能,特约商户入驻即可使用,无需二次开发,适合个人/小微企业。另外服务商也可以提供包装之后的接口,有开发的能力也可以接入。
微信帮助文档
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_10&index=1#
https://pay.weixin.qq.com/static/pay_setting/appid_protocol.shtml
支付宝
名词解释:
- app_id:支付宝分配给开发者的应用 ID
- 商户 uid/pid:支付宝商户号
- buyer_id:买家的支付宝唯一用户号(2088开头的16位纯数字)
- org_pid:银行服务商模式下,收单机构(例如银行)的标识,填写该机构在支付宝的 pid
- merchant_id,银行服务商模式下,特约商户入驻成功之后,分配商户号
支付宝接入分为:
- 普通商户
- 服务商
- ISV:独立软件开发商
- 银行类服务商
支付宝银行类服务商与微信类似,服务商可以自己清算资金。
不过支付宝的这个模式比较简单,服务商只需要通过后台接口入驻特约商户成功,得到支付宝分配的商户编号。交易时上送商户编号与机构编码即成功。
普通商户
普通商户需要向支付宝申请入驻,将会得到商务号。接着需要创建应用得到 appid,上架成功后,需要进行签约。签约成功之后,这个 appid 与商户号建立唯一的绑定的关系。
同一个商户号可以绑定多个 appid,但是同一个 appid 只能绑定唯一个商户号。
其实从支付宝的接口也可以看出,支付宝只要求传入 appid,后台肯定是跟库 appid 查找对应的商户号。
这点虽然没有微信灵活,但是支付宝理解起来简单。微信 appid 与 mchid 多对多的关系,有点复杂。
银行类服务商
这里服务商直接触过银行类服务商,其他类型服务商不太清楚。
银行类服务商交易接口与普通商户模式相比,仅仅多出了 **merchant_id **与 org_pid,其他信息与普通商户的接口一致。
总结
同微信。
ps:虽然支付宝官网上文档倒是挺多的,但是就是没有找到说的很明白的文档。。。这一点微信还是挺舒服的,示例图画的很清晰,赞一个 ღ( ´・ᴗ・` )比心。
帮助资料
https://docs.open.alipay.com/200/105314/
https://opendocs.alipay.com/isv/10272/ru478a
欢迎关注我的公众号:程序通事,获得日常干货推送。如果您对我的专题内容感兴趣,也可以关注我的博客:studyidea.cn