var ak = process.env.BAE_ENV_AK;
var sk = process.env.BAE_ENV_SK;
var API_HOST = 'http://bcms.api.duapp.com/rest/2.0/bcms/';/*** 百度云消息API地址*/
function signPostData(uri, postData){ //
var signstr = "POST" + uri;
_.pairs(postData).forEach(function(pd){
signstr += pd[0] + "=" + pd[1];
});
signstr += sk;
console.log(signstr);
signstr = encodeURIComponent(signstr);
console.log(signstr);
return util.MD5(signstr);
}
exports.create = function (callback){ /*** 创建队列 http://developer.baidu.com/wiki/index.php?title=docs/cplat/mq/api#create*/
var uri = API_HOST + 'queue';
var now = Date.now();
var postData = { 'access_token':sk, 'client_id': ak, 'method': 'create','expires': now,'queue_alias_name': 'queue_another_name','queue_type':0, 'timestamp': now, 'v': '1.0'};
postData = _.extend(postData, {'sign': signPostData(uri, postData)});
console.log(postData);
request.post(uri, postData, callback); //这里调用了全局的一个request模块,检查过没有问题。
};
以上代码老是返回{“error_code”:30001,“error_msg”:“Request params not valid”,“request_id”:3806336952} 请求参数非法
之前尝试过自己搞smtp,但socket锁住了,BAE好像过不去,老是报address error,放到自己服务器能通过,现在只能考虑用BCMS方式。再不行,只能再在sinaapp上做个rest调用了。
以上代码能表达意思,去掉了不相关的部分。
应该找BAE的客服
bae内部有bcms模块,直接require(‘bae-bcms’)。
BCMS 接口文档
服务简介
百度云消息服务(Baidu Cloud Message Service, BCMS)是百度于2011年7月最新设计研发,并于2011年底推出的国内首个消息服务平台。BCMS为百度云计算平台上的所有应用提供高效,可靠,安全,便捷的消息服务。广大应用开发者可以使用BCMS在他们应用的分布式组件上自由的传递数据,并结合百度云计算平台的其它服务,创造出更有特色的精品应用
使用示例
var http = require('http');
var BCMS = require('bae-bcms');
var port = process.env.APP_PORT;
var hostname = process.env.BAE_ENV_ADDR_BCMS || 'bcms.api.duapp.com';
var server = http.createServer(function(req, res) {
res.writeHead(200, {
'Content-Type': 'text/html'
});
var ak = process.env.BAE_ENV_AK;
var sk = process.env.BAE_ENV_SK;
var options = {
host: hostname,
ak: ak,
sk: sk
}
var client = new BCMS(options);
var opt = {};
client.createQueue(opt, function(err, result){
if(err){
console.log(err);
return;
}
console.log(result);
});
});
server.listen(port);
接口列表
各个接口的options配置请参考百度开发者中心BCMS开发文档
BaeBCMS(options)
- 构造函数
- options {Object}: BCMS初始化选项
- host {String}: BCMS服务器地址
- ak {String}: 用户API key
- sk {String}: 用户Secret key
createQueue(options, callback)
- 创建一个队列
- options {Object}: 创建队列选项
- expires {Number}: 可选,签名有效期截止时间戳
- queue_type {Number}: 可选,队列的消费模式
- queue_alias_name {String}: 可选,队列别名
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
dropQueue(options, callback)
- 取消一个队列
- options {Object}: 取消队列选项
- expires {Number}: 可选,签名有效期截止时间戳
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
subscribeQueue(options, callback)
- 注册一个订阅队列
- options {Object}: 注册选项
- destination {String}: 订阅通知的目标地址,不超过256字节,合法的destination类型,目前仅支持http://host/uri的格式
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
unsubscribeQueue(options, callback)
- 取消注册订阅队列
- options {Object}: 取消注册选项
- destination:订阅通知的目标地址,不超过256字节,合法的destination类型,目前仅支持http://host/uri的格式
- queue_name: 队列名,该值为创建队列时返回的queue_name值
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
unsubscribeAllQueue(options, callback)
- 取消队列全部的注册订阅
- options {Object}: 取消队列选项
- queue_name: 队列名,该值为创建队列时返回的queue_name值
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
grantQueue(options, callback)
- 授权分享该队列
- options {Object}: 授权选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- label {String}: 分享授权标识, 由开发者自己维护,在删除时需要此信息。最小长度为5个字符,最大长度为20个字符,必须为字母和数字的组合
- user {String}: 被授权的开发者百度账号, 百度passport用户名,或者百度passport注册的邮箱,或者百度passport注册的手机号
- usertype {Number}: 被授权的开发者百度账号类型 1:passport用户名, 默认值, 2:passport邮箱, 3:passport手机号
- actions {Array}: 授权的操作类型,例如 [‘drop’, ‘suspend’] 详见这里
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
revokeQueue(options, callback)
- 回收授权分享队列
- options {Object}: 回收选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- label {String}: 分享授权标识, 由开发者自己维护,在删除时需要此信息。最小长度为5个字符,最大长度为20个字符,必须为字母和数字的组合
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
suspendQueue(options, callback)
- 暂停队列消息的存取功能
- options {Object}: 回收选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- label {String}: 分享授权标识, 由开发者自己维护,在删除时需要此信息。最小长度为5个字符,最大长度为20个字符,必须为字母和数字的组合
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
resumeQueue(options, callback)
- 恢复队列的消息存取功能
- options {Object}: 恢复选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
confirmQueue(options, callback)
- 通过token确认注册订阅生效
- options {Object}:确认选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- destination {String}: 订阅通知的目标地址,不超过256个字节,合法的类型目前只支持 http://host/uri
- token {String}: 确认令牌,最长不超过128个字节
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
cancelQueue(options, callback)
- 通过token取消注册订阅
- options {Object}: 取消选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- destination {String}: 订阅通知的目标地址,不超过256个字节,合法的类型目前只支持 http://host/uri
- token {String}: 确认令牌,最长不超过128个字节
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
publishMessage(options, callback)
- 向该队列发送消息
- options {String}: 发送消息选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- message {String}: 消息内容, 必须为文本,最大不超过256K字节,消息不能为空
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
publishMultiMessages(options, callback)
- 批量向该队列发送消息
- options {Object}: 发送选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- messages {Array}: 每条消息内容, 必须为文本,最大不超过256K字节。消息不能为空。多个消息用json数组的形式表达,最多10个消息。
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
fetchMessage(options, callback)
- 主动获取该队列的消息
- options {Object}: 获取选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- msg_id {Number}: 可选,指定查询消息起始id,如果是多模式队列,必须指定起始消息id;如果是单模式队,则不能指定起始消息ID
- fetch_num {Number}: 可选,消费消息个数,默认为1,最大为10
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
mail(options, callback)
- 发送即时通讯的邮件消息
- options {Object}:发送邮件选项
- queue_name {String}: 队列名,该值为创建队列时返回的queue_name值
- message {String}: 每条消息内容, 必须为文本,最大不超过256K字节,不能为空
- address {Array} : 字符串数组,接收者的邮件地址,一次最多支持10个邮箱地址
- mail_subject {String}: 可选,邮件主题,最长不超过128字节。如果不指定将使用默认邮件主题:您有新的消息(来自百度消息服务)
- from {String}: 可选,发送者邮件地址
- callback(err, result): 调用成功,err为空,result为返回结果;调用失败,err返回的具体错误信息, result为空
兄弟, 我为了这个自己写了份bae发送邮件的模块.
请参考: http://pangwa.github.io/bae-message/
我计划再写一些基于bae云消息的其他服务, 有兴趣的话可以参与进来啊~
官方没有这个模块的说明…
我在百度上怎么找不到
// php like URL encode 这个你也能挖掘出来哈,后端的确用的php的encode 可以试试bae-push, bae-bcs
@ifrog haha, 猜的, 没有在npmjs.org上找到bae-push, bae-bcs这两个模块啊.