- 博客(0)
- 资源 (5)
- 收藏
- 关注
C++实现56dxw短信验证码WebService接口--
C++实现56dxw短信验证码WebService接口。
编译工具gsoap-2.8.zip 因为长名字关系,请到根目录解压后再拷贝进来,直接解压可能会解压报错。
用VS.NET2003 开发游戏程序的时候,有一个登录功能模块,需要短信验证码。
56短信网有两种接口,一是HTTP,二是 Web Service。
短信验证码,采用HTTP接口,在客户端发送是不实际的,因为一是受制于客户端网络稳定性,二是容易被客户端拦截URL,
三是被拦截后,容易泄漏56短信网的帐号密码,导致被盗用,产生不安全因素。
服务端采用HTTP接口,也不是很好,服务端连接众多客户端,压力很大,如何有效执行URL和如何得到返回值都是问题。
服务端毕竟不是网站,需要及时有效响应。
因此,采用 服务端 + Web Service 方案很有必要。
其实,Web Service是什么,之前我也不懂,翻阅了大量百度后,知道SOAP这个东西来实现。
非常感谢这篇文章 http://hi.baidu.com/winnyang/blog/item/1138fad9bfac1be338012fdf.html
现在把我C++写的例子实现简单介绍下,与大家共享:
1、下载工具gsoap-2.8。gsoap是个好工具,包装了SOAP到C++的实现,不需要我们再辛苦。(例子中附带这个工具)
gsoap-2.8.zip 因为长名字关系,请到根目录解压后再拷贝进来,直接解压可能会解压报错。
2、我例子目录下面有个文件夹gsoap,里面 soapcpp2.exe、wsdl2h.exe 、wsmap.dat、gsoap.bat、stdsoap2.h、stdsoap2.cpp
这几个文件不要删除。
其它文件可以删除,通过执行gsoap.bat重新生成。
3、执行gsoap.bat生成文件。
gsoap.bat内容:
wsdl2h.exe -o 56dxw_webservice.h -t wsmap.dat -e http://jiekou.56dxw.com/WebServiceInterface.asmx?wsdl
soapcpp2 -i -C -x 56dxw_webservice.h -I ..\gsoap-2.8\gsoap\import
del /s /f /q WebServiceInterfaceSoap.nsmap.cpp
rename WebServiceInterfaceSoap.nsmap WebServiceInterfaceSoap.nsmap.cpp
各参数意义稍微解释(网上复制):
-t 定义std:string到C++中的字符串转化规则,
当前例子采用UNIOCDE编码编译,请在wsmap.dat 中加上 xsd__string = | std::wstring | std::wstring* 这句话
-o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
4、创建VS.NET2003对话框例子
(1)设置项目属性 设置 不使用预编译头 和 使用 Unicode 字符集(是否使用UNICODE根据项目实际情况,只要注意字符串转换)
(2)项目中添加以下文件:注意,这些文件都是通过gsoap自动生成,无须修改。
stdsoap2.cpp
stdsoap2.h
soapC.cpp
soapH.h
WebServiceInterfaceSoap.nsmap.cpp
soapWebServiceInterfaceSoapProxy.cpp
soapWebServiceInterfaceSoapProxy.h
(3)在对话框.h文件中 添加
#include "gsoap/soapWebServiceInterfaceSoapProxy.h"
using namespace std;
(4)在对话框.cpp文件中 添加
void Ctest2Dlg::OnBnClickedButton1()
{
#ifdef _UNICODE
#define tstring wstring
#else
#define tstring string
#endif
WebServiceInterfaceSoapProxy gs;
_ns1__SendNote SendSms;
_ns1__SendNoteResponse Resp;
CString str;
GetDlgItemText(IDC_EDIT3,str);
tstring handtels(str);
tstring content(TEXT("验证码内容"));
GetDlgItemText(IDC_EDIT1,str);
tstring userName(str); //请测试人员此处直接输入用户名和密码
GetDlgItemText(IDC_EDIT2,str);
tstring password(str);
tstring cid(TEXT("713"));
tstring sendtime(TEXT(""));
tstring smsnumber(TEXT("1061"));
SendSms.handtels = &handtels;
SendSms._USCOREcontent = &content;
SendSms.userName = &userName;
SendSms.password = &password;
SendSms.cid = &cid;
SendSms._USCOREsendtime = &sendtime;
SendSms._USCOREsmsnumber = &smsnumber;
if(gs.SendNote(&SendSms;, &Resp;) == SOAP_OK)
{
int nReturn = Resp.SendNoteResult;
switch( nReturn )
{
case 1:str.Format(TEXT("发送成功"));break;
case -1:str.Format(TEXT("用户名密码不正确"));break;
case -2:str.Format(TEXT("内容不能大于70个字"));break;
case -3:str.Format(TEXT("验证此平台是否存在"));break;
case -4:str.Format(TEXT("提交号码不能为空或客户余额为0"));break;
case -5:str.Format(TEXT("客户剩余条数不够要发送的短信数量"));break;
case -6:str.Format(TEXT("非法短信内容"));break;
case -7:str.Format(TEXT("返回系统故障"));break;
case -8:str.Format(TEXT("网络性错误,请稍后再试"));break;
default:str.Format(TEXT("未知错误"));break;
}
AfxMessageBox(str);
}
}
2012-07-23
C++实现56dxw短信验证码WebService接口
C++实现56dxw短信验证码WebService接口。
包含了工具gsoap-2.8。
gsoap-2.8.zip有长名字,因此请复制到根目录下再解压。
2012-07-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅