前端接口sign签名

明明已经按照签名规则,ascll进行排序,也进行了md5加密,为什么还是接口显示签名验证失败

img

img

img

你这是那个api的,你可以使用postman先按照他给的测试实例,试一下!

你在

sign = md5(sign);

上面一行输出一下数据,贴一下看看

还有参数字段为sign

{sign:sign}

这样试一试。
还有就是是post还是get,应该不是这个问题。
再者需要你自己调试了

img

img

感觉问题比较多,我说说我发现的

  1. 你没把数据传给后端,你只传了个{sign:'加密后数据'},他都没有username...等数据如何签名校对
  2. 是get/post请求,如何传递username,password,confirm_password,是json方式的body,还是说是form形式的key1=value1&key2=value2
  3. 确认sign字段传递的方式,是放在url的query里面还是放在body里面的
    和接口方确认,要一个curl能请求成功的例子

显示签名错误正常呀,因为你

img


你传递了
{sign:sign}这个参数,你传递到API以后,API那边没有获取到你用来做签名的,其他的几个参数,那么api那边计算出来的sign值和你传递的sign当然是不一样的,当然就会提示你签名错误了

签名校验失败的排查思路
1、使用签名检查工具校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode6、接口需要使用UTF-8编码

img


你这是啥呀?参数呢?md5是签名不是加密,所以你得把参数和sign一起传给服务端;
应该是你那个obj加入sign作为请求参数就对了。

你只传了签名,服务器那边也没法验证对比是否正确 自然返回签名错误

只传了签名