记一个对接快手联盟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&timestamp=now_stamp’)
=> ans_md5
or
md5(/api/app/add?
ak=test_ak&random=test_random&sk=kuaishou_test_sk&timestamp=
now_stamp’)
=> ans_md5
d.最终 url:
https://u.kuaishou.com/api/app/add?
sign=ans_md5&ak=test_ak&timestamp=now_stamp
or
https://u.kuaishou.com/api/app/add?
sign=ans_md5&ak=test_ak&timestamp=now_stamp&random=test_ra
ndom

根据笔者猜测,可能签名参数和实际要传的参数其实有联系,但不多。所以索性只传必要的参数,例如AKTIMESTAMP等,结果这一试,还真的可以。

总结

  1. 不要犯经验主意错误,不能其他广告平台这样子签名就这样子签名。
  2. 快手联盟这API文档真的糙,请求体实例也没有,调试得贼累
本作品采用《CC 协议》,转载必须注明作者和本文链接
个人博客,随意转载
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!