百度云推送 API 认证失败错误
Posted
技术标签:
【中文标题】百度云推送 API 认证失败错误【英文标题】:Authentication Failure error for Baidu Cloud Push API 【发布时间】:2020-06-30 10:46:06 【问题描述】:我正在使用百度推送 API 向我的设备发送推送通知消息。但是我在响应中遇到了身份验证失败。我尝试联系百度支持,但他们就是不回复。
错误响应: “request_id”:2727123347, “错误代码”:30603, “error_msg”:“身份验证失败”
以下是我的 API 参数详细信息
---------POST 网址----------
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
请帮我解决这个问题。提前致谢。
【问题讨论】:
【参考方案1】:Baidu Rest Api 在哈希之前对签名字符串的编码非常敏感。请参阅http://push.baidu.com/doc/restapi/sdk_developer -> 签名算法部分。您必须使用 exact UrlEncode()
算法。
经过大量试验和错误,我发现了 C# 方法 System.Net.WebUtility.UrlEncode(raw)
,它使用了 Rest API 所期望的编码。
确保您使用的方法以您选择的语言编码如下:
原始:"Hello":"*** @ https://***.com"
编码:%7B%22Hello%22%3A%22***+%40+https%3A%2F%2F***.com%22%7D
注意:
' '
(空格)编码为'+'
和not %20
十六进制值(例如%7B
)使用大写字母
【讨论】:
以上是关于百度云推送 API 认证失败错误的主要内容,如果未能解决你的问题,请参考以下文章