首页 新闻 赞助 找找看

银行接口Post方式提交,xml怎么直接通过post提交?

0
悬赏园豆:5 [待解决问题]

XML模板

XMLModel.xml

<?xml version="1.0" encoding="GBK"?>
<stream>
  <B2CCERTNO>500001</B2CCERTNO>
  <ORDERMODE>01</ORDERMODE>
  <ORDERDATE></ORDERDATE>
  <ORDERTIME></ORDERTIME>
  <ORDERNO></ORDERNO>
  <CURRID>01</CURRID>
  <ORDERAMT></ORDERAMT>
  <MEMO>充值支付</MEMO>
  <NOTIFYMODE>01</NOTIFYMODE>
  <NOTIFYURL>https://abc.com/notify</NOTIFYURL>
    <RISKLEVEL>00</RISKLEVEL>
  <SUPPTCARDTYPE>00</SUPPTCARDTYPE>
  <TTL></TTL>
  <MEMBERID></MEMBERID>
  <NOTIFYSCOPE></NOTIFYSCOPE>
  <ISSAFEINF></ISSAFEINF>
  <REFERER></REFERER>
  <list name="OrderListQue">
    <row>
      <PRODUCTNAME></PRODUCTNAME>
      <PRODUCTCODE></PRODUCTCODE>
      <QUANTITY></QUANTITY>
      <SUBTOTAL></SUBTOTAL>
      <TERM></TERM>
      <NOTE></NOTE>
    </row>
  </list>
</stream>


主程序

        /// <summary>
        /// 获取提交参数、XML模板、提交到银行
        /// </summary>
        public void SubXmlPost(string OrderNo,string OrderRamt)
        {
            //获取XML模板
            XmlDataDocument xmlDoc = new XmlDataDocument();
            xmlDoc.Load(Server.MapPath("XMLModel.xml"));

            //修正XML信息
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("stream").ChildNodes;//获取stream节点下的所有子节点
            foreach(XmlNode xn in nodeList)
            {
                XmlElement xe = (XmlElement)xn;
                //填充订单日期
                if (xe.Name == "ORDERDATE")
                {
                    xe.InnerText = DateTime.Now.ToString("yyyy-MM-dd");
                }

                //填充订单时间
                if (xe.Name == "ORDERTIME")
                {
                    xe.InnerText = DateTime.Now.ToString("hh:mm:ss");
                }

                //订单编号
                if (xe.Name == "ORDERNO")
                {
                    xe.InnerText = OrderNo.ToString();
                }

                //订单金额
                if (xe.Name == "ORDERAMT")
                {
                    xe.InnerText = OrderRamt.ToString();
                }
            }

            //发送到银行
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://ec.test.bank.ecitic.com/pec/e3rdplaceorder.do");
            req.Method = "POST";
            //设置 Content-type HTTP 标头的值
            //req.ContentType = "text/xml";// "application/x-www-form-urlencoded;charset=gb2312";


            using (StreamWriter SubWri = new StreamWriter(req.GetRequestStream()))
            {
                StreamReader reader = new StreamReader(xmlDoc);
                string ret = xmlDoc.
                    //这里就有问题了,xmlDoc是一个XmlDataDocument,我要怎么把一个XmlDataDocument直接通过POST的方式传输出去?
                    //我本来想把xmlDoc放到StreamReader里面然后在变成string,再通过WriteLine出去,然是放不进去,希望指教



                SubWri.WriteLine(ret);
                

            }
        }

这里就有问题了,xmlDoc是一个XmlDataDocument,我要怎么把一个XmlDataDocument直接通过POST的方式传输出去?

我本来想把xmlDoc放到StreamReader里面然后在变成string,再通过WriteLine出去,然是放不进去,希望指教

适渊的主页 适渊 | 初学一级 | 园豆:2
提问于:2013-08-14 14:51
< >
分享
所有回答(5)
0

http://msdn.microsoft.com/zh-cn/library/system.xml.xmldocument.writeto(v=vs.80).aspx

注意创建 XmlTextWriter 时指定的 Encoding 一定要同 Request 的 Content-type 一样,最好都为 UTF-8 。

Launcher | 园豆:45045 (高人七级) | 2013-08-14 15:01
0

把xml作为string(注意要URL编码),然后post过去就可以了

 

去了解一下HTTP协议中的POST原理,问题就迎刃而解了

 

http://www.verykim.com/

Jxj | 园豆:21 (初学一级) | 2013-08-14 15:07
0

Post提交到特定的地址,应该不是要你直接把xml提交吧, 而是把xml中的数据提交就行了。

Albert Fei | 园豆:2102 (老鸟四级) | 2013-08-14 16:01
0

转换为字符串,然后通过body进行post

dudu | 园豆:31075 (高人七级) | 2013-08-14 16:42
0

路过学习

panjk | 园豆:712 (小虾三级) | 2013-08-15 09:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册