当前位置: 首页 > 短信SDK > VC短信SDK
VC短信SDK
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.entinfo.cn: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.entinfo.cn:8060/webservice.asmx?op=balance
示例:序列号SDK-SSD-010-00001 密码 xxxxxx
参数输入:
SN= SDK-SSD-010-00001
PWD= 3B5D3C427365F40C1D27682D78BB31E0
示例返回结果: 余额79109条短信
XML格式:
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.entinfo.cn: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.entinfo.cn: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.entinfo.cn:8060/webservice.asmx (一般调用)
多线程接口地址:http://sdk.entinfo.cn: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.entinfo.cn:8060/webservice.asmx
地址2:http://sdk2.entinfo.cn:8060/webservice.asmx
这些地址都是标准的webservice地址,C#,Java客户可以按照自己熟悉的方式去解析String
或者
地址1:http://sdk.entinfo.cn:8060/webservice.asmx?wsdl
地址2:http://sdk2.entinfo.cn:8060/webservice.asmx?wsdl
八、示例Demo源代码下载: