记一个对接快手联盟media-api的坑[签名问题]
缘起
看media-api
对接文档上,关于签名是这么描述的:
a.接口参数名(包括 sk)按字典序排序后对 url 的路径和参数部分做 md5 计算校验码。
b.去掉 sk 参数, 追加 sign=校验码(小写)到最后, 生成最终的 url(这个 url 的参数顺
序可以不排序)。
因此,根据上述解释,本人很容易的就以为,签名是把所有的数据包含请求内容一起签。
一开始,还能正常,但是在遇到修改广告位
的时候,就出问题了,先看文档:
callbackUrl 回调 url String 无需服务器判断不需要填写,需要服务器判断为必填
设置了这个值无论是用 urlencode
进行编码,还是直接传,亦或者不转义都提示签名失败。这就很令人崩溃了。
因为这份文档在官网只有一份PDF文件,也没有讨论社区,所以也不知道找谁问,最后,还是得耐着性子重新再看。这一看,还真看出点门道来。
在上述签名中,附带了一个实例代码
a.原始的 url:
https://u.kuaishou.com/api/app/add
b.所需参数:
ak=test_ak
sk=kuaishou_test_sk
timestamp=now_stamp
random=test_random(随机数,选填)
c.根据 url 和参数计算 sign(参数按字典序排序):
md5(‘/api/app/add?
ak=test_ak&sk=kuaishou_test_sk×tamp=now_stamp’)
=> ans_md5
or
md5(‘/api/app/add?
ak=test_ak&random=test_random&sk=kuaishou_test_sk×tamp=
now_stamp’)
=> ans_md5
d.最终 url:
https://u.kuaishou.com/api/app/add?
sign=ans_md5&ak=test_ak×tamp=now_stamp
or
https://u.kuaishou.com/api/app/add?
sign=ans_md5&ak=test_ak×tamp=now_stamp&random=test_ra
ndom
根据笔者猜测,可能签名参数和实际要传的参数其实有联系,但不多。所以索性只传必要的参数,例如AK
,TIMESTAMP
等,结果这一试,还真的可以。
总结
- 不要犯经验主意错误,不能其他广告平台这样子签名就这样子签名。
- 快手联盟这API文档真的糙,请求体实例也没有,调试得贼累
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: