Skip to content

Instantly share code, notes, and snippets.

@saighost
Created October 25, 2012 01:11
Show Gist options
  • Save saighost/3949915 to your computer and use it in GitHub Desktop.
Save saighost/3949915 to your computer and use it in GitHub Desktop.
短信SDK
//client
(function () {
var smsclient = {};
module.exports = smsclient;
var cfg = require("./config").config;
var soap = require('soap');
var url = cfg.serviceURL+'?WSDL';
var root = this;
var client,counter = 0;
function ServiceError(code){
this.name = 'ServiceError';
this.msg = 'error code : '+ code;
Error.call(this, this.msg);
Error.captureStackTrace(this, arguments.callee);
}
ServiceError.prototype.__proto__ = Error.prototype;
var Parem = function (arr)
{
for (var i = 0; i < arr.length; i++) {
this['arg'+i] = arr[i]
};
}
smsclient.init = function (callback)
{
soap.createClient(url, function(err, cl) {
if(err){
console.error('init:',err);
if(callback)
callback(err);
}else{
client = cl;
// console.dir(client);
if(callback)
callback(err);
}
});
}
/**
*
* 进行登录操作,配置信息从config中读取
*
* @return int 操作结果状态码
*
* 0 注册成功
* 10 客户端注册失败
* 101 客户端网络故障
* 305 服务器端返回错误,错误的返回值(返回值不是数字字符串)
* 999 操作频繁
*/
smsclient.login = function (callback)
{
var parem = new Parem([cfg.sn,cfg.key,cfg.password]);
client = null;
smsclient.init(function (error) {
if(!error){
client.registEx(parem, function (err,result) {
if(err){
console.error('login:',err);
callback(err);
client = null;
}else{
console.log(result);
if(result['return']!='0'){
var error = new ServiceError(result['return'])
console.error('login:',error);
callback(error);
}else{
callback(null,true);
}
}
})
}
})
}
/**
* 注销操作 (注:此方法必须为已登录状态下方可操作)
*
* @return int 操作结果状态码
*
* 0 注销成功
* 11 注销失败
* 101 客户端网络故障
* 305 服务器端返回错误,错误的返回值(返回值不是数字字符串)
* 999 操作频繁
*/
smsclient.logout = function (callback)
{
var parem = new Parem([cfg.sn,cfg.key]);
client.logout(parem,function (err,result) {
if(err){
console.error('logout:',err);
callback(err);
}else{
console.log(result['return']);
if(result['return']!=0){
var error = new ServiceError(result['return'])
console.error('logout:',error);
callback(error);
}else{
callback(null,true);
}
}
});
}
/**
* 获取版本信息
* @return string 版本信息
*/
smsclient.getVersion = function(callback)
{
client.getVersion(null,function (err,result) {
if(err){
console.error('getVersion:',err);
callback(err);
}else{
console.log(result['return']);
if(result['return']!=0){
var error = new ServiceError(result['return'])
console.error('getVersion:',error);
callback(error);
}else{
callback(null,true);
}
}
});
}
/**
* 企业注册 [邮政编码]长度为6 其它参数长度为20以内
*
* @param string $eName 企业名称
* @param string $linkMan 联系人姓名
* @param string $phoneNum 联系电话
* @param string $mobile 联系手机号码
* @param string $email 联系电子邮件
* @param string $fax 传真号码
* @param string $address 联系地址
* @param string $postcode 邮政编码
*
* @return int 操作结果状态码
*
*/
smsclient.registDetailInfo = function (callback)
{
var parem = new Parem([cfg.eName,cfg.linkMan,cfg.phoneNum,cfg.mobile,cfg.email,cfg.fax,cfg.address,cfg.postcode]);
client.registDetailInfo(parem,function (err,result) {
if(err){
console.error('registDetailInfo:',err);
callback(err);
}else{
console.log(result['return']);
if(result['return']!=0){
var error = new ServiceError(result['return'])
console.error('registDetailInfo:',error);
callback(error);
}else{
callback(null,true);
}
}
});
}
/**
* 得到上行短信 (注:此方法必须为已登录状态下方可操作)
*
* @return array 上行短信列表, 每个元素是Mo对象, Mo对象内容参考最下面
*
*
* 如:
*
* $moResult = $client->getMO();
* echo "返回数量:".count($moResult);
* foreach($moResult as $mo)
* {
* //$mo 是位于 Client.php 里的 Mo 对象
* echo "发送者附加码:".$mo->getAddSerial();
* echo "接收者附加码:".$mo->getAddSerialRev();
* echo "通道号:".$mo->getChannelnumber();
* echo "手机号:".$mo->getMobileNumber();
* echo "发送时间:".$mo->getSentTime();
* echo "短信内容:".$mo->getSmsContent();
* }
*
*
*/
smsclient.getMO = function (callback)
{
var parem = new Parem([cfg.sn,cfg.key]);
client.getMO(parem,function (err,result) {
if(err){
console.error('getMO:',err);
callback(err);
}else{
console.log(result['return']);
callback(null,result['return']);
}
});
}
/**
* 得到状态报告 (注:此方法必须为已登录状态下方可操作)
* @return array 状态报告列表, 一次最多取5个
*/
smsclient.getReport = function (callback)
{
var parem = new Parem([cfg.sn,cfg.key]);
client.getReport(parem,function (err,result) {
if(err){
console.error('getReport:',err);
callback(err);
}else{
console.log(result['return']);
callback(null,result['return']);
}
});
}
/**
* 短信发送 (注:此方法必须为已登录状态下方可操作)
*
* @param array mobiles 手机号, 如 array('159xxxxxxxx'),如果需要多个手机号群发,如 array('159xxxxxxxx','159xxxxxxx2')
* @param string content 短信内容
* @param string sendTime 定时发送时间,格式为 yyyymmddHHiiss, 即为 年年年年月月日日时时分分秒秒,例如:20090504111010 代表2009年5月4日 11时10分10秒
* 如果不需要定时发送,请为'' (默认)
*
* @param string addSerial 扩展号, 默认为 ''
* @param string charset 内容字符集, 默认GBK
* @param int priority 优先级, 默认5
* @param int smsId 信息序列ID(唯一的正整数)
* @return int 操作结果状态码
*/
smsclient.sendSMS = function (mobile,content,sendTime,callback)
{
var arr = [cfg.sn,cfg.key,sendTime,mobile,content,'','utf8',5,counter++]
var parem = new Parem(arr);
client.sendSMS(parem,function (err,result) {
if(err){
console.error('sendSMS:',err);
callback(err);
}else{
console.log(result['return']);
if(result['return']!=0){
var error = new ServiceError(result['return'])
console.error('sendSMS:',error);
callback(error);
}else{
callback(null,true);
}
}
});
if(counter>99999){
counter = 0;
}
}
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment