中国移动开放平台(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;
}

批评:

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值