• 微信开发-微信支付(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;
            }
        }
  • 相关阅读:
    [转]HTML5 classList API
    高质量CSS编写规范
    CSS Hack
    谈谈JSON数据格式
    Eclipse启动时报需要安装"Java SE 6 Runtime"致无法启动解决方案
    站长问题纠结
    做站长的经验
    网站如何提高PR值
    Progit Update Check Page
    WPF随手小记之二 ——改变DataGrid样式
  • 原文地址:https://www.cnblogs.com/tiggerinchengdu/p/4511978.html
Copyright © 2020-2023  润新知