Skip to content

1.3、URL编码注意事项


URL编码规则

签名验证时,要求对字符串中除了“-”、“_”、“.”之外的所有非字母数字字符都替换成百分号(%)后跟两位十六进制数十六进制数中字母必须为大写。

注意事项

1.某些系统方法,例如.NET系统方法HttpUtility.UrlEncode会将‘=’编码成‘%3d’,而不是%3D,导致加密签名通不过验证,请开发者注意检查。
2.Java 1.3和早期版本中,调用java.net.URLEncoder下的方法进行URL编码时,某些特殊字符并不会被编码,例如星号()。
由于URL编码规则中规定了星号(
)必须编码,因此在请求字符串中含星号()的情况下如果使用了上述方法,会导致生成的签名不能通过验证。
例如调用v3/pay/buy_goods接口时, payitem参数值中一定会含有
,在使用类java.net.URLEncoder下的方法进行编码后,需开发人员手动将星号字符“*”替换为“%2A”,否则将导致加密签名一直通不过验证,请开发者注意检查。 3. 某些语言的urlencode方法会把“空格”编码为“+”,实际上应该编码为“%2B”。这也将生成错误的签名,导致签名通不过验证。
请开发者注意检查,手动将“+”替换为“%2B”。
在PHP中,推荐用rawurlencode方法进行URL编码。
示例:
http://10.1.69.126:8099/ess/master/getstoreinfo?sig=NpOJlr6q5HGwuF%2BgE9W42RGMjyU%3D&appid=HY2023052501874&ts=20230630&format=json&userip=172.10.1.13&PageNo=1&times=2023-01-01
密钥:75EB111F-54BF-4415-80EE-F968FD76E778&
HTTP请求方式:GET
1、uri编码
源uri:/ess/master/getstoreinfo-
编码后:%2Fess%2Fmaster%2Fgetstoreinfo
2、参数排序及编码
源参:appid=HY2023052501874&ts=20230630&format=json&userip=172.10.1.13
排序后:appid=HY2023052501874&format=json&ts=20230630&userip=172.10.1.13
编码后:appid%3DHY2023052501874%26format%3Djson%26ts%3D20230630%26userip%3D172.10.1.13
3、生成签名值
组装后的待签名数据:GET&%2Fess%2Fmaster%2Fgetstoreinfo&appid%3DHY2023052501874%26format%3Djson%26ts%3D20230630%26userip%3D172.10.1.13
签名后:s3gOa8KprmQ71eDOcAPUD7Njfso=