1、数据返回实体;UnifyReceive
public class UnifyReceive { /// <summary> /// SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 /// </summary> public string return_code { get; set; } /// <summary> /// 返回信息,如非空,为错误原因 /// </summary> public string return_msg { get; set; } /// <summary> /// 微信分配的公众账号ID /// </summary> public string appid { get; set; } /// <summary> /// 微信支付分配的商户号 /// </summary> public string mch_id { get; set; } /// <summary> /// 随机字符串,不长于32位 /// </summary> public string nonce_str { get; set; } /// <summary> /// 签名 /// </summary> public string sign { get; set; } /// <summary> /// 业务结果 /// </summary> public string result_code { get; set; } /// <summary> /// 预支付ID /// </summary> public string prepay_id { get; set; } /// <summary> /// 交易类型 /// </summary> public string trade_type { get; set; } /// <summary> /// 二维码链接 /// </summary> public string code_url { get; set; } public UnifyReceive(string xml) { XElement doc = XElement.Parse(xml); return_code = doc.Element("return_code").Value; return_msg = doc.Element("return_msg").Value; if (return_code == "SUCCESS") { appid = doc.Element("appid").Value; mch_id = doc.Element("mch_id").Value; nonce_str = doc.Element("nonce_str").Value; sign = doc.Element("sign").Value; result_code = doc.Element("result_code").Value; if (result_code == "SUCCESS") { trade_type = doc.Element("trade_type").Value; prepay_id = doc.Element("prepay_id").Value; if (trade_type == "NATIVE") { code_url = doc.Element("code_url").Value; } trade_type = doc.Element("trade_type").Value; } } } }
2、微信支付
public class RequestHandler { public RequestHandler(HttpContextWrapper httpContext) { this.parameters = new Dictionary<string, string>(); this.httpContext = httpContext; } /** 密钥 */ private string key; private string unifiedorderUrl; protected HttpContextWrapper httpContext; /** 请求的参数 */ protected Dictionary<string, string> parameters; /** debug信息 */ private string debugInfo; /** 初始化函数 */ public virtual void init() { } /** 获取debug信息 */ public String getDebugInfo() { return debugInfo; } /** 获取密钥 */ public String getKey() { return key; } /** 设置密钥 */ public void setKey(string key) { this.key = key; } /** 获取预支付请求ur */ public String getUnifiedorderUrl() { return unifiedorderUrl; } /** 设置预支付请求url */ public void setUnifiedorderUrl(string unifiedorderUrl) { this.unifiedorderUrl = unifiedorderUrl; } /** 设置参数值 */ public void setParameter(string parameterkey, string parameterValue) { if (parameterkey != null && parameterkey != "") { if (parameters.ContainsKey(parameterkey)) { parameters.Remove(parameterkey); } parameters.Add(parameterkey, parameterValue); } } /// <summary> /// 生成预支付prepayid包 /// </summary> /// <returns></returns> public string CreatePackage() { ArrayList akeys = new ArrayList(parameters.Keys); akeys.Sort(); try { string xml = parseXML(); UnifyReceive unifyReceive = new UnifyReceive(WebHttpHelper.CreateWebrequest(unifiedorderUrl, xml)); if (unifyReceive != null && !string.IsNullOrEmpty(unifyReceive.prepay_id)) { return "prepay_id=" + unifyReceive.prepay_id; } } catch (Exception) { throw new SDKRuntimeException("生成prepayid异常"); } return ""; } /// <summary> /// 创建md5签名 /// </summary> /// <returns></returns> public string CreateMD5Sign() { try { var dictemp = parameters.OrderBy(d => d.Key); #region 生成url字符串 StringBuilder str = new StringBuilder(); foreach (var item in dictemp) { str.AppendFormat("{0}={1}&", item.Key, item.Value); } #endregion var ourl = str.ToString().Trim('&'); //加上key string tempsign = ourl + "&key=" + key; //md5加密后,转换成大写 return Util.MD5(tempsign).ToUpper(); } catch (Exception) { throw new SDKRuntimeException("生成签名异常"); } } //输出XML public string parseXML() { StringBuilder sb = new StringBuilder(); sb.Append("<xml encoding='UTF-8'>"); foreach (string k in parameters.Keys) { string v = (string)parameters[k]; if (Regex.IsMatch(v, @"^[0-9.]$")) { sb.Append("<" + k + ">" + v + "</" + k + ">"); } else { sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">"); } } sb.Append("</xml>"); return sb.ToString(); } /** 设置debug信息 */ public void setDebugInfo(String debugInfo) { this.debugInfo = debugInfo; } public Dictionary<string, string> getAllParameters() { return this.parameters; } protected string getCharset() { return this.httpContext.Request.ContentEncoding.BodyName; } }