微信开发-微信支付(v3.3以上版本)

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;
        }
    }
原文地址:https://www.cnblogs.com/tiggerinchengdu/p/4511978.html