中国移动开放平台(dev.cmccopen.cn)请求头Header:Authorization验证失败的原因(我遇到的)

中国移动开放平台的通信开放平台地址:https://dev.cmccopen.cn/

我遇到的问题:请求验证的结果是状态码是:401,原因是:authentication fail

我的开发语言:PHP

官方的文档“鉴权”模块的说明截图 如下:

原因查找过程:

1、开始以为是base64编码对方服务器没法解码,但生成的base64编码放到其他网络平台解码是可解码的,由此说明base64编码是没问题的;

2、折腾了半天实在没办法,咨询了对方技术人员,得知对方用java环境,技术人员建议我使用java环境;

3、自己电脑上搭建了java 写了个生成Authorization值的程序;发现java生成的值是可以验证通过的;经仔细对比数值发现:是时间戳的问题

PHP生成的时间戳代码是time(),

java生成的时间命令则是System.currentTimeMillis();

结果是不一样的,PHP time()生成的时间戳只精确到秒,而java System.currentTimeMillis()生成的结果是精确到毫秒的;很明显一眼能看出的结果就是时间戳字符串的长度都不一样;加密出来的鉴权信息肯定是不一样的,对方服务器校验肯定会失败。

解决方案:

PHP 生成的时间戳让其精确到毫秒(传说PHP 没有默认精确到毫秒的方法,)

public function MyMsectime()
{
	list($msec, $sec) = explode(' ', microtime());
	$msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
	return $msectime;
}

批评:

首先承认自己太菜了,重点就是:移动开放平台写文档人,时间戳你为何不详细的说明需要精确到毫秒(见上文截图绿框)

猜你喜欢

转载自blog.csdn.net/qq_29712303/article/details/88017196
今日推荐