记一次微信服务商模式开发,并兼容普通商户

  • 首先申请成为微信服务商,这里不在赘述


首先申请成为微信服务商,这里不在赘述

首先肯定的是将服务号注册为服务商模式,微信的套路300块认证

微信支付服务商 特约商户号 java 微信特约商户号申请_微信


接下来就是特约商户申请,这一步需要在服务商账号下进行,需要企业、法人等信息,让公司前台小姐姐搞定就行,申请成功后会给绑定的法人微信号的微信支付商家助手中推送特约商户邀请,需要在手机上打开并同意,(查阅相关博客说是可能需要填写一些其他资料,但是我的并没有,由于开发原因,只让法人认证,手机号填写的是自己的,方便自己修改调试)

微信支付服务商 特约商户号 java 微信特约商户号申请_微信_02


经过上一步同意成为特约商户之后会生成一个新的商户,(另外发现,同一个微信服务号同时拥有的普通商户和服务商并不是同一个商户,特约商户也是,会生成一个新的商户,注意 后边支付退款,资金流都会在新的商户中进行)

同意之后需使用新的商户号(也就是特约商户)登录微信商户平台,会收到邀请信息,同意即可

微信支付服务商 特约商户号 java 微信特约商户号申请_微信支付服务商 特约商户号 java_03


接下来继续在服务商这边操作,服务商需要为特约商户关联相关的appid,自己做的是小程序,所以需要为特约商户关联小程序的appid,这样就可以在关联的小程序中支付到绑定的特约商户中

微信支付服务商 特约商户号 java 微信特约商户号申请_微信支付服务商 特约商户号 java_04


记得在特约商户授权产品中开通相关支付,我使用的是jsapi支付所有申请了服务商jsapi支付,开通时候需要邀请特约商户,此操作也需要登录特约商户的商户号进行授权,也就是特约商户允许服务商帮自己支付

微信支付服务商 特约商户号 java 微信特约商户号申请_小程序_05


在开发配置中配置相关的支付回调域名等信息,不用再特约商户账号下设置,直接回调服务商中配置的地址就行,由于权限原因,大家自行查看

微信支付服务商 特约商户号 java 微信特约商户号申请_小程序_06


记得在api安全中设置相关的证书及密钥,使用在线工具生成就好,证书在退款的时候会用到,密钥在支付签名,及退款时都需要

微信支付服务商 特约商户号 java 微信特约商户号申请_小程序_07

以上流程配置号之后就可以开始开发了,参照微信的服务商开发文档:https://pay.weixin.qq.com/wiki/doc/api/sl.html

开发需要注意的是 appid一定是服务商的appid 也就是服务商对应的公众号appid 商户号mch_id为服务商的商户号,sub_mch_id为申请的特约商户商户号,一定是绑定成功后那个新的商户号,sub_appid为之前为特约商户关联的小程序appid

微信支付服务商 特约商户号 java 微信特约商户号申请_微信支付_08


网上说比较坑的两个参数openid 和 sub_openid,有一点可以确定的是,使用服务商模式为特约商户支付时不需要openid,只传sub_openid,sub_mch_id,sub_appid就可以,这里参考了相关博客,最终踩坑通过

另外注意签名,第一次向微信发送的时候使用的签名为刚才在服务商账户api安全中设置的签名,发送请求后微信会返回相关信息,这时候需要二次加密返回给前台调起微信支付,二次签名使用的appid一定是sub_appid(特约商户关联的appid)否则扫码后会报签名验证失败 当然加密使用的key 也是服务商api安全中设置的密钥

微信支付服务商 特约商户号 java 微信特约商户号申请_小程序_09


查找相关博客的时候,有说在支付时使用的openid需要重新获取,包括微信文档上也有,但是自己在做的时候由于系统中保存了小程序用户的openid,我直接使用也没报错,这块存在疑点,大家注意,我自己的理解可能是由于实在同一个小程序中使用多商户模式,所以不需要重新获取,如果是不同小程序可能需要在下单时重新获取一次,业务不同,大家根据自己业务需求多尝试几次

支付回调验签的时候同样的需要使用服务商及特约商户的相关信息验签,否则验签不通过以上就是调起支付的相关流程了

退款的话只需要根据文档设置相关参数就可以,需要注意的就是退款的证书为服务商在api安全中设置的证书,密钥为设置的密钥按照文档封装相关请求参数就可退款成功

微信支付服务商 特约商户号 java 微信特约商户号申请_微信支付_10