C#动态生成XML

BookInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MyTest.Model
{   
    /// <summary>  
    /// 图书信息实体类  
    /// </summary>  
    public class BookInfo
    {
        public int BookId { set; get; }             //图书ID  
        public string Title { set; get; }           //图书名称  
        public string Category { set; get; }        //图书分类  
        public string Author { set; get; }          //图书作者  
        public DateTime PublishDate { set; get; }   //出版时间  
        public Double Price { set; get; }           //销售价格  
    }  

}

XmlHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Text;
using MyTest.Model;
using System.Xml;

namespace MyTest
{
    public class XmlHelper
    {
        #region 方法1:使用StringBuilder拼接XML
        /// <summary>  
        /// 创建图书信息XML,保存xml文件  
        /// </summary>  
        public void CreateBookXML(string fileName)
        {
            StringBuilder xmlResult = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            List<BookInfo> bookList = GetBookList();    //获取图书列表  
            if (bookList != null && bookList.Count > 0)
            {
                xmlResult.Append("<bookstore>");
                foreach (BookInfo book in bookList)
                {
                    xmlResult.AppendFormat("<book id=\"{0}\" category=\"{1}\">", book.BookId, book.Category);
                    xmlResult.AppendFormat("<title>{0}</title>", book.Title);
                    xmlResult.AppendFormat("<author>{0}</author>", book.Author);
                    xmlResult.AppendFormat("<publishDate>{0}</publishDate>", book.PublishDate.ToString("yyyy-MM-dd"));
                    xmlResult.AppendFormat("<price>{0}</price>", book.Price);
                    xmlResult.Append("</book>");
                }
                xmlResult.Append("</bookstore>");
            }

            //写入文件  
            try
            {
                //1.创建文件流    
                FileStream fileStream = new FileStream(fileName, FileMode.Create);
                //2.创建写入器    
                StreamWriter streamWriter = new StreamWriter(fileStream);
                //3.将内容写入文件    
                streamWriter.WriteLine(xmlResult);
                //4.关闭写入器    
                streamWriter.Close();
                //5.关闭文件流    
                fileStream.Close();
            }
            catch (Exception e)
            { }
        }

        /// <summary>  
        /// 创建图书信息XML,返回XML字符串  
        /// </summary>  
        public string CreateBookXML()
        {
            StringBuilder xmlResult = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            List<BookInfo> bookList = GetBookList();    //获取图书列表  
            if (bookList != null && bookList.Count > 0)
            {
                xmlResult.Append("<bookstore>");
                foreach (BookInfo book in bookList)
                {
                    xmlResult.AppendFormat("<book id=\"{0}\" category=\"{1}\">", book.BookId, book.Category);
                    xmlResult.AppendFormat("<title>{0}</title>", book.Title);
                    xmlResult.AppendFormat("<author>{0}</author>", book.Author);
                    xmlResult.AppendFormat("<publishDate>{0}</publishDate>", book.PublishDate.ToString("yyyy-MM-dd"));
                    xmlResult.AppendFormat("<price>{0}</price>", book.Price);
                    xmlResult.Append("</book>");
                }
                xmlResult.Append("</bookstore>");
            }

            return xmlResult.ToString();

        } 
        #endregion

        #region 方法2:使用XmlTextWriter类创建XML
        /// <summary> 
        /// 创建图书信息XML
        /// </summary>  
        /// <param name="fileName"></param>  
        public void CreateBookXMLOther(string fileName)
        {
            try
            {
                FileStream fileStream = new FileStream(fileName, FileMode.Create);
                XmlTextWriter writer = new XmlTextWriter(fileStream, Encoding.UTF8);
                List<BookInfo> bookList = GetBookList();    //获取图书列表  
                if (bookList != null && bookList.Count > 0)
                {
                    writer.WriteStartDocument();
                    writer.WriteStartElement("bookstore");    //创建父节点  
                    foreach (BookInfo book in bookList)
                    {
                        writer.WriteStartElement("book");    //创建子节点  
                        writer.WriteAttributeString("id", book.BookId.ToString());    //添加属性  
                        writer.WriteAttributeString("category", book.Category);
                        //图书名称节点  
                        writer.WriteStartElement("title");
                        writer.WriteValue(book.Title);    //节点赋值  
                        writer.WriteEndElement();
                        //图书作者节点  
                        writer.WriteStartElement("author");
                        writer.WriteValue(book.Author);
                        writer.WriteEndElement();
                        //出版时间节点  
                        writer.WriteStartElement("publishDate");
                        writer.WriteValue(book.PublishDate.ToString("yyyy-MM-dd"));
                        writer.WriteEndElement();
                        //销售价格节点  
                        writer.WriteStartElement("price");
                        writer.WriteValue(book.Price);
                        writer.WriteEndElement();

                        writer.WriteEndElement();    //子节点结束  
                    }
                    writer.WriteEndElement();    //父节点结束  
                }
                writer.WriteEndDocument();
                writer.Close();
                fileStream.Close();
            }
            catch (Exception e)
            { }
        }   
        #endregion

        /// <summary>  
        /// 获取图书列表,添加模拟数据  
        /// </summary>  
        /// <returns></returns>  
        public List<BookInfo> GetBookList()
        {
            List<BookInfo> bookList = new List<BookInfo>();
            BookInfo book1 = new BookInfo()
            {
                BookId = 1,
                Category = "CHILDREN",
                Title = "H哈利波特",
                Author = "J K.罗琳",
                PublishDate = new DateTime(2005, 08, 15),
                Price = 29.99
            };
            bookList.Add(book1);
            BookInfo book2 = new BookInfo()
            {
                BookId = 2,
                Category = "WEB",
                Title = "学习XML",
                Author = "艾瑞克.雷",
                PublishDate = new DateTime(2003, 10, 18),
                Price = 39.95
            };
            bookList.Add(book2);
            return bookList;
        }  
    }
}

Index.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

namespace MyTest
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //string path = Server.MapPath("~/file/webinfo.xml");
            string xmlStr= new XmlHelper().CreateBookXML();

            Response.ContentType = "text/xml";
            Response.Charset = "UTF-8";
            Response.Write(xmlStr);
            Response.End();   
        }


    }
}

运行结果如图:

这里写图片描述


UnifiedOrder.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MyTest.WechatModel
{
    /// <summary>
    /// 微信统一接口请求实体对象
    /// </summary>
    [Serializable]
    public class UnifiedOrder
    {
        /// <summary>
        /// 公共号ID(微信分配的公众账号 ID)
        /// </summary>
        public string appid = "";
        /// <summary>
        /// 商户号(微信支付分配的商户号)
        /// </summary>
        public string mch_id = "";
        /// <summary>
        /// 微信支付分配的终端设备号
        /// </summary>
        public string device_info = "";
        /// <summary>
        /// 随机字符串,不长于 32 位
        /// </summary>
        public string nonce_str = "";
        /// <summary>
        /// 签名
        /// </summary>
        public string sign = "";
        /// <summary>
        /// 商品描述
        /// </summary>
        public string body = "";
        /// <summary>
        /// 附加数据,原样返回
        /// </summary>
        public string attach = "";
        /// <summary>
        /// 商户系统内部的订单号,32个字符内、可包含字母,确保在商户系统唯一,详细说明
        /// </summary>
        public string out_trade_no = "";
        /// <summary>
        /// 订单总金额,单位为分,不能带小数点
        /// </summary>
        public int total_fee = 0;
        /// <summary>
        /// 终端IP
        /// </summary>
        public string spbill_create_ip = "";
        /// <summary>
        /// 订 单 生 成 时 间 , 格 式 为yyyyMMddHHmmss,如 2009 年12 月 25 日 9 点 10 分 10 秒表示为 20091225091010。时区为 GMT+8 beijing。该时间取自商户服务器
        /// </summary>
        public string time_start = "";
        /// <summary>
        /// 交易结束时间
        /// </summary>
        public string time_expire = "";
        /// <summary>
        /// 商品标记 商品标记,该字段不能随便填,不使用请填空,使用说明详见第 5 节
        /// </summary>
        public string goods_tag = "";
        /// <summary>
        /// 接收微信支付成功通知
        /// </summary>
        public string notify_url = "";
        /// <summary>
        /// JSAPI、NATIVE、APP
        /// </summary>
        public string trade_type = "";
        /// <summary>
        /// 用户标识 trade_type 为 JSAPI时,此参数必传
        /// </summary>
        public string openid = "";
        /// <summary>
        /// 只在 trade_type 为 NATIVE时需要填写。
        /// </summary>
        public string product_id = "";
    }
}

QueryOrder.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MyTest.WechatModel
{
    /// <summary>
    /// 微信订单查询接口请求实体对象
    /// </summary>
    [Serializable]
    public class QueryOrder
    {
        /// <summary>
        /// 公共号ID(微信分配的公众账号 ID)
        /// </summary>
        public string appid = "";

        /// <summary>
        /// 商户号(微信支付分配的商户号)
        /// </summary>
        public string mch_id = "";

        /// <summary>
        /// 微信订单号,优先使用
        /// </summary>
        public string transaction_id = "";

        /// <summary>
        /// 商户系统内部订单号
        /// </summary>
        public string out_trade_no = "";

        /// <summary>
        /// 随机字符串,不长于 32 位
        /// </summary>
        public string nonce_str = "";

        /// <summary>
        /// 签名,参与签名参数:appid,mch_id,transaction_id,out_trade_no,nonce_str,key
        /// </summary>
        public string sign = "";
    }
}

OrderDetail.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MyTest.WechatModel
{
    /// <summary>
    /// 微信订单明细实体对象
    /// </summary>
    [Serializable]
    public class OrderDetail
    {
        /// <summary>
        /// 返回状态码,SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断
        /// </summary>
        public string return_code = "";

        /// <summary>
        /// 返回信息返回信息,如非空,为错误原因 签名失败 参数格式校验错误
        /// </summary>
        public string return_msg = "";

        /// <summary>
        /// 公共号ID(微信分配的公众账号 ID)
        /// </summary>
        public string appid = "";

        /// <summary>
        /// 商户号(微信支付分配的商户号)
        /// </summary>
        public string mch_id = "";

        /// <summary>
        /// 随机字符串,不长于32位
        /// </summary>
        public string nonce_str = "";

        /// <summary>
        /// 签名
        /// </summary>
        public string sign = "";

        /// <summary>
        /// 业务结果,SUCCESS/FAIL
        /// </summary>
        public string result_code = "";

        /// <summary>
        /// 错误代码
        /// </summary>
        public string err_code = "";

        /// <summary>
        /// 错误代码描述
        /// </summary>
        public string err_code_des = "";

        /// <summary>
        /// 交易状态
        ///SUCCESS—支付成功
        ///REFUND—转入退款
        ///NOTPAY—未支付
        ///CLOSED—已关闭
        ///REVOKED—已撤销
        ///USERPAYING--用户支付中
        ///NOPAY--未支付(输入密码或确认支付超时) PAYERROR--支付失败(其他原因,如银行返回失败)
        /// </summary>
        public string trade_state = "";

        /// <summary>
        /// 微信支付分配的终端设备号
        /// </summary>
        public string device_info = "";

        /// <summary>
        /// 用户在商户appid下的唯一标识
        /// </summary>
        public string openid = "";

        /// <summary>
        /// 用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效
        /// </summary>
        public string is_subscribe = "";

        /// <summary>
        /// 交易类型,JSAPI、NATIVE、MICROPAY、APP
        /// </summary>
        public string trade_type = "";

        /// <summary>
        /// 银行类型,采用字符串类型的银行标识
        /// </summary>
        public string bank_type = "";

        /// <summary>
        /// 订单总金额,单位为分
        /// </summary>
        public string total_fee = "";

        /// <summary>
        /// 现金券支付金额<=订单总金额,订单总金额-现金券金额为现金支付金额
        /// </summary>
        public string coupon_fee = "";

        /// <summary>
        /// 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY
        /// </summary>
        public string fee_type = "";

        /// <summary>
        /// 微信支付订单号
        /// </summary>
        public string transaction_id = "";

        /// <summary>
        /// 商户系统的订单号,与请求一致。
        /// </summary>
        public string out_trade_no = "";

        /// <summary>
        /// 商家数据包,原样返回
        /// </summary>
        public string attach = "";

        /// <summary>
        /// 支付完成时间,格式为yyyyMMddhhmmss,如2009年12月27日9点10分10秒表示为20091227091010。
        /// 时区为GMT+8 beijing。该时间取自微信支付服务器
        /// </summary>
        public string time_end = "";

    }
}

EnterParam.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MyTest.WechatModel
{
    /// <summary>
    /// 微信接入参数
    /// </summary>
    public class EnterParam
    {
        /// <summary>
        /// 是否加密
        /// </summary>
        public bool IsAes { get; set; }
        /// <summary>
        /// 接入token
        /// </summary>
        public string token { get; set; }
        /// <summary>
        ///微信appid
        /// </summary>
        public string appid { get; set; }
        /// <summary>
        /// 加密密钥
        /// </summary>
        public string EncodingAESKey { get; set; }
    }
}

WechatXmlHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Text;
using MyTest.Model;
using System.Xml;
using System.Collections;
using MyTest.WechatModel;

namespace MyTest
{
    public class WechatXmlHelper
    {
        /// <summary>
        /// 微信统一下单接口xml参数整理
        /// </summary>
        /// <param name="order">微信支付参数实例</param>
        /// <param name="key">密钥</param>
        /// <returns></returns>
        protected string getUnifiedOrderXml(UnifiedOrder order, string key)
        {
            string return_string = string.Empty;
            SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();
            sParams.Add("appid", order.appid);
            sParams.Add("attach", order.attach);
            sParams.Add("body", order.body);
            sParams.Add("device_info", order.device_info);
            sParams.Add("mch_id", order.mch_id);
            sParams.Add("nonce_str", order.nonce_str);
            sParams.Add("notify_url", order.notify_url);
            sParams.Add("openid", order.openid);
            sParams.Add("out_trade_no", order.out_trade_no);
            sParams.Add("spbill_create_ip", order.spbill_create_ip);
            sParams.Add("total_fee", order.total_fee.ToString());
            sParams.Add("trade_type", order.trade_type);
            order.sign = "0ca175b9c0f726a831d895e269332461"; //getsign(sParams, key);
            sParams.Add("sign", order.sign);

            //拼接成XML请求数据
            StringBuilder sbPay = new StringBuilder();
            foreach (KeyValuePair<string, string> k in sParams)
            {
                if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
                {
                    sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">");
                }
                else
                {
                    sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">");
                }
            }
            return_string = string.Format("<xml>{0}</xml>", sbPay.ToString());
            byte[] byteArray = Encoding.UTF8.GetBytes(return_string);
            return_string = Encoding.GetEncoding("GBK").GetString(byteArray);
            return return_string;

        }

        /// <summary>
        /// 微信订单查询接口XML参数整理
        /// </summary>
        /// <param name="queryorder">微信订单查询参数实例</param>
        /// <param name="key">密钥</param>
        /// <returns></returns>
        protected string getQueryOrderXml(QueryOrder queryorder, string key)
        {
            string return_string = string.Empty;
            SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();
            sParams.Add("appid", queryorder.appid);
            sParams.Add("mch_id", queryorder.mch_id);
            sParams.Add("transaction_id", queryorder.transaction_id);
            sParams.Add("out_trade_no", queryorder.out_trade_no);
            sParams.Add("nonce_str", queryorder.nonce_str);
            queryorder.sign = "0ca175b9c0f726a831d895e269332461"; //getsign(sParams, key);
            sParams.Add("sign", queryorder.sign);

            //拼接成XML请求数据
            StringBuilder sbPay = new StringBuilder();
            foreach (KeyValuePair<string, string> k in sParams)
            {
                if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
                {
                    sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">");
                }
                else
                {
                    sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">");
                }
            }
            return_string = string.Format("<xml>{0}</xml>", sbPay.ToString().TrimEnd(','));
            return return_string;
        }


        //输出XML
        public string parseXML(Hashtable hashT)
        {
            Hashtable parameters = hashT;
            StringBuilder sb = new StringBuilder();
            sb.Append("<xml>");
            int iIsNumber = 0;
            foreach (string k in parameters.Keys)
            {
                string v = (string)parameters[k];
                if (int.TryParse(v, out iIsNumber))
                {
                    sb.Append("<" + k + ">" + v + "</" + k + ">");
                }
                else
                {
                    sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">");
                }
            }
            sb.Append("</xml>");
            return sb.ToString();
        }


        /// <summary>
        /// 返回微信POST过来的结果(微信信息返回)
        /// </summary>
        /// <param name="weixinXML">微信服务器post过来的数据</param>
        private string ResponseMsg(string weixinXML)
        {
            Hashtable ht = new Hashtable(); //GetXmlName(weixinXML);

            //这里写你的返回信息代码
            StringBuilder sb = new StringBuilder();
            sb.Append("<xml>");
            sb.Append("<ToUserName><![CDATA[" + ht["FromUserName"].ToString() + "]]></ToUserName>");
            sb.Append("<FromUserName><![CDATA[" + ht["ToUserName"].ToString() + "]]></FromUserName>");
            sb.Append("<CreateTime>" + ht["CreateTime"].ToString() + "</CreateTime>");

            sb.Append("<MsgType><![CDATA[" + ht["MsgType"].ToString() + "]]></MsgType>");
            sb.Append("<Content><![CDATA[" + ht["Content"].ToString() + "]]></Content>");
            sb.Append("</xml>");
            return sb.ToString();
        }


        /// <summary>
        /// 开发者微信号
        /// </summary>
        public string ToUserName { get; set; }
        /// <summary>
        /// 发送方帐号(一个OpenID)
        /// </summary>
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间 (整型)
        /// </summary>
        public string CreateTime { get; set; }

        /// <summary>
        /// 消息类型
        /// </summary>
        //public MsgType MsgType { get; set; }
        //public  void ResText(EnterParam param, string content)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.AppendFormat("<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{0}]]></Content><FuncFlag>0</FuncFlag></xml>", content);

        //}

        /// <summary>
        /// 回复消息(音乐)
        /// </summary>
        //public void ResMusic(EnterParam param, Music mu)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.Append(" <MsgType><![CDATA[music]]></MsgType>");
        //    resxml.AppendFormat("<Music><Title><![CDATA[{0}]]></Title><Description><![CDATA[{1}]]></Description>", mu.Title, mu.Description);
        //    resxml.AppendFormat("<MusicUrl><![CDATA[http://{0}{1}]]></MusicUrl><HQMusicUrl><![CDATA[http://{2}{3}]]></HQMusicUrl></Music><FuncFlag>0</FuncFlag></xml>", VqiRequest.GetCurrentFullHost(), mu.MusicUrl, VqiRequest.GetCurrentFullHost(), mu.HQMusicUrl);

        //}


        //public void ResVideo(EnterParam param, Video v)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.Append(" <MsgType><![CDATA[video]]></MsgType>");
        //    resxml.AppendFormat("<Video><MediaId><![CDATA[{0}]]></MediaId>", v.media_id);
        //    resxml.AppendFormat("<Title><![CDATA[{0}]]></Title>", v.title);
        //    resxml.AppendFormat("<Description><![CDATA[{0}]]></Description></Video></xml>", v.description);

        //}

        /// <summary>
        /// 回复消息(图片)
        /// </summary>
        //public void ResPicture(EnterParam param, Picture pic, string domain)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.Append(" <MsgType><![CDATA[image]]></MsgType>");
        //    resxml.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl></xml>", domain + pic.PictureUrl);

        //}

        /// <summary>
        /// 回复消息(图文列表)
        /// </summary>
        /// <param name="param"></param>
        /// <param name="art"></param>
        //public void ResArticles(EnterParam param, List<Articles> art)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.AppendFormat("<MsgType><![CDATA[news]]></MsgType><ArticleCount>{0}</ArticleCount><Articles>", art.Count);
        //    for (int i = 0; i < art.Count; i++)
        //    {
        //        resxml.AppendFormat("<item><Title><![CDATA[{0}]]></Title>  <Description><![CDATA[{1}]]></Description>", art[i].Title, art[i].Description);
        //        resxml.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl><Url><![CDATA[{1}]]></Url></item>", art[i].PicUrl.Contains("http://") ? art[i].PicUrl : "http://" + VqiRequest.GetCurrentFullHost() + art[i].PicUrl, art[i].Url.Contains("http://") ? art[i].Url : "http://" + VqiRequest.GetCurrentFullHost() + art[i].Url);
        //    }
        //    resxml.Append("</Articles><FuncFlag>0</FuncFlag></xml>");

        //}
    }
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Text;
using MyTest.Model;
using System.Xml;
using System.Collections;
using MyTest.WechatModel;

namespace MyTest
{
    public class WechatXmlHelper
    {
        /// <summary>
        /// 微信统一下单接口xml参数整理
        /// </summary>
        /// <param name="order">微信支付参数实例</param>
        /// <param name="key">密钥</param>
        /// <returns></returns>
        protected string getUnifiedOrderXml(UnifiedOrder order, string key)
        {
            string return_string = string.Empty;
            SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();
            sParams.Add("appid", order.appid);
            sParams.Add("attach", order.attach);
            sParams.Add("body", order.body);
            sParams.Add("device_info", order.device_info);
            sParams.Add("mch_id", order.mch_id);
            sParams.Add("nonce_str", order.nonce_str);
            sParams.Add("notify_url", order.notify_url);
            sParams.Add("openid", order.openid);
            sParams.Add("out_trade_no", order.out_trade_no);
            sParams.Add("spbill_create_ip", order.spbill_create_ip);
            sParams.Add("total_fee", order.total_fee.ToString());
            sParams.Add("trade_type", order.trade_type);
            order.sign = "0ca175b9c0f726a831d895e269332461"; //getsign(sParams, key);
            sParams.Add("sign", order.sign);

            //拼接成XML请求数据
            StringBuilder sbPay = new StringBuilder();
            foreach (KeyValuePair<string, string> k in sParams)
            {
                if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
                {
                    sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">");
                }
                else
                {
                    sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">");
                }
            }
            return_string = string.Format("<xml>{0}</xml>", sbPay.ToString());
            byte[] byteArray = Encoding.UTF8.GetBytes(return_string);
            return_string = Encoding.GetEncoding("GBK").GetString(byteArray);
            return return_string;

        }

        /// <summary>
        /// 微信订单查询接口XML参数整理
        /// </summary>
        /// <param name="queryorder">微信订单查询参数实例</param>
        /// <param name="key">密钥</param>
        /// <returns></returns>
        protected string getQueryOrderXml(QueryOrder queryorder, string key)
        {
            string return_string = string.Empty;
            SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();
            sParams.Add("appid", queryorder.appid);
            sParams.Add("mch_id", queryorder.mch_id);
            sParams.Add("transaction_id", queryorder.transaction_id);
            sParams.Add("out_trade_no", queryorder.out_trade_no);
            sParams.Add("nonce_str", queryorder.nonce_str);
            queryorder.sign = "0ca175b9c0f726a831d895e269332461"; //getsign(sParams, key);
            sParams.Add("sign", queryorder.sign);

            //拼接成XML请求数据
            StringBuilder sbPay = new StringBuilder();
            foreach (KeyValuePair<string, string> k in sParams)
            {
                if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
                {
                    sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">");
                }
                else
                {
                    sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">");
                }
            }
            return_string = string.Format("<xml>{0}</xml>", sbPay.ToString().TrimEnd(','));
            return return_string;
        }


        //输出XML
        public string parseXML(Hashtable hashT)
        {
            Hashtable parameters = hashT;
            StringBuilder sb = new StringBuilder();
            sb.Append("<xml>");
            int iIsNumber = 0;
            foreach (string k in parameters.Keys)
            {
                string v = (string)parameters[k];
                if (int.TryParse(v, out iIsNumber))
                {
                    sb.Append("<" + k + ">" + v + "</" + k + ">");
                }
                else
                {
                    sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">");
                }
            }
            sb.Append("</xml>");
            return sb.ToString();
        }


        /// <summary>
        /// 返回微信POST过来的结果(微信信息返回)
        /// </summary>
        /// <param name="weixinXML">微信服务器post过来的数据</param>
        private string ResponseMsg(string weixinXML)
        {
            Hashtable ht = new Hashtable(); //GetXmlName(weixinXML);

            //这里写你的返回信息代码
            StringBuilder sb = new StringBuilder();
            sb.Append("<xml>");
            sb.Append("<ToUserName><![CDATA[" + ht["FromUserName"].ToString() + "]]></ToUserName>");
            sb.Append("<FromUserName><![CDATA[" + ht["ToUserName"].ToString() + "]]></FromUserName>");
            sb.Append("<CreateTime>" + ht["CreateTime"].ToString() + "</CreateTime>");

            sb.Append("<MsgType><![CDATA[" + ht["MsgType"].ToString() + "]]></MsgType>");
            sb.Append("<Content><![CDATA[" + ht["Content"].ToString() + "]]></Content>");
            sb.Append("</xml>");
            return sb.ToString();
        }


        /// <summary>
        /// 开发者微信号
        /// </summary>
        public string ToUserName { get; set; }
        /// <summary>
        /// 发送方帐号(一个OpenID)
        /// </summary>
        public string FromUserName { get; set; }
        /// <summary>
        /// 消息创建时间 (整型)
        /// </summary>
        public string CreateTime { get; set; }

        /// <summary>
        /// 消息类型
        /// </summary>
        //public MsgType MsgType { get; set; }
        //public  void ResText(EnterParam param, string content)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.AppendFormat("<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{0}]]></Content><FuncFlag>0</FuncFlag></xml>", content);

        //}

        /// <summary>
        /// 回复消息(音乐)
        /// </summary>
        //public void ResMusic(EnterParam param, Music mu)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.Append(" <MsgType><![CDATA[music]]></MsgType>");
        //    resxml.AppendFormat("<Music><Title><![CDATA[{0}]]></Title><Description><![CDATA[{1}]]></Description>", mu.Title, mu.Description);
        //    resxml.AppendFormat("<MusicUrl><![CDATA[http://{0}{1}]]></MusicUrl><HQMusicUrl><![CDATA[http://{2}{3}]]></HQMusicUrl></Music><FuncFlag>0</FuncFlag></xml>", VqiRequest.GetCurrentFullHost(), mu.MusicUrl, VqiRequest.GetCurrentFullHost(), mu.HQMusicUrl);

        //}


        //public void ResVideo(EnterParam param, Video v)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.Append(" <MsgType><![CDATA[video]]></MsgType>");
        //    resxml.AppendFormat("<Video><MediaId><![CDATA[{0}]]></MediaId>", v.media_id);
        //    resxml.AppendFormat("<Title><![CDATA[{0}]]></Title>", v.title);
        //    resxml.AppendFormat("<Description><![CDATA[{0}]]></Description></Video></xml>", v.description);

        //}

        /// <summary>
        /// 回复消息(图片)
        /// </summary>
        //public void ResPicture(EnterParam param, Picture pic, string domain)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.Append(" <MsgType><![CDATA[image]]></MsgType>");
        //    resxml.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl></xml>", domain + pic.PictureUrl);

        //}

        /// <summary>
        /// 回复消息(图文列表)
        /// </summary>
        /// <param name="param"></param>
        /// <param name="art"></param>
        //public void ResArticles(EnterParam param, List<Articles> art)
        //{
        //    StringBuilder resxml = new StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>", FromUserName, ToUserName, Utils.ConvertDateTimeInt(DateTime.Now)));
        //    resxml.AppendFormat("<MsgType><![CDATA[news]]></MsgType><ArticleCount>{0}</ArticleCount><Articles>", art.Count);
        //    for (int i = 0; i < art.Count; i++)
        //    {
        //        resxml.AppendFormat("<item><Title><![CDATA[{0}]]></Title>  <Description><![CDATA[{1}]]></Description>", art[i].Title, art[i].Description);
        //        resxml.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl><Url><![CDATA[{1}]]></Url></item>", art[i].PicUrl.Contains("http://") ? art[i].PicUrl : "http://" + VqiRequest.GetCurrentFullHost() + art[i].PicUrl, art[i].Url.Contains("http://") ? art[i].Url : "http://" + VqiRequest.GetCurrentFullHost() + art[i].Url);
        //    }
        //    resxml.Append("</Articles><FuncFlag>0</FuncFlag></xml>");

        //}
    }
}

WechatXml.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

namespace MyTest
{
    public partial class WechatXml : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Hashtable ht = new Hashtable();
            ht.Add("Name", "wu");
            ht.Add("Age", "27");
            ht.Add("Country", "American");
            ht.Add("Job", "NET高级开发");
            ht.Add("Interesting", "电影,书籍");


            WechatXmlHelper helper = new WechatXmlHelper();
            string xmlStr = helper.parseXML(ht);
            Response.ContentType = "text/xml";
            Response.Charset = "UTF-8";
            Response.Write(xmlStr);
            Response.End();   
        }
    }
}

运行结果如图:

这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值