阅读此文的前提: 我认为你有过或正在开发微信支付的经验
基本框架
日常开发能用到的微信支付分为: 普通商户模式&服务商模式
普通商户模式适用具备独立开发能力的商户, 可以根据需求, 定制各种支付场景,普通商户进行支付后, 资金不会冻结, 钱款会直接进入到商户账上
服务商模式适用于本身为三方平台身份的服务商, 商户在三方平台上架产品, 此时结算需要使用服务商的能力, 根据产品绑定的不同 特约商户ID(商户自己的 ID), 钱款会流向不同的商户账户, 另外, 资金进账后会冻结, 需要服务商调用分账&完结接口, 解冻商户入账的资金
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1. 特约商户是服务商为商户申请的一种独立于普通商户之外的商户类型, 需要商户提供资质, 以及收款对公户, 对公户主体需与营业资质一致
(不一致情况需要有特殊行业证明, 以及单位公章, 提交到微信审核)
2. 微信的分账体系, 默认为 30 天为最长冻结时间, 可以像微信申请延长分账冻结时间来实现资金监管的目的
3. 微信商户内的钱款, 只要涉及到结算之后, 就不可逆转回商户资金池, 这时如果发生退款, 需要商户自己去保证资金池钱款充足
4. 特约商户的支付授权域名, 需要独立配置, 如果不使用服务商提供的 openId, 那么在特约商户绑定公众号 APPID 时,
公众号与特约商户主体必须一致, 且公众号必须是认证过的, 且不可以是订阅号, 否则微信会提示: 当前商户号暂不支持关联该类型的 APPID
5. 微信的手续费是根据行业不同最终确定费率的不同, 教育行业如果有学校或教育局的章, 可以申请到零费率, 至于校外培训机构, 一般可以拿到 3.8 左右的费率
6. 微信渠道商与服务商不一样, 具体是存在于银行以及其他有支付牌照的机构之中(微信支付银行渠道商)
7. 与银行对接支付的时候, 需要确定两件事儿, 一个是 T+N 的退款模式是否支持, 因为银行大部分也是走的服务商模式,
一旦资金清算之后, 银行如果没有从卡内逆转资金的能力, 是不可能支持 T+N 退款的, 另外一个是手续费的问题, 因为一旦涉及一笔钱款二清(本平台也有清分的能力),
那么手续费是个头疼的问题, 比如 100块的单子, 分 10 次结算给客户, 那么需要考虑手续费的问题, 而且一旦涉及到退费, 那么手续费要重算
8.
微信支付(JSAPI)和微信公众号有强耦合性, 如果想用微信支付, 必须开通微信公众号, 因为 APPID 是必传参数, 另外, 不同的支付账户可以授权给同一个公众号 进行支付权限(比如, N 个普通商户需要在一个公众号下收款[非服务商模式])
在我看来, 微信支付是一种树形架构, 最顶层为公众号(支付号绑定的公众号, 支付号授权的公众号), 服务商号(mch_id), 特约商户号(sub_mch_id)
常见的误区
-
普通商户和服务商模式 传递的 APPID 是有区别的, 普通商户模式 APPID 传递的是普通商户授权公众号的 APPID 而服务商模式 APPID 传递的是服务商支付号的 APPID (因为子商户已经授权了服务商代理支付, 所以不再需要传公众号 APPID 了, 而且服务商是在自己授权的公众号下支付, 整体是拓扑结果的架构)
-
分账比例不能等于子商户配置的最高比例, 我在实际操作过程中, 遇到过分账比例使用最大(20%)时, 虽然计算的值没错, 但是微信侧会返回超出最大分账比例的错误提示, 这是因为没有把手续费计算进去, 需要先扣除手续费在计算分账金额
-
点金计划需要自己实现支付成功页面, 如果商户(普通商户 特约子商户)开通了点金计划, 那么需要自定义返回页面, 否则按返回键, 会闪退, 很恶心, 原来的 JSAPI 的 callback 前端回调接口不好用了(如果开启点金计划) -
商品名称的长度限制, 看好文档提示, 不要无限制的长
-
分账时需要处理的一些异常 退款, 支付中等
-
分账时遇到的无分账权限的原因 未使用添加分账人的接口, 分账需要先调用添加分账人接口, 然后才可以调用分账接口, 否则会提示无权限
-
创建预支付订单的时候, 如果几个元素不变(金额 appId 订单号), 是可以一直调起的, 不必担心订单号重复的问题
-
微信支付的开发配置功能只有超管才可以操作, 另外, 更换超管比较费事费力, 尽量把最高权限集中在一个稳定人员身上
-
一个支付号配置包括: 安全域名绑定, APPID 的授权, 证书的申请以及 secret 的设置
-
企业微信发送消息 如果接收人第一个 ID 有问题, 那么整个请求都报错
-
企业微信自 2022.03 月份起, 其对企业微信的用户信息对第三方服务商加密, 如果需要获取用户的基本信息(姓名, 性别, 部门), 需要使用企微提供的 JS, 在前段显示的授权后, 调用企微 API 才可解密
- 使用企微内部通讯录来获取用户信息不可取, 因为其需要用户填写通讯录 secret, 通过该 secret 来获取 accessToken 来获取通讯录信息, 且使用第三方服务商 accessToken 来解密还原初始的 corpId
13.
持续更新中….