/** * @将Dictionary转成xml * @return 经转换得到的xml串 * @throws WxPayException **/ public string ToXml() { //数据为空时不能转化为xml格式 if (0 == m_values.Count) { WxPayLog.Error(this.GetType().ToString(), "WxPayData数据为空!"); throw new WxPayException("WxPayData数据为空!"); } string xml = "<xml>"; foreach (KeyValuePair <string, object> pair in m_values) { //字段值不能为null,会影响后续流程 //if (pair.Value == null) //{ // WxPayLog.Error(this.GetType().ToString(), "WxPayData内部含有值为null的字段!"); // throw new WxPayException("WxPayData内部含有值为null的字段!"); //} if (pair.Value == null) { xml += "<" + pair.Key + ">" + "<![CDATA[]]></" + pair.Key + ">"; } else { if (pair.Value.GetType() == typeof(int)) { xml += "<" + pair.Key + ">" + pair.Value + "</" + pair.Key + ">"; } else if (pair.Value.GetType() == typeof(string)) { xml += "<" + pair.Key + ">" + "<![CDATA[" + pair.Value + "]]></" + pair.Key + ">"; } else//除了string和int类型不能含有其他数据类型 { WxPayLog.Error(this.GetType().ToString(), "WxPayData字段数据类型错误!"); throw new WxPayException("WxPayData字段数据类型错误!"); } } } xml += "</xml>"; return(xml); }
/** * @values格式化成能在Web页面上显示的结果(因为web页面上不能直接输出xml格式的字符串) */ public string ToPrintStr() { string str = ""; foreach (KeyValuePair <string, object> pair in m_values) { //if (pair.Value == null) //{ // WxPayLog.Error(this.GetType().ToString(), "WxPayData内部含有值为null的字段!"); // throw new WxPayException("WxPayData内部含有值为null的字段!"); //} if (pair.Value == null) { continue; } str += string.Format("{0}={1}<br>", pair.Key, pair.Value.ToString()); } WxPayLog.Debug(this.GetType().ToString(), "Print in Web Page : " + str); return(str); }
/** * @将xml转为WxPayData对象并返回对象内部的数据 * @param string 待转换的xml串 * @return 经转换得到的Dictionary * @throws WxPayException */ public SortedDictionary <string, object> FromXml(string xml) { if (string.IsNullOrEmpty(xml)) { WxPayLog.Error(this.GetType().ToString(), "将空的xml串转换为WxPayData不合法!"); throw new WxPayException("将空的xml串转换为WxPayData不合法!"); } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); XmlNode xmlNode = xmlDoc.FirstChild;//获取到根节点<xml> XmlNodeList nodes = xmlNode.ChildNodes; foreach (XmlNode xn in nodes) { XmlElement xe = (XmlElement)xn; m_values[xe.Name] = xe.InnerText;//获取xml的键值对到WxPayData内部的数据中 } try { //2015-06-29 错误是没有签名 if (m_values["return_code"] != "SUCCESS") { return(m_values); } CheckSign();//验证签名,不通过会抛异常 } catch (WxPayException ex) { throw new WxPayException(ex.Message); } return(m_values); }