百度云推送 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 认证失败错误的主要内容,如果未能解决你的问题,请参考以下文章

App之百度云推送

百度云推送java服务器怎么弄

百度云推送服务端SDK怎么用

消息推送之百度云推送Android集成与用法

百度云推送点击通知后进入不了想要的页面

iOS开发-百度云推送开发证书(续)