搞了一个下午,发送通知终于成功了,分享一下
比客户端好多了,客户端都没有文档的。
将PHP SDK下载后放到网站某目录
发送消息很简单的
$channel = new BaiduPush(self::APIKEY, self::SECRETKEY, array(
CURLOPT_TIMEOUT => 30,
CURLOPT_CONNECTTIMEOUT => 5
));
$return = $channel->pushMessage(3, '这是一条小气测试', 'msg_key', array(
'user_id'=>'xxxxx',
'channel_id'=>'xxxxx',
));
最难的是发送通知,文档中说
$messages参数可以是string,array 或 json string,实际上,你被坑了
官方文档:
//推送通知,必须指定MESSAGE_TYPE为1
$optional[Channel::MESSAGE_TYPE] = 1;
//通知必须按以下格式指定
$message = "{
'title': 'title',
'description': 'description'
}";
$message_key = "msg_key";
$ret = $channel->pushMessage ( $push_type, $message, $message_key, $optional );
上面所说的$message格式,相当于是一个字符串拼接格式,也就是伪json格式,因为json转码中,中文会进行处理,但是百度不会还原,所以程序会报错。
$channel = new BaiduPush(self::APIKEY, self::SECRETKEY, array(
CURLOPT_TIMEOUT => 30,
CURLOPT_CONNECTTIMEOUT => 5
));
$optional['user_id'] = 'xxxxxx';
$optional['channel_id'] = 'xxxxxx';
$optional['message_type'] = 1;
$message = "{'title': '测试','description': '这是一条通知测试'}";
$message_key = "msg_key";
$return = $channel->pushMessage(1, $message, $message_key, $optional);
if ( false === $return ){
echo ( 'WRONG, ' . __FUNCTION__ . ' ERROR!!!!
' );
echo ( 'ERROR NUMBER: ' . $channel->errno ( ) . '
' );
echo ( 'ERROR MESSAGE: ' . $channel->errmsg ( ) . '
' );
echo ( 'REQUEST ID: ' . $channel->getRequestId ( ) . '
' );
}else{
echo ( 'result: ' . print_r ( $return, true ) );
}
这里的字符串拼接必须是单引号,否则也会报错
user_id和channel_id都是客户端生成的
还可以自定义一些在百度云推送操作中心支持的操作,比如打开url等,详细文档地址: