1.背景
最近接到一个产品支付功能,要求打通微信自动续费功能,类似腾讯视频的会员自动续费。原计划开发周期为一周左右,由于微信坑爹的接口文档以及蛋疼的审核程序,导致前后将近耗时近一个月,支付方式也是从支付中签约换成纯签约,对业务也是影响巨大,思虑再三决定做个老实人,把这过程中所受的磨难总结出来,希望对对同等遭遇的老铁有做帮助,哈哈!
2.基本概念梳理
签约方式:要是使用微信代扣功能,在开发过程中,需要打通微信的签约接口,签约有几种不同的类型,分为两大类:支付中签约和纯签约。支付中签约,就是在支付首期费用的时候同时完成了签约工作,签约页面有首期费用金额,页面底部有"支付并开通"按钮,即你调微信接口一次,微信回调你两次,一次为签约结果,一次为支付结果。笔者最开始对接的就是支付中签约,后转为对接纯签约,各种心酸在后续开发过程中说明。再说纯签约,纯签约又分了四种方式:公众号纯签约(针对微信浏览器环境下,如QQ,微信,企业微信除外),APP纯签约(针对APP场景),小程序纯签约(这对小程序),H5纯签约(针对H5浏览器,如手机自带的在微信环境之外的浏览器,如UC,百度等)。因为产品的是网页端程序,笔者同时对接了公众号纯签约和H5纯签约。
多账户签约: 微信默认一个手机微信在同一个代扣模板(后面解释)下,只存在一个有效的签约协议,即只能购买一单分期产品,在不关闭服务的情况下,再次申请会报错"当前账号已开通自动续费功能",要想实现多次购买,需要线下通过业务联系微信的BD进行多账户签约申请,待为你后台配置完毕后,会给一个私密文档,上面会说明如何传值。没错,这个秘密单靠技术开发人员不可能知道,官方文档没有找到任何说明。具体看业务场景,是否需要开通,要提前做准备工作。
接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/wxpay_v2/papay/chapter3_1.shtml
签约方式效果图:
多账户签约效果图:
3.对接流程
先上个流程图,图是盗用别人的,但是因为比我自己画的好,暂时借用了
3.1线下流程
这个一般由公司物业或者产品负责人去操作,需要联系微信的BD,也就是业务人员于业务人员的沟通,可能需要公关,微信那边会发来整个详细如上提到的流程文档,技术最多提供协助,除了第四步,其他的没我们什么事,但是一定要注意一件事,信息共享,业务沟通的文档中有很多就是线上技术文档没有的东西,跟接口对接大有关系,如扣款模板,多账号签约,H5纯签约,支付中签约的开关问题申请流程等,另外申请代扣模板可能要技术支持,现在审核极其严格,一定要让微信的人给个模板过来,笔者申请了近8次才过,其中包括照抄了腾讯视频,爱奇艺视频,优酷视频,以及会滴保险等,全部被打回。
3.2线上对接
参照技术文档进行对接,比较坑的一点就是技术文档中可能存在表述不清的时候,然后各种找不到相关人员咨询,没有技术客服,可能一个小小的问题卡上你几天,心态爆炸。下面细数几处采坑记录:
(1)文档表述歧义
笔者最开始的对接的是支付中签约,接口极为简单,需要注意一下签名问题即可。但是文档中有这么一段话,坑人良久。
这里的步骤2,完全是一段让人懵逼的解释,整的我对了签约又对接了一遍支付,事实上他的意思是H5直接打开接口返回的页面地址接口,JSAPI则是需要手动按照要求拼接url打开。
(2)描述缺失
对于支付中签约的接口文档中,没有只言片语有描述支付中签约有个默认开关这么一回事,业务拿到的文档有,是别的公司的业务,特也不知道有什么用,没有发给到这边,所以一直不知道有这种线下文档的存在,包括多账户签约。导致技术对接过来的支付中签约的效果是这样的
那个开关模式是关着的,据说是监管的要求,没有任何参数控制,只能客户手动开启,不打开就是普通的支付,也就意味着就是收个首期的钱,而大部分客户是不会操作这个小开关的,对业务推广会造成巨大困扰。打开开关之后才会变成正常的签约页面。
但是一对比别人家的,卧槽,不是一个娘生得,人家升下来就长这样,生下来就灭有开关那回事。
这就回来开始的那种效果图,没错是业务资料里面的,要想去掉开关,得线下邮件申请,配置那边针对模板配置,配置周期一到两周。心态炸裂!
(3)消息通知不及时
上面说到不带开关的支付中签约得线下邮件申请,好,按照流程申请总可以吧,一个周的时间过去了,这次应该妥了吧,一问,卧槽,回复说现在不支持这种,国家监管,以后永不在不支持这种不带开关,而且也不支持首月比次月便宜的营销型产品。
跟微信相关的任何申请,建议能找到相关人微信联系。另外说一句截图中的第二点,代扣不支持营销型场景,实际扣款接口中并没有控制,否则以前申请的产品都不能用了,比如优酷视频的会员开通等,所以只需要在先关申请审核的流程图中不要体现就行,实际接口扣款金额暂时还是由商户控制的。
(4)描述不全
鉴于支付中签约的开关问题无法解决,只好退而求其次,对接纯签约,微信环境下对接给公众号纯签约,直接对接口即可,H5还需要线下申请过了技术接口对接才起作用否则会报错。
万事俱备之后,发现还是报错"签约失败","签名错误","参数构造错误",百思不得其解,后面发现是,回调地址的参数值没有URL编码的原因,当时文档中并没有任何描述,不过好在最新文档中已有相关提醒。
(5)名词解释
上述问题都解决完毕后,流程异常顺畅,测试的时候一不小心又发现个问题,一个手机一个微信签完一次,在不解约,关闭服务的情况下,再次签约时会报错"当前***已签约",这个是才发现多账户签约是个什么意思,默认情况下,一个代扣模板,一台手机只运行一个微信的情况同一时间只能存在一个签约服务,也就是说,在服务器内,你只能买一次代扣产品,我们是做保险的,很可能给自己买一份在给父母买一份,如果存在这个限制很影响业务推广。这才明白多账户签约的作用,就是为了支持这种场景,还给了个私密文档,在先上公开的接口文档中多传一个字段即可,前提是线下邮件申请,微信那边审核通过,配置周期,一到两周,吐血!!!
(5)
针对纯签约,无论是JSAPI还是H5签约,在企业微信中都会报错"参数构造错误",没有找到原因,微信官方无解释,放弃!
4.总结
以上是笔者打通微信代扣的惨痛经历,印象深刻,记录下来,希望能对同行老铁有所帮助,最大的建议是:1.有效的沟通高于一切;2.文档仔细看,微信的文档,重要的东西可能会出现在任何一个角落。针对未知的东西,保持谦逊,留点退路,这次单看文档简单的一匹,对接起来前后耗时近一月。微信不讲武德,希望各位老铁耗子尾汁!!!
另外贴上对接过程中对笔者有过很有价值的博客,供大家参考。
你真的了解微信代扣吗
【微信自动续费】委托代扣接口常见问题Q&A