短信SDK

当前位置: 首页 > 短信SDK > VC短信SDK
VC短信SDK

一、短信SDK初始化CWebInterface
	CWebInterface::CWebInterface(CString   &strSN,CString   &strPwd)
{
	m_pEndpoint =NULL;
	m_pSN = UnicodeToUTF8(strSN);

	CString strMD5Source = strSN + strPwd;
	char *pMD5Source =UnicodeToANSI(strMD5Source);

	char szMD5Code[64]={0};
	MD5Memory(pMD5Source,strlen(pMD5Source),szMD5Code,64);	
	strupr(szMD5Code);
	free(pMD5Source);
	m_pMd5 =(char*)malloc(33);
	memcpy(m_pMd5,szMD5Code,33);
	m_WebService.soap->recv_timeout =150; //秒
	m_WebService.soap->send_timeout =150;
	m_WebService.endpoint = "http://sdk.leiyusoft.com:8060/webservice.asmx";//赋个初始值,防止从配置文件读取服务器地址失败时访问不了服务器
	if(strlen(g_pEndpoint) >0)
	{
		m_WebService.endpoint=g_pEndpoint;
	}

	soap_set_mode(m_WebService.soap, SOAP_C_UTFSTRING); //设置编码为UTF8.SDK说明文档上说使用gb2312,但实测必须用utf8.
}
	
二、切换主备服务器SetWebsAddress(char *pszAddr)
	 void CWebInterface::SetWebsAddress(char *pszAddr)//切换主备服务器
{
	if (!pszAddr) return;

	if (m_pEndpoint) free(m_pEndpoint);

	int nLen =strlen(pszAddr)+1;
	m_pEndpoint = (char*)malloc(nLen);
	ZeroMemory(m_pEndpoint,nLen);
	strcpy(m_pEndpoint,pszAddr);
	m_WebService.endpoint =m_pEndpoint;
}

三、查询账户余额GetBalance()

参数名称

说明

备注

Sn

软件序列号

格式XXX-XXX-XXX-XXXXX

Pwd

密码

md5(sn+password) 32位大写 密文 +表示连接

函数返回值:String(余额)

接口地址:http://sdk.leiyusoft.com:8060/webservice.asmx?op=balance

示例:序列号SDK-SSD-010-00001 密码 xxxxxx

参数输入:

SN= SDK-SSD-010-00001

PWD= 3B5D3C427365F40C1D27682D78BB31E0

示例返回结果: 余额79109条短信

XML格式:

具体函数C++实现:
	int CWebInterface::GetBalance()
{
	_ns1__balance  param1;
	_ns1__balanceResponse  WebsResult;
	
	param1.sn = m_pSN;
	param1.pwd =m_pMd5;
	SetTimeout(30);
	int nRet =m_WebService.__ns2__balance(¶m1,&WebsResult);	
	if (nRet)
	{
		if (g_bHaveChange)//已经切换成备用地址,此时主备都不通,返回查询失败
		{
			return WEBS_RET_FAIL;
		}
		else
		{
			for(int i=0;i<=g_nFailedCount;i++)
			{
				nRet =m_WebService.__ns2__balance(¶m1,&WebsResult);
				if (!nRet)
				{
					break;
				}
			}
			if (nRet)
			{						
				SetWebsAddress(g_pBackupEndpoint);//切换到备用地址				
				char szTmp[512];
				strcpy(g_pEndpoint,g_pBackupEndpoint);
				g_bHaveChange = true;	
				AfxMessageBox("主地址不通,已经自动切换到备用地址,请检查您的网络,如仍有问题请联系我们!");
				nRet =m_WebService.__ns2__balance(¶m1,&WebsResult);	
				if (nRet)
				{
					return WEBS_RET_FAIL;
				}
			}
		}
	}
	int nSvrRet =atoi(WebsResult.balanceResult);
	if ( nSvrRet < WEBS_RET_OK)
	{
		return  WEBS_RET_FAIL;
	}
	return  nSvrRet;
}  
	

四、发送普通短信函数SendSMS(char *pPhoneList,CString strContent,CString sttime,CString ext_)

参数名称

说明

是否必须   

备注

Sn

软件序列号

格式XXX-XXX-XXX-XXXXX

Pwd

密码

md5(sn+password) 32位大写密文

Mobile

手机号

必填(支持10000个手机号,建议<=5000)多个英文逗号隔开

Content

内容

支持长短信(详细请看长短信扣费说明)

Ext

扩展码

例如:123(默认置空)

stime

定时时间

例如:2010-12-29 16:27:03(非定时置空)

Rrid

唯一标识

最长18位,只能是数字或者 字母 或者数字+字母的组合

函数返回值:String(唯一标识,即当前发送短信批次的唯一标识,和rrid对应,如为空则返回系统生成的rrid),此方法推荐用于大量群发.内容相同手机号多个的情况。

接口地址:http://sdk.leiyusoft.com:8060/webservice.asmx?op=mt

示例1

SN= SDK-SSD-010-00001

PWD=3B5D3C427365F40C1D27682D78BB31E0

Mobile:139***404,138***213…………….

Content:测试

Ext: ""

Stime: ""

Rrid: ""

输出结果:

XML格式:

具体函数C++实现:

	int CWebInterface::SendSMS(char *pPhoneList,CString strContent,CString sttime,CString ext_)
 {
	 _ns1__mdSmsSend  param1;
	 _ns1__mdSmsSendResponse  WebsResult;

	 param1.sn = m_pSN;//账号
	 param1.pwd =m_pMd5;//密码
	 param1.mobile=pPhoneList;//短信	 	 
	 param1.content= UnicodeToUTF8(strContent); //发送内容:当你的WINDOWS为简体中文时,用CP_ACP,转换出来就是GBK.   
	 //如果不是简体中文,把CP_ACP用数字936替换,转换出来就是GBK. 
	 param1.ext=UnicodeToUTF8(ext_);
	 param1.rrid="";
	 param1.stime=UnicodeToUTF8(sttime);
	 SetTimeout(150);
	 int nRet =m_WebService.__ns2__mdSmsSend(¶m1,&WebsResult);//调用发送函数,进行发送
	  
	 free(param1.content);//释放发送内容
	
	 if (nRet)//如果发送失败的话。。。。。。
	 {
		 return WEBS_RET_FAIL;
	 }
	 char szResult[6]={0};
	 memcpy(szResult,WebsResult.mdSmsSendResult,5);//取得发送结果
	 int nSvrRet =atoi(szResult);//

	 if ( nSvrRet >= WEBS_RET_OK)
	 {
		 return WEBS_RET_OK;
	 }
	 return  WEBS_RET_FAIL;
 }
	

五、发送个性短信函数SendSMS_gxmt(char *pPhoneList,CString strContent,CString sttime,CString ext_)

参数名称

说明

是否必须   

备注

Sn

软件序列号

格式XXX-XXX-XXX-XXXXX

Pwd

密码

md5(sn+password)32位大写密文

Mobile

手机号

必填(建议一次最多提交1000个)

Content

内容

支持长短信(详细请看长短信扣费说明)

Ext

扩展码

例如:123(默认置空)

Stime

定时时间

例如: 2010-12-30 9:23:20(非定时置空)

Rrid

唯一标识

最长18位

函数返回值:String (唯一标识,即当前发送短信批次的唯一标识,和rrid对应,如为空则返回系统生成的rrid,此处的rrid和mt发送的rrid用法相同,此方法用于发送多条内容不相同手机号多个的情况)

接口地址:http://sdk.leiyusoft.com:8060/webservice.asmx?op=gxmt

需要注意:

1、手机号以英文逗号隔开

2、发送内容若含有小逗号,整条内容URLGB2312编码后,以英文逗号隔开,个数和手机号个数一致

3、扩展码可以为空,单个,或多个(以英文逗号隔开,个数和手机号个数一致)

4、定时时间可以为空,单个,或多个(以英文逗号隔开,个数和手机号个数一致)

返回结果:

XML格式:

示例1:

输入参数:

SN= SDK-SSD-010-00001

PWD=3B5D3C427365F40C1D27682D78BB31E0

Mobile:139***404,138***213

Content: %B2%E2%CA%D41, %B2%E2%CA%D42

Ext:(默认,请置空)

Stime: (如果不需要定时,请置空)

Rrid:此处为空(如果填写则系统返回填写内容)

输出结果:

XML格式:

具体函数C++实现:

	int CWebInterface::SendSMS_gxmt(char *pPhoneList,CString strContent,CString sttime,CString ext_)
 {
	 _ns1__gxmt param1;

	 _ns1__gxmtResponse  WebsResult;

	 param1.sn = m_pSN;//账号
	 param1.pwd =m_pMd5;//密码
	 param1.mobile=pPhoneList;//短信	 	 
	 param1.content= UnicodeToUTF8(strContent); //发送内容:当你的WINDOWS为简体中文时,用CP_ACP,转换出来就是GBK.   
	 //如果不是简体中文,把CP_ACP用数字936替换,转换出来就是GBK. 
	 param1.ext=UnicodeToUTF8(ext_);
	 param1.rrid="";
	 param1.stime=UnicodeToUTF8(sttime);
	 SetTimeout(150);
	 int nRet =m_WebService.__ns2__gxmt(¶m1,&WebsResult);//调用发送函数,进行发送
	  
	 free(param1.content);//释放发送内容
	
	 if (nRet)//如果发送失败的话。。。。。。
	 {
		 return WEBS_RET_FAIL;
	 }
	 char szResult[6]={0};
	 memcpy(szResult,WebsResult.gxmtResult,5);//取得发送结果
	 int nSvrRet =atoi(szResult);//

	 if ( nSvrRet >= WEBS_RET_OK)
	 {
		 return WEBS_RET_OK;
	 }
	 return  WEBS_RET_FAIL;

 }
	

六、webservice返回集合对照表:

返回值

返回值说明

问题描述

-2 

帐号/密码不正确

1.序列号未注册2.密码加密不正确3.密码已被修改4.序列号已注销

-4

余额不足支持本次发送(或者修改密码长度不正确)

余额不足(或者修改密码长度不在6位到10位之间)

-5

数据格式错误

只能自行调试了。或与技术支持联系

-6

参数有误

看参数传的是否均正常,请调试程序查看各参数

-7

权限受限

该序列号是否已经开通了调用该方法的权限

-8

流量控制错误

 

-9

扩展码权限错误

该序列号是否已经开通了扩展子号的权限,把ext这个参数置空。

-10

内容长度长

单字节不能超过1000个字符,双字节不能超过500个字符

-11

内部数据库错误

 

-12

序列号状态错误

序列号是否被禁用

-14

服务器写文件失败

 

-17

没有权限

如发送彩信仅限于SDK3

-19

禁止同时使用多个接口地址

每个序列号提交只能使用一个接口地址

-20

相同手机号,相同内容重复提交

 

-22

Ip鉴权失败

提交的IP不是所绑定的IP

-23

缓存无此序列号信息

 

-601

序列号为空,参数错误

 

-602

序列号格式错误,参数错误

 

-603

密码为空,参数错误

 

-604

手机号码为空,参数错误

 

-605

内容为空,参数错误

 

-606

ext长度大于9,参数错误

 

-607

参数错误 扩展码非数字 

 

-608

参数错误 定时时间非日期格式

 

-609

rrid长度大于18,参数错误 

 

-610

参数错误 rrid非数字

 

-611

参数错误 内容编码不符合规范

 

-623

手机个数与内容个数不匹配

 

-624

扩展个数与手机个数数

 

-644 

rrid个数与手机个数不一致

注:以上返回值针对个别方法.请具体参看每个用到方法的详细说明。

七、附加说明:

1.接口地址:

常用接口地址:http://sdk.leiyusoft.com:8060/webservice.asmx (一般调用)

多线程接口地址:http://sdk.leiyusoft.com:8061/webservice.asmx (java、andriod使用)

2.其它说明:

(1)开发使用的帐号必须为SDK开头,如SDK-SSD-010-00001,帐号第一次需要调用Register方法注册一次.仅需注册一次即可,信息必须真实

(2)UnRegister与Register配合使用, 连续使用不得超过10次/天;

(3)群发推荐使用接口方法 mt或者mdSmsSend (仅方法名不同);

3. 郑重声明:

(1)禁止相同的内容多个手机号连续一条一条提交. 否则禁用帐号,由此带来损失由客户自行负责.

(2)请客户提供外网服务器IP以便于绑定IP发送,提高账号的安全性!

(3)在程序里最好有配置文件,程序自动判断当某个接口连接超时提交速度变慢时.程序可以自动切换其它的接口以下是推荐的几个服务器,仅接口地址不同而已.方法全部相同;

地址1:http://sdk.leiyusoft.com:8060/webservice.asmx

地址2:http://sdk2.leiyusoft.com:8060/webservice.asmx

这些地址都是标准的webservice地址,C#,Java客户可以按照自己熟悉的方式去解析String   

或者

地址1:http://sdk.leiyusoft.com:8060/webservice.asmx?wsdl

地址2:http://sdk2.leiyusoft.com:8060/webservice.asmx?wsdl

八、VC示例Demo源代码下载:

DEMO(Post方式)  SDK通用版接口文档  所有下载