读书人

怎么在asp网站上实现手机短信功能

发布时间: 2012-02-10 21:27:41 作者: rapoo

如何在asp网站上实现手机短信功能?
现在有移动提供的短信接口参数,象这样:

网关IP地址:101.102.103.104
企业号码:9123456
接入码:01234
用户名:111111
密码:111111
上行端口:7910
下行端口:7890

请问如果利用这些参数实现网站发送手机短信的功能?是不是要自己开发接口实现CMPP协议?如何通过socket登陆到短信网关?
之前没有做过类似的接口,请做过的朋友指点一下思路,或者提供个例子,非常感谢!

顶者有分!谢谢关注!




[解决办法]
谁提供你这些参数的,都会提供接口文档的
[解决办法]
没弄过,帮顶
[解决办法]
这个...

你必须得咨询提供接口的人.
[解决办法]
难道没提供返回参数的相关文档吗?
做过ASP收发短信的站,但是不像这样只提供如果简单的参数。

我做过的站是短信网关提供一个URL地址以及相关参数的说明文档,
然后向URL地址POST相关的数据,并得到返回XML字符串,分析此XML得到发送结果。

[解决办法]
没有做过,关注,帮顶
[解决办法]
没做过,帮顶.
[解决办法]
移动应该会有服务的
一般他们都会提供详细的文档,甚至asp程序给你使用的
[解决办法]
找他们要例子。
肯定有接口的例子
[解决办法]
需要他们提供一个COM组件或DLL文件,参照相应的开发文档进行二次开发!
[解决办法]
短信业务那去询问应该会有个答案的
[解决办法]
这样太麻烦了吧.自己买个短信猫。方便简单.www.xhsms.com
免费测试平台sms.xhsms.com
[解决办法]
TQ

[解决办法]
CMPP提供了基于TCP的长连接接口和短连接接口标准
你去研究下这个标准先 根据这个组包发到对应ip上试试看效果 和返回包内容 再慢慢来解析吧!
[解决办法]
华为cmpp协议短信网关Delphi源码
asp实现起来小有难度
[解决办法]
难度 1 asp调用socket组件发包的功能
2 具体的协议内容解析
[解决办法]
up
[解决办法]
不了解,帮顶一下
[解决办法]
我正准备做的站是短信网关提供一个URL地址以及相关参数的说明文档.
移动跟短信网关合作
[解决办法]
ASP如果借用COM可以完成发送的功能,但是短信回执/用户发送的短信就无法接收了,这需要在自己的服务器上监听一个端口来接收数据包,一般这个流程是用C/JAVA/DELPHI/VB开发的,这个程序就叫短信网关,CMPP有两个重要流程:手机发送信息给SP叫做MO,SP发送信息给手机叫MT
一般业务逻辑是这样的:
1、手机发送信息-移动-SP短信网关-数据库中的MO表
2、业务程序监视MO表,有数据则处理,处理结果写入MT表-SP短信网关监听MT表,有数据则处理-移动-手机
这两个流程用数据库做中间件,不要强行用VC或者VB开发一个组件供ASP发送短信用,接送和发送短信都交给短信网关处理,二次开发只需要处理数据库就可以
短信网关现在N多,随便找一个能用就行,以前写过这方面的程序,现在多年没做了,就没怎么关注,推荐去www.spforum.net,可以找到短信网关的,记得是有免费短信网关的,不知道现在还有没有
[解决办法]
呵呵,我公司以前做过这个项目!
有意就加我的QQ 174088941我可以帮你问问。。。

[解决办法]
up
[解决办法]
=======================================
ASP如果借用COM可以完成发送的功能,但是短信回执/用户发送的短信就无法接收了,这需要在自己的服务器上监听一个端口来接收数据包,一般这个流程是用C/JAVA/DELPHI/VB开发的,这个程序就叫短信网关,CMPP有两个重要流程:手机发送信息给SP叫做MO,SP发送信息给手机叫MT


一般业务逻辑是这样的:
1、手机发送信息-移动-SP短信网关-数据库中的MO表
2、业务程序监视MO表,有数据则处理,处理结果写入MT表-SP短信网关监听MT表,有数据则处理-移动-手机
这两个流程用数据库做中间件,不要强行用VC或者VB开发一个组件供ASP发送短信用,接送和发送短信都交给短信网关处理,二次开发只需要处理数据库就可以
短信网关现在N多,随便找一个能用就行,以前写过这方面的程序,现在多年没做了,就没怎么关注,推荐去www.spforum.net,可以找到短信网关的,记得是有免费短信网关的,不知道现在还有没有
===========================================================
大体上是这样的, 不过你这个架构不怎么高效, 属于初期的sp平台架构
比较高效的, 应该使用内存队列,收到mo之后,根据上行内容和目的号码, 根据业务路由做匹配, 分发到对应的业务处理流程, 由业务处理流程完成业务逻辑之后, 再返回mt, 然后再做计费等处理, 还有记录日志, 便于日后统计收入。
计费考虑: 1,如何区分每个合作伙伴的收入;2,如何区分每个业务的收入



[解决办法]
楼上几位大哥都已经说得很清楚了,所谓ASP短信网站,ASP只是读读写写数据库而已,具体短信端口监听还是得靠应用程序实现

一般移动是有DLL提供的,你问过没有吗?没有的话只能谷歌一下了....再找不到的话,EMAIL给我(tide@zjjs.net)我这应该有,呵呵
[解决办法]
我的信誉值怎么这么低呢? 怎样才能提高信誉值啊?
[解决办法]
up
[解决办法]
tO:alexlee002(什么都不会ing)
那是因为你不结贴..
asp可以实现的..不过要找个短信平台..
[解决办法]
好高深啊~~~~~~~~~~
汗、、
学习!!
[解决办法]
JF 顶!
[解决办法]
再顶!
[解决办法]
再顶顶!
[解决办法]
帮顶

高深中ing...

等科技发达后,没这么复杂,我也整个放网上!
[解决办法]
改写为M$的在ASP中使用,同时我也不打算做一个单独的服务,我想知道如何直接把消息发送到ISMG,其他的需求暂时没有。
-------------------------------------------------------
不做成一个单独的服务应该是不太可能的,
最起码你要开一个端口监听上行信息啊,
否则你怎么接收mo?
[解决办法]
高深中ing...

等科技发达后,没这么复杂,我也整个放网上!

-----------------------------------------
一点都不高深, 过段时间有空, 我把我的通用平台(支持四大运营商)放到网上让下载(可以提供部分源代码, 完整源代码恕不提供^_^)
[解决办法]
学习一下
[解决办法]
直接在 http://www.tosms.cn 去申请一个会员,然后里面有个地址,把地址做到你网站上就可以发了
[解决办法]
直接在 http://www.tosms.cn 去申请一个会员,然后里面有个地址,把地址做到你网站上就可以发了

-----------------------------------
这应该是一个企业短信通道, 估计也LZ的需求也满足,

楼主可以不用自己开发了, 直接用这个就可以,不过可能需要交钱吧
[解决办法]
用.net可以方便实现吗?随便问问.关注中
[解决办法]
移动提供的网关IP和上行端口是干什么的?
------------------------------------------
无论上行和下行, 都是移动做server, 你做client,
上行也是, 你去连接移动的上行端口, 建立一个socket长连接, 或者不停的建立短连接来接受上行


用.net可以方便实现吗?随便问问.关注中
---------------------------------------
可以
[解决办法]
哪样太麻烦了,如果你的短信量不大,可以建立自己的短信服务器,买一个设备就可以
www.xhsms.com
我们提供软件与硬件.
[解决办法]
帮你顶!

[解决办法]
能否写段支持移动的样例代码在这里?非常感谢~
-----------------------------------------------
协议解析不难, 因为都是字节流解析的,


比如你把从socket里读取到的数据, 都放到一个 byte数组里边,
然后就按照cmpp协议, 从这个byte数组里边取出你需要的数据,
举个例子, 比如(仅仅是举例, 我手头没有cmpp协议, 我也记不清楚了)
按照协议, deliverRequest里边, 第10到21个字节, 是用户手机号(SrctermID),那么

byte[] mobuffer;
// read bytes from socket into mobuffer;
......
byte[] srctermidByte;
System.arraycopy(mobuffer, 10, srctermidByte, 0, 11);
String srctermid = new String(srctermidByte);
System.out.println( "用户的手机号: "+srctermid);
[解决办法]
我建议你还是用.net或者其他语言比如c++, java等, 写一个简单的网关, 用于接收mo, 状态报告, 下发mt等,
比较简单的实现, 就像楼上说的, 把上行插入数据库, 然后你的asp程序去扫描这个表,把返回的下行插入下行表, 你的网关去扫描看看有没有下行需要发送,

用.net/java实现socket链接比较容易,你建立一个链接之后, 先发送一个登录包,如果收到成功响应, 那么这个链接就建立了, 你用一个后台线程, 每隔几秒发一个test包来维持这个链接就可以

[解决办法]
呵呵,不用谢我

把分给我就行^_^
[解决办法]
最简单的方法:
调用网上的短信web service ,新浪,SOHU记得都有,网上搜索一下,这个方法优点是没有其它成本,但是你的短信服务器必须一直在网上才行。
[解决办法]
另外本地开发需要SP申请,他们会给文档

下面有参考代码

<title> HTTP开发接口测试页面 </title>
<style type= "text/css ">
<!--
.style1 {font-size: 12px}
.style2 {color: #FF0000}
-->
</style>
<div align= "center "> 短信易HTTP开发接口测试页面 </div>
<form action= "Sendsms.asp " method= "post " name= "f_Send " id= "f_Send ">
<div align= "center ">
<table width= "52% " border= "1 " cellpadding= "3 " cellspacing= "0 ">
<tr>
<td height= "24 " colspan= "2 " align= "left " valign= "middle " class= "style1 ">
<span class= "style2 "> Sendsms.asp (发送短信) </span> </td>
</tr>
<tr>
<td height= "29 " align= "right " valign= "middle " class= "style1 "> 企业代码 </td>
<td align= "left " valign= "middle " class= "style1 "> <input value= "3251751800 " name= "sFinCode " type= "text " id= "sFinCode "

size= "18 " maxlength= "16 "> </td>
</tr>
<tr>
<td height= "27 " align= "right " valign= "middle " class= "style1 "> 密码 </td>
<td align= "left " valign= "middle " class= "style1 "> <input value= "rxfrxf " name= "sRnd " type= "text " id= "sRnd " size= "10 "

maxlength= "10 "> </td>
</tr>

<tr>
<td height= "25 " align= "right " valign= "middle " class= "style1 "> 企业手机号码 </td>
<td align= "left " valign= "middle " class= "style1 "> <input name= "sDestTermID " type= "text " id= "sDestTermID " size= "30 "

maxlength= "30 "> </td>
</tr>
<tr>
<td height= "25 " align= "right " valign= "middle " class= "style1 "> 企业手机子号码 </td>
<td align= "left " valign= "middle " class= "style1 "> <input name= "sSubNumber " type= "text " id= "sSubNumber " size= "30 "

maxlength= "30 "> </td>


</tr>
<tr>
<td height= "25 " align= "right " valign= "middle " class= "style1 "> 定时发送时间 </td>
<td align= "left " valign= "middle " class= "style1 "> <input name= "sSendTime " type= "text " id= "sSendTime " size= "20 "

maxlength= "20 ">
(时间格式:2006-01-01 12:00:00) </td>
</tr>
<tr>
<td width= "20% " height= "39 " align= "right " valign= "middle " class= "style1 "> 内容 </td>
<td width= "80% " align= "left " valign= "middle " class= "style1 "> <textarea name= "sMsgContent " cols= "30 " rows= "6 "

id= "sMsgContent "> </textarea> </td>
</tr>
<tr align= "center ">
<td height= "38 " colspan= "2 " valign= "middle " class= "style1 "> <input type= "submit " name= "Submit " value= "提交 "> </td>
</tr>
</table>
</div>
</form>

Sendsms.asp

<%
'Option Explicit
Dim objHttpRequest 'XML文档对象


'根据参数,生成调用URL,因为是测试例子,不对变量为空的情况做处理
URL = "http://219.238.239.179:8008/webservice/etoneservice.asmx?sFinCode= "&request( "sFinCode ")& "&sRnd= "&request( "sRnd ")

& "&sSubNumber= "&request( "sSubNumber ")& "&sDestTermID= "&request( "sDestTermID ")& "&sSendTime= "&request( "sSendTime ")

& "&sMsgContent= "&Server.URLEncode(request( "sMsgContent "))


'调用MSXML,发送请求
set objHttpRequest = CreateObject( "MSXML2.ServerXMLHTTP " )

if objHttpRequest is Nothing Then
'返回错误
response.write "create Msxl2.ServerXMLHTTP error "
response.end
end if


'发出请求
objHttpRequest.open "GET ",URL,False
objHttpRequest.send()
if objHttpRequest.status <> 200 then
'返回错误
response.write "Open Request Error "
response.end
end if

'取返回信息,并且分析
retMsg = objHttpRequest.responseText

Ret = left(retMsg,InStr(retMsg, ", ")-1)
iRet = Cint(Ret)

if Ret> 0 then '判断是否发送成功
SendID = right(retMsg,len(retMsg)-InStr(retMsg, ", "))
response.write "发送短信成功,SmsID: "&SendID
else
response.write "发送短信失败,错误代码: "&iRet
end if

'释放资源
Set objHttpRequest = Nothing


%>


xml格式定义:
<?xml version= "1.0 " encoding= "utf-8 " ?>
<SmsStateReport>
<ErrorNumber> </ErrorNumber>
<ErrorDescription> </ErrorDescription>
<SendReport>
<SuccessNum> </SuccessNum>
<SendFaildNum> </SendFaildNum>
<MoneyRemain> </MoneyRemain>
</SendReport>
</SmsStateReport>

[解决办法]
请用C++写一个封装的DLL,写一个很简单,为的是SOCKET发送.
REGSVR32后再用SERVER.CREATEOBJECT来发送.

如CMPP的CONNECT消息,参数为你的用户名和密码,当然地址是要他们提供的:
void Ccmpp_API::CmppConnect(const char *UserName, const char *PWD)
{
char netbuf[100];
CMPP_CONNECT *bufer;


bufer=(CMPP_CONNECT*)netbuf;
memset(bufer, 0, 100);
bufer-> nTotalLength = htonl(39);//CMPP_CONNECT消息总长度
bufer-> nCommandId = htonl(CMPP_CONNECT_tag);//消息标志
//自动产生SeqId号
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}else{
sequenceid++;
}
bufer-> nSeqId = htonl(sequenceid);

int MD5Len;
MD5_CTX md5;//MD5源字串
CTime TimeData = CTime::GetCurrentTime();
CString timestamp = TimeData.Format( "%m%d%H%M%S ");
unsigned char md5source[29];
int Len1 = strlen(UserName);
int Len2 = strlen(PWD);
MD5Len = Len1 + 9 +Len2 + timestamp.GetLength();
memset(md5source, 0, MD5Len);

memcpy(bufer-> sSourceAddr, UserName, Len1);
memcpy(md5source, UserName, Len1);

for (int j = 0; j <Len2; j++)
{
md5source[j + Len1 + 9] = PWD[j];
}
for (int i=0;i <timestamp.GetLength();i++)
{
md5source[i + Len2 + Len1 + 9]=timestamp[i];
}

//进行md5加密转换
md5.MD5Update(md5source, MD5Len);
md5.MD5Final(md5source);
memcpy(bufer-> sAuthSource, md5source, 29);
bufer-> cVersion = 0x30;
bufer-> nTimeStamp = htonl(atoi(timestamp));
CmppSocket.Send(bufer, 39, 0);//把消息打包发送
return;
}

读书人网 >ASP

热点推荐