1.首先调用接口,要有一个post数据到指定url并返回数据的函数:

  1. protected string PostXmlToUrl(string url, string postData)
  2. {
  3. string returnmsg = "";
  4. using (System.Net.WebClient wc = new System.Net.WebClient())
  5. {
  6. returnmsg = wc.UploadString(url, "POST", postData);
  7. }
  8. return returnmsg;
  9. }

post的数据格式可以是

url的参数格式(a=1&b=2&c=3....)

xml格式(<xml>....</xml>)

返回的数据格式由接口确定。

2.方法调用:

  1. post_data = wxPayBaseHelper.UnifiedPayOrder(wxobPay, key);
  2.  
  3. requestData = PostXmlToUrl("https://api.mch.weixin.qq.com/pay/unifiedorder", post_data);

这里post_data是一段xml字符串:

  1. <xml>
  2. <appid>wx2421b1c4370ec43b</appid>
  3. <attach>支付测试</attach>
  4. <body>JSAPI支付测试</body>
  5. <mch_id></mch_id>
  6. <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
  7. <notify_url>http://wxpay.weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url>
  8. <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
  9. <out_trade_no></out_trade_no>
  10. <spbill_create_ip>14.23.150.211</spbill_create_ip>
  11. <total_fee></total_fee>
  12. <trade_type>JSAPI</trade_type>
  13. <sign>0CB01533B8C1EF103065174F50BCA001</sign>
  14. </xml>

返回来的requestData也是一段xml字符串:

  1. <xml>
  2. <return_code><![CDATA[SUCCESS]]></return_code>
  3. <return_msg><![CDATA[OK]]></return_msg>
  4. <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
  5. <mch_id><![CDATA[]]></mch_id>
  6. <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
  7. <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
  8. <result_code><![CDATA[SUCCESS]]></result_code>
  9. <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
  10. <trade_type><![CDATA[JSAPI]]></trade_type>
  11. </xml>

调用此接口是为了获取prepay_id,接口返回来的结果包含了prepay_id,接下来把它取出,先要一个把xml字符串转换为SortedDictionary类型的函数:

  1. /// <summary>
  2. /// 把XML数据转换为SortedDictionary<string, string>集合
  3. /// </summary>
  4. /// <param name="strxml"></param>
  5. /// <returns></returns>
  6. public SortedDictionary<string, string> GetInfoFromXml(string xmlstring)
  7. {
  8. SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();
  9. try
  10. {
  11. XmlDocument doc = new XmlDocument();
  12. doc.LoadXml(xmlstring);
  13. XmlElement root = doc.DocumentElement;
  14. int len = root.ChildNodes.Count;
  15. for (int i = ; i < len; i++)
  16. {
  17. string name = root.ChildNodes[i].Name;
  18. if (!sParams.ContainsKey(name))
  19. {
  20. sParams.Add(name.Trim(), root.ChildNodes[i].InnerText.Trim());
  21. }
  22. }
  23. }
  24. catch (Exception ex)
  25. {
  26. //LxCommomHelper.Commom.TraceLog.LogWrite(ex.ToString(), LxCommomHelper.Commom.LogEnum.Pay);
  27. }
  28. return sParams;
  29. }

然后调用方法:

  1. SortedDictionary<string, string> requestXML = wxPayBaseHelper.GetInfoFromXml(requestData);
  2. foreach (KeyValuePair<string, string> k in requestXML)
  3. {
  4. if (k.Key == "prepay_id")
  5. {
  6. prepay_id = k.Value;
  7. break;
  8. }
  9. }

ok,又获取到了prepay_id,最后是发起微信支付了,待续。

c# 读取XML数据的更多相关文章

  1. wcf序列化大对象时报错:读取 XML 数据时,超出最大

    错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...

  2. InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)

    WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...

  3. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  4. 读取 XML 数据时,超出最大字符串内容长度配额 (8192)

    格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://www.thermo.com/informatics/xmlns/limswebservice 进行反序列化时出错: Process ...

  5. 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大

    当遇到这个错误的时候郁闷了好长时间报错是字符串长度过大可是修改了MaxStringContentLength”属性的值却不起作用最后才发现还是因为配置文件配置的问题在服务端 格式化程序尝试对消息反序列 ...

  6. XML序列化器读取XML数据

    PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^ 场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到 ...

  7. 用php读取xml数据

    parser是php内置的一个用来处理xml的解析器,它的工作由三个事件组成:起始标签. 读取数据.结束标签. 也就是说在对xml进行处理的时候每当遇到起始标签.数据和结束标签的时候函数会做相应的动作 ...

  8. [drp 4] 使用dom4j,读取XML数据,保存至数据库

    导读:上篇文章介绍了用XML文件配置数据库的连接,然后通过读取XML文件连接数据库的内容,本篇博客介绍读取XML文件,进行数据持久化的操作.PS:从某种意义上来说,经过Scheme校正的XML文件,本 ...

  9. 使用Java读取XML数据

    ---------------siwuxie095 工程名:TestReadXML 包名:com.siwuxie095.xml 类名:ReadXML.java 打开资源管理器,在工程 TestRead ...

  10. 读取xml数据装配到字典中之应用场景

    前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...

随机推荐

  1. Configure Puppet Master with Passenger and Apache on Centos

    What is Passenger? Passenger (AKA mod_rails or mod_rack) is an Apache 2.x module which lets you run ...

  2. nginx的https配置

    测试自签名的ssl证书 首先执行如下命令生成一个key openssl genrsa -des3 - 然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次reload ...

  3. JSP里的c:url中的/代表站点根目录还是WEB根目录?(待解答)

    <c:url/>使用格式: <c:url var="<string>" scope="<string>" value= ...

  4. 我的Android最佳实践之—— Android启动画面的实现方法

    本文实例讲述了Android启动画面的实现方法.分享给大家供大家参考.具体分析如下: 在应用程序中经常用到启动画面,会启动一个后台线程为主程序的运行准备资源.Android要实现启动画面可以这样做: ...

  5. c fopen文件读写

    fopen <cstdio> FILE * fopen ( const char * filename, const char * mode ); Open file Opens the ...

  6. Form_Form Builder编译fmb/library/menu方式总结(汇总)

    2014-12-27 Created By BaoXinjian

  7. React Native 开发。

    1.react-native run-android 安装 2.react-native start  开启调试端口

  8. Altium Designer /DXP无网络铺铜:

    有的设计者在PCB加工的时候会删除网络以便为了保护.但如果后续在无网络PCB上进行修改时就不叫麻烦,没有网络连铺铜都无法进行.一般手动添加网络只对要铺铜的地网络进行,其它的要修改者自己确保版图的正确性 ...

  9. vs2015-Azure Mobile Service

    /App_Data /App_Start/ WebApiConfig.cs using System; using System.Collections.Generic; using System.C ...

  10. JAVA 单选按钮、复选按钮

    //单选按钮和复选按钮 import java.awt.*; import javax.swing.*; public class Jiemian6 extends JFrame{ JPanel mb ...