.net实现WAP PUSH

 WAP PUSH的发送是通过将一个PAP(PAP Push Access Server Push访问协议)信息包发送到PUSH代理网关(PPG),就可以实现WAP PUSH。如果PUSH代理网关(PPG)是基于HTTP实现的PAP协议,那么可以使用HTTP POST将PAP消息发送到PPG。
PAP消息一般包括三部分:控制实体、内容实体和能力实体
在多部分(multipart)消息中,控制实体包括所有相关的控制信息,内容实体包括发给无线设备的内容,能力实体则包括用户代理结构(USP ROF)格式的客户能力。
控制实体含有PAP单元的XML文档,每个PAP请求和响应中必须有控制实体。内容实体的类型可以是任何类型,只要它被多用途网际邮件扩充协议(MIME)描述过。内容实体仅包含在推送提交的消息中。能力实体包含PI假定的无线设备或用户代理的能力,如果不存在就按默认值确定无线设备或用户代理的能力。以下是PI(PI:PUSH Initiator 推送发起者)向PPG发送的SI消息,如果把内容实体改成SL的内容,则消息就成为SL消息。
Content-Type: multipart/related; type=application/xml; boundary=BOUNDARY

--BOUNDARY
Content-Type: application/xml; charset=UTF-8

<?xml version="1.0"?>
<!DOCTYPE pap PUBLIC "-//WAPFORUM//DTD PAP 1.0//EN" "http://www.wapforum.org/DTD/pap_1.0.dtd">
<pap>
<push-message push-id="20752/149/Openwave Push">
<address address-value="WAPPUSH=189000000/TYPE=PLMN@www.openwave.com"/>
</push-message>
</pap>
--BOUNDARY
Content-Type: text/vnd.wap.si; charset=UTF-8

<?xml version="1.0"?>
<!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN"
"http://www.wapforum.org/DTD/si.dtd">
<si>
<indication href="http://wap.baidu.com" action="signal-medium">
test
</indication>
</si>
--BOUNDARY—
采用.net提供的 HttpWebRequest类实现HTTP POST,将PAP消息发送的PPG。要将HTTP请求的ContentType属性设置为: multipart/related; type=application/xml; boundary=BOUNDARY,表示发送到HTTP请求包是一个multipart/related多结构包,其中boundary表示结构之间的边界分割线<address address-value=wappush=18600000001/type=PLMN@www.openwave.com />表示接受人的手机号码。<indication href="http://wap.baidu.com" action="signal-medium">表示PUSH的地址。

.net具体实现方法:
/// <summary>
    /// 发送wap push
    /// </summary>
    public class SendPush
    {
        private string strdata = "--WPL11woVbhESdfalYevGqpdzLCs/r/nContent-Type: application/xml; charset=UTF-8/r/n/r/n"
     +"<?xml version=/"1.0/"?><!DOCTYPE pap PUBLIC /"-//WAPFORUM//DTD PAP 1.0//EN/" /"http://www.wapforum.org/DTD/wml_1.1.xml/">"
     +"<pap><push-message push-id=/"{0}/">"
     +"<address address-value=/"wappush={1}/type=PLMN@www.openwave.com/" />"
     +"<quality-of-service network=/"GSM/" network-required=/"true/" bearer=/"SMS/" bearer-required=/"true/"/>"                      
     +"</push-message></pap>/r/n--WPL11woVbhESdfalYevGqpdzLCs/r/nContent-Type: text/vnd.wap.si; charset=UTF-8/r/n/r/n"
     +"<?xml version=/"1.0/"?><!DOCTYPE si PUBLIC /"-//WAPFORUM//DTD SI 1.0//EN/" /"http://www.wapforum.org/DTD/si.dtd/">"
     +"<si><indication href=/"{2}/" action=/"signal-medium/">/r/n{3}/r/n</indication></si>/r/n"
     +"--WPL11woVbhESdfalYevGqpdzLCs--";
        /// <summary>
        /// 发送wap push
        /// </summary>
        public SendPush()
        {
        }
        /// <summary>
        /// 发送基于Http协议的PAP wap push(无SAG)
        /// </summary>
        /// <param name="url">PPG地址</param>
        /// <param name="strCallerID">接受号码</param>
        /// <param name="strPushAddr">接受URL</param>
        /// <param name="strText">push标题</param>
        /// <returns>PPG返回结果</returns>
        public string getSend(string url, string strCallerID, string strPushAddr, string strText)
        {
            string ret;
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);
                myRequest.Method = "POST";
                myRequest.ContentType = "multipart/related; type=application/xml;boundary=WPL11woVbhESdfalYevGqpdzLCs";
                Random myRan = new Random();
                string strpush = string.Format(strdata, DateTime.Now.ToString("yyyyMMddmmhhss") + myRan.Next(9).ToString(), strCallerID, strPushAddr, strText);

                byte[] bytedate = Encoding.UTF8.GetBytes(strpush);

                ret = XmlhttpSend(myRequest, bytedate);
            }
            catch (Exception ex)
            {
                ret = ex.ToString();
            }
            return ret;
        }
        /// <summary>
        /// 发送push
        /// </summary>
        /// <param name="theRequest">http请求</param>
        /// <param name="papData">发送数据</param>
        /// <returns></returns>
        private string XmlhttpSend(HttpWebRequest theRequest, byte[] papData)
        {
            string ret = string.Empty;
            try
            {
                Stream requestStream = theRequest.GetRequestStream();
                requestStream.Write(papData, 0, papData.Length);
                requestStream.Close();

                HttpWebResponse response = (HttpWebResponse)theRequest.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                ret = sr.ReadToEnd();
                sr.Close();
            }
            catch(Exception ex)
            {
                ret = "error:"+ex.ToString();
                // throw;
            }
            return ret;
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值