zoukankan      html  css  js  c++  java
  • 通过http Post XML文件的接口 (System.Web.IHttpHandler)

    //httppost.cs  文件内容(放入App_code里面)
    public class httppost : System.Web.IHttpHandler
    {
        private string mobile;//手机号
        private string amount;//交易金额
        private string user;//用户
        private string orderNo;//订单号
        private string payType;// '0' - 话费支付 '1' - 移动电子账户支付
        private string trxType;//交易类型
        string nowTime;

        public http_SpPay()
        {
        }
        public void ProcessRequest(HttpContext context)
        {
            HttpRequest Request = context.Request;
            Stream content = Request.InputStream;
            StreamReader sr = new StreamReader(content);
            string resStr = sr.ReadToEnd();
            sr.Close();
            content.Close();
            string clientIP = GetUserIP(Request);
           
            if (ReadReceiveXml(resStr))//读取接受报文
            {
                SpPay pay = new SpPay();
                if (PaySend(pay,clientIP, mobile, amount, orderNo, trxType, payType))
                {
                    ReturnTo("<?xml version='1.0' encoding='gb2312'?><cmts>" +
                        "<UserMobile>" + mobile + "</UserMobile>" +
                        "<Amount>" + amount + "</Amount>" +
                        "<OrderNo>" + orderNo + "</OrderNo>" +
                        "<ResultCode>0</ResultCode>" +
                        "<ResultCodeInfo>扣费成功</ResultCodeInfo>" +
                        "</cmts>", context);
                }
                else
                {
                    ReturnTo("<?xml version='1.0' encoding='gb2312'?><cmts>" +
                        "<UserMobile>" + mobile + "</UserMobile>" +
                        "<Amount>" + amount + "</Amount>" +
                        "<OrderNo>" + orderNo + "</OrderNo>" +
                        "<ResultCode>" + pay.ResultCode + "</ResultCode>" +
                        "<ResultCodeInfo>" + pay.ErroString + "</ResultCodeInfo>" +
                        "</cmts>", context);
                }
                pay = null;
            }
            else
            {
                ReturnTo("<?xml version='1.0' encoding='gb2312'?><cmts>" +
                    "<ResultCode>2</ResultCode>" +
                    "<ResultCodeInfo>报文错误</ResultCodeInfo>" +
                    "</cmts>", context);
            }
           
        }

        public bool IsReusable
        {
            get { return false; }
        }

        //取客户端IP
        public string GetUserIP(HttpRequest Request)
        {
            string userIP;
            if (Request.ServerVariables["HTTP_VIA"] == null)
            {
                userIP = Request.UserHostAddress;
            }
            else
            {
                userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            }
            return userIP;
        }


        #region 即时返回
        private void ReturnTo(string content, HttpContext context)
        {
            HttpResponse Response = context.Response;
            Response.Write(content);
        }
        #endregion

        #region 读取post内容  读取xml
        private bool ReadReceiveXml(string receiveXml)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(new StringReader(receiveXml));  // 装入指定的XML文档
                XmlNodeList elemList = doc.GetElementsByTagName("xml");
                XmlNodeList subelemList;

                XmlElement elem = (XmlElement)elemList[0];
                subelemList = elem.GetElementsByTagName("UserMobile");
                mobile = subelemList[0].InnerText;
                subelemList = elem.GetElementsByTagName("Amount");
                amount = subelemList[0].InnerText;
                subelemList = elem.GetElementsByTagName("user");
                user = subelemList[0].InnerText;

                subelemList = elem.GetElementsByTagName("OrderNo");
                orderNo = subelemList[0].InnerText;
                subelemList = elem.GetElementsByTagName("PayType");
                payType = subelemList[0].InnerText;
                subelemList = elem.GetElementsByTagName("TrxType");
                trxType = subelemList[0].InnerText;
            }
            catch
            {
                return false;
            }
            return true;
        }
        #endregion

        #region 支付方法
        private bool PaySend(SpPay pay,string clientIP, string userMobile, string amount, string orderNo, string trxType, string payType)
        {
            nowTime = Convert.ToString(DateTime.Now.Year) + String.Format("{0:00}", Int32.Parse(Convert.ToString(DateTime.Now.Month))) + String.Format("{0:00}", Int32.Parse(Convert.ToString(DateTime.Now.Day)))
            + String.Format("{0:00}", Int32.Parse(Convert.ToString(DateTime.Now.Hour))) + String.Format("{0:00}", Int32.Parse(Convert.ToString(DateTime.Now.Minute))) + String.Format("{0:00}", Int32.Parse(Convert.ToString(DateTime.Now.Second)));;//'SP交易时间:年月日时分 秒:20030420233020
            return (bool));
        }
        #endregion
    }

    //webconfig配置
    </system.web>
    <httpHandlers>
     <add verb="*" path="httppost.cmts" type="httppost"/>
    </httpHandlers>
    </system.web>

    //IIS配置
    网站属性--〉主目录 --〉配置 -->添加 --〉浏览这个文件(aspnet_isapi.dll)--〉扩展名(cmts) --〉确定

  • 相关阅读:
    [转]SVN服务器搭建和使用(二)
    [转]SVN服务器搭建和使用(一)
    BZOJ 2049 Sdoi2008 Cave 洞穴勘测
    BZOJ 1589 Usaco2008 Dec Trick or Treat on the Farm 采集糖果
    BZOJ 2796 POI2012 Fibonacci Representation
    BZOJ 2115 Wc2011 Xor
    BZOJ 3105 CQOI2013 新Nim游戏
    BZOJ 2460 Beijing2011 元素
    BZOJ 3687 简单题
    BZOJ 1068 SCOI2008 压缩
  • 原文地址:https://www.cnblogs.com/ChengDong/p/2567443.html
Copyright © 2011-2022 走看看