前言
应用宝是出了名的坑,主要体现在:
文档杂乱繁多
信息不全或描述模糊
文档格式不规范
技术支持很不及时
并且可以明显察觉到为了兼容QQ和微信,应用宝的接入规范有诸多不合理的地方。来来回回折腾了一周,流程总算通了。这里给大家分享一下接入的一些注意事项
参数的处理
应用宝有非常多的参数。在文档里有相关的说明,我补充说明一下:
首先拿到一套接入参数中,QQ和微信各有一套appid
和appkey
,各自的appkey
只有登录的时候使用,不区分沙箱和线上环境。支付还有单独的一套appkey,区分沙箱和线上环境。登录校验的时候,QQ微信使用各自的appkey
。支付的时候:
统一使用QQ的
appid
如果是沙箱环境,统一使用沙箱的
appkey
正式环境,使用正式环境的
appkey
另外客户端登录后获取的返回参数一共有6个,其中openid,pf,pfkey
为微信QQ共有,用途也是一样。而其他的参数:
access_token
:qq的token有效时间是90天,微信的只有2小时,这一点给业务设计造成了一定的麻烦。同时也是微信的支付票据payToken
:qq独有,做为qq支付的票据refreshToken
:微信独有,文档注明是用来刷新微信access_token,但是并没有给出相关的刷新接口文档。根据技术支持的回复,由客户端实时调用getLoginRecord()
来获取最新的token,我理解为:服务端无法维护微信token,并且保存token也没有意义。具体做法是客户端发起支付的时候,同步传入所有需要的token、pfkey等字段,服务端不做任何保存即支付接口里的
openkey
,qq传payToken
,微信传access_token
以上参数,不要弄混淆了。
支付接口调用
支付接口签名比较坑,构造过程容易疏漏出错,而且奇葩的是有几个参数居然需要设置到Cookie里。在Google了应用宝的接入经验之后,才发现实际上是有接口通用demo的(下载地址),签名自动做好了(文档和技术支持貌似都没有提到还有这么个demo)。下载下来发现不能直接使用,需要自己略做修改。
以JDK1.7为例,需要下载两个额外的jar包:
demo的入口文件为:OpenApiV3.java
,要拿来用还有几个要注意的地方:
只有
post
的请求方式,自己略作修改新增了一个get
请求方式(应用宝的支付接口都是https 的get请求),Cookie
需要自己赋值,demo里是直接置为null
demo里有个校验openid基本格式的方法,根据实际测试,只符合qq的openid格式,微信的openid则不满足,暂时直接去掉了这个校验。
修改后的文档见附件,直接替换demo里的同名文件即可
cookie直接按照接口文档里的提示设置即可
其他注意事项
/v3/r
的接口前缀是签名的时候才加,请求接口的地址不要加应用宝企业QQ提供的技术支持基本上等于没有,还是需要商务联系真正的技术支持人员
附录:相关代码
修改后的OpenApiV3代码见 github,直接覆盖demo里同名文件即可
调用代码为:
//请求应用宝接口
OpenApiV3 ysdkHelper = new OpenApiV3(appId,secretKey);
//设置域名
ysdkHelper.setServerName(domain);
//接口路径 、http请求类型、请求参数、cookies、http协议
String response = ysdkHelper.api(api,httpType ,reqParam,cookies, "https");