最近公司项目aap需要加上qq钱包支付的功能,以前也没做过支付,然后就先去qq支付的官方文档去看了一下,需要做些什么。
qq支付api文档地址:https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=58
看了一下文档,文档参数给的也很详细,但是毕竟没写过,感觉毫无头绪,然后就去网上搜一搜关于qq支付的文章,但是发现聊聊无几,基本没人写过。
现在写一下,也是希望以后的人能够很快上手这个功能。
首先你需要在用户在app点击购买按钮的时候,先生成订单,然后选择自己想要付款的方式(这里选择qq支付),然后你可以去看一下文档,有哪些请求参数是必须要的,你也可以写一些app上自己的参数,文档上有一个请求参数是sign,
在这里进行第一次签名
然后如上图去请求qq的统一下单的接口,返回得到的数据是以xml形式的,所以我么需要将其转换为map。
然后判断返回的return_code是否为SUCCESS.
如果成功的话,我们需要将一些参数返回给前端(我是后台),这里需要注意一下,前端请求我们写的接口所需要得到的参数
详见https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=165 (安卓为例)
如下图:
注意它们的参数有一个为pubAcc的参数数,这个参数没用,但是必须要有且值为空。
然后后台需要对参数进行签名,这里的签名方式不再是MD5,而是HMAC-SHA1
然后前端调起支付功能,此时qq会请求我们的回调接口
我们需要验证传过来的是否是qq的回调,此时进行签名的验证(获取的参数得去掉sign再进行签名)
这里验证签名也是需要用HMAC-SHA1的方式。
然后再与sign对比,判断是否成功。成功之后后台处理逻辑
注意:验证是否成功不能以前端返回信息为准,我们通过回调参数来自己进行判断
这个功能算是写完了,但是安卓和ios都辞职了,新的同事也未来,所以等新同事来了之后,对接好了再进行更新。
有什么写的不对的地方,也欢迎大家指出来,一起研究研究。
昨天和新来的安卓已经对接好了,上面的是没有问题的,只不过第二次签名的时候,签名的密匙不能是上图中的QQ_API_KEY,不然签名是不通过的,这里的密匙应为APPKEY,且要在其末尾加上一个&符号,这样才能签名成功。APPKEY找前端问一下就好了。