百度云推送应该是现在推送领域的后起之秀了,做的不错,但是问题在于REST API设计的太复杂了...尤其是那个签名验证方法
复杂就复杂吧,还不给提供做好的接口,只能用户自己去拼了...
虽然这个页面http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/api中说的挺清楚的,还是会有一些误会,这里记录下来:
1、基础算法:
百度用了一个php代码作为例子:
/**
* $secret_key //应用的secret key
* $method //GET或POST
* $url url
* $arrContent //请求参数(包括GET和POST的所有参数,不含计算的sign)
* return $sign string
**/
function genSign($secret_key, $method, $url, $arrContent) {
$gather = $method.$url;
ksort($arrContent);
foreach($arrContent as $key => $value) {
$gather .= $key.'='.$value;
}
$gather .= $secret_key;
$sign = md5(urlencode($gather));
return $sign;
}
$secret_key = 'xxxxxxxx';//此处替换为应用的secret key
$method = 'POST';
$url = 'http://channel.api.duapp.com/rest/2.0/channel/channel';
$arrContent = array(
'method'=>'token',
'timestamp'=>1313293563,
'expires'=>1313293565,
);
$sign = genSign($secret_key, $method, $url, $arrContent);
2、注意事项
- apikey也要加入这个array中,也就是说签名值的计算字符串中,包含apikey这一段
- urlencode必须做
- md5的结果为必须小写