在调用第三方接口时,有时会遇到签名错误的提示。经过排查后,发现问题的原因是在使用GET请求方式时,参数内容中的签名值(sign)是以Base64格式编码的,其中包含了加号(+)符号。然而,服务端接收到请求后,加号被错误地解析为空格,导致签名值的比对不一致。
请求值
+QRuK23T1SfyXqUHRg2kPCg+bR7cuqvBL0Nawc9AdZw=
服务端接收值
QRuK23T1SfyXqUHRg2kPCg bR7cuqvBL0Nawc9AdZw=
解决方法
在发送GET请求前,将参数进行URL编码, Encode后的值
%2BQRuK23T1SfyXqUHRg2kPCg%2BbR7cuqvBL0Nawc9AdZw%3D
服务端接收并解码
+QRuK23T1SfyXqUHRg2kPCg+bR7cuqvBL0Nawc9AdZw=
URL 中的特殊符号
在 URL(统一资源定位符)中,某些字符具有特殊含义或保留目的。为了在 URL 中包含这些字符而不引起混淆或歧义,需要使用特定的格式对它们进行编码,这种格式称为 URL 编码。以下是 URL 中的一些特殊字符:
保留字符
冒号(:)
正斜杠(/)
问号(?)
井号或哈希符号(#)
和号(&)
等号(=)
加号(+)
非安全字符
空格( )- 通常表示为加号(+)或百分号编码为 %20。
小于号(<)和大于号(>)
双引号(")
百分号(%)
左大括号({)和右大括号(})
管道符(|)
反斜杠(\)
插入符号(^)
波浪号(~)
左方括号([)和右方括号(])
重音符号或开音符号(`)
左圆括号(()和右圆括号())
URL 编码
保留字符和非安全字符,以及任何非 ASCII 字符,在 URL 中进行百分号编码。编码格式将特殊字符替换为百分号(%)后跟其 ASCII 值的两位十六进制表示。例如,空格被编码为 %20,加号(+)被编码为 %2B。