|
|
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Security.Cryptography;
- using System.Text;
- using System.Web;
- using System.Xml;
-
- /// <summary>
- /// WX_Util 的摘要说明
- /// </summary>
- public class WX_Util
- {
- public static string getRandomStr()
- {
- return Guid.NewGuid().ToString().Replace("-", "");
- }
- public static string extract(string str, string key)
- {
- SortedDictionary<string, string> map = new SortedDictionary<string, string>();
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.LoadXml(str);
- XmlNode xmlNode = xmlDoc.FirstChild;//获取到根节点<xml>
- XmlNodeList nodes = xmlNode.ChildNodes;
- foreach (XmlNode xn in nodes)
- {
- XmlElement xe = (XmlElement)xn;
- if (key.Equals(xe.Name))
- {
- return xe.InnerText;
- }
- }
- return "";
- }
-
- public static ReturnBean submit(SortedDictionary<string, string> map, string key)
- {
- string str = null;
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.mch.weixin.qq.com/pay/unifiedorder");
- request.Method = "POST";
- Stream requestStream = request.GetRequestStream();
- StreamWriter streamWriter = new StreamWriter(requestStream);
- streamWriter.Write(getXML(map, key));
- streamWriter.Flush();
-
- HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- Stream responseStream = response.GetResponseStream();
- StreamReader streamReader = new StreamReader(responseStream);
- str = streamReader.ReadToEnd();
-
- streamWriter.Close();
- streamReader.Close();
- WX_Util.log(str);
- return new ReturnBean(str);
- }
-
- public static void log(string str)
- {
- System.IO.FileStream file = new System.IO.FileStream(HttpContext.Current.Server.MapPath("/upload/log.txt"), System.IO.FileMode.Append);
- System.IO.StreamWriter writer = new System.IO.StreamWriter(file);
- writer.WriteLine(str + "\n\r");
- writer.Close();
- }
-
- public static string getXML(SortedDictionary<string, string> map, string key)
- {
- string xml = "<xml>";
- xml += "<sign>" + sign(map, key) + "</sign>";
- foreach (KeyValuePair<string, string> pair in map)
- {
- if (pair.Value != null)
- {
- 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 + ">";
- }
- }
- }
- xml += "</xml>";
- return xml;
- }
-
- public static string sign(SortedDictionary<string, string> map, string key)
- {
- string strb = "";
- foreach (KeyValuePair<string, string> pair in map)
- {
- if (pair.Key != "sign" && pair.Value != "")
- {
- strb += pair.Key + "=" + pair.Value + "&";
- }
- }
- strb += "key=" + key;
-
- return md5(strb);
- }
-
- public static string md5(string str)
- {
- var md5 = MD5.Create();
- var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
- var sb = new StringBuilder();
- foreach (byte b in bs)
- {
- sb.Append(b.ToString("x2"));
- }
- //所有字符转为大写
- return sb.ToString().ToUpper();
- }
- public static string getRequestStr(HttpRequest request)
- {
- System.IO.Stream s = request.InputStream;
- int count = 0;
- byte[] buffer = new byte[1024];
- StringBuilder builder = new StringBuilder();
- while ((count = s.Read(buffer, 0, 1024)) > 0)
- {
- builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
- }
- s.Flush();
- s.Close();
- s.Dispose();
-
- return builder.ToString();
- }
- public WX_Util()
- {
- //
- // TODO: 在此处添加构造函数逻辑
- //
- }
- }
|