我正在使用百度推送API向我的设备发送推送通知消息。但是我在响应中遇到身份验证失败。我试图联系百度支持,但他们就是不回复。
错误响应:{ "request_id":2727123347, "error_code":30603, "error_msg":"身份验证失败" }
以下是我的 API 参数详细信息
----------发布网址----------
https://api.tuisong.baidu.com/rest/3.0/push/all
----------头----------
Content-Type = application/x-www-form-urlencoded;charset=utf-8
User-Agent = BCCS_SDK/3.0 (Darwin; Darwin Kernel Version 14.0.0: Fri Sep 19 00:26:44 PDT 2014; root:xnu-2782.1.97~2/RELEASE_X86_64; x86_64) PHP/5.6.3 (Baidu Push Server SDK V3.0.0 and so on..) cli/Unknown ZEND/2.6.0
----------表单数据----------
apikey = XXXXXXXXXX
expires = 1593494000
msg = %7B%22title%22%3A%22hello%22%2C%22description%22%3A%22hello%20world%22%2C%22notification_builder_id%22%3A0%2C%22notification_basic_style%22%3A7%2C%22open_type%22%3A0%2C%22url%22%3A%22http%3A%2F%2Fdeveloper.baidu.com%22%2C%22pkg_content%22%3A%22%22%2C%22custom_content%22%3A%7B%22key%22%3A%22value%22%7D%2C%22target_channel_id%22%3A%22%22%7D
timestamp = 1593493655
secret_key = XXXXXXXXXXX
sign = f7a7b96457162795c491d993a1b821a7
我使用了下面的参考资料来准备参数和进行 API 调用。
- http://push.baidu.com/doc/restapi/restapi
- http://push.baidu.com/doc/restapi/sdk_developer
请帮我解决这个问题。提前谢谢。
百度 Rest API 在你散列之前对签名字符串的编码非常敏感。请参阅 http://push.baidu.com/doc/restapi/sdk_developer -> 签名算法部分。您必须使用确切的UrlEncode()
算法。
经过广泛的试验和错误,我发现了 C# 方法System.Net.WebUtility.UrlEncode(raw)
它使用了 Rest API 预期的编码。 确保以所选语言使用的方法按如下方式编码:
原始:{"Hello":"Stackoverflow @ https://stackoverflow.com"}
编码:%7B%22Hello%22%3A%22Stackoverflow+%40+https%3A%2F%2Fstackoverflow.com%22%7D
注意:
' '
(空格(编码为'+'
而不是%20
- 十六进制值(例如
%7B
(使用大写字母