zoukankan      html  css  js  c++  java
  • 微信小程序 c#后台支付结果回调

    又为大家带来简单的c#后台支付结果回调方法,首先还是要去微信官网下载模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在打开WxPayAPI项目中的example文件下的

    NativeNotifyPage.aspx打开网页中的代码页如图:

    将以下代码加入进去就能完成:

      public partial class NativeNotifyPage : System.Web.UI.Page
        {
            public static string wxJsApiParam { get; set; } //前段显示
            public string return_result = "";
            protected void Page_Load(object sender, EventArgs e)
            {
               Response.ContentType = "text/plain";
                Response.Write("Hello World");
    
                LogHelper.WriteLog(typeof(NativeNotifyPage), "可以运行1-1");
    
                String xmlData = getPostStr();//获取请求数据  
                if (xmlData == "")
                {
    
                }
                else
                {
                    var dic = new Dictionary<string, string>
                     {
                      {"return_code", "SUCCESS"},
                      {"return_msg","OK"}
    
                     };
                    var sb = new StringBuilder();
                    sb.Append("<xml>");
    
    
                    foreach (var d in dic)
                    {
                        sb.Append("<" + d.Key + ">" + d.Value + "</" + d.Key + ">");
                    }
                    sb.Append("</xml>");
    
    
    
    
    
                    //把数据重新返回给客户端  
                    DataSet ds = new DataSet();
                    StringReader stram = new StringReader(xmlData);
                    XmlTextReader datareader = new XmlTextReader(stram);
                    ds.ReadXml(datareader);
                    if (ds.Tables[0].Rows[0]["return_code"].ToString() == "SUCCESS")
                    {
    
                        LogHelper.WriteLog(typeof(NativeNotifyPage), "数据能返回");
    
    
                        string wx_appid = "";//微信开放平台审核通过的应用APPID  
                        string wx_mch_id = "";//微信支付分配的商户号  
    
                        string wx_nonce_str = "";//     随机字符串,不长于32位  
                        string wx_sign = "";//签名,详见签名算法  
                        string wx_result_code = "";//SUCCESS/FAIL  
    
                        string wx_return_code = "";
                        string wx_openid = "";//用户在商户appid下的唯一标识  
                        string wx_is_subscribe = "";//用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效  
                        string wx_trade_type = "";//    APP  
                        string wx_bank_type = "";//     银行类型,采用字符串类型的银行标识,银行类型见银行列表  
                        string wx_fee_type = "";//  货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型  
    
    
                        string wx_transaction_id = "";//微信支付订单号  
                        string wx_out_trade_no = "";//商户系统的订单号,与请求一致。  
                        string wx_time_end = "";//  支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则  
                        int wx_total_fee = 1;//    订单总金额,单位为分  
                        int wx_cash_fee = 1;//现金支付金额订单现金支付金额,详见支付金额  
    
    
                        #region  数据解析  
                        //列 是否存在  
                        string signstr = "";//需要前面的字符串  
                                            //wx_appid  
                        if (ds.Tables[0].Columns.Contains("appid"))
                        {
                            wx_appid = ds.Tables[0].Rows[0]["appid"].ToString();
                            if (!string.IsNullOrEmpty(wx_appid))
                            {
                                signstr += "appid=" + wx_appid;
                            }
                        }
    
                        //wx_bank_type  
                        if (ds.Tables[0].Columns.Contains("bank_type"))
                        {
                            wx_bank_type = ds.Tables[0].Rows[0]["bank_type"].ToString();
                            if (!string.IsNullOrEmpty(wx_bank_type))
                            {
                                signstr += "&bank_type=" + wx_bank_type;
                            }
                        }
                        //wx_cash_fee  
                        if (ds.Tables[0].Columns.Contains("cash_fee"))
                        {
                            wx_cash_fee = Convert.ToInt32(ds.Tables[0].Rows[0]["cash_fee"].ToString());
    
                            signstr += "&cash_fee=" + wx_cash_fee;
                        }
    
                        //wx_fee_type  
                        if (ds.Tables[0].Columns.Contains("fee_type"))
                        {
                            wx_fee_type = ds.Tables[0].Rows[0]["fee_type"].ToString();
                            if (!string.IsNullOrEmpty(wx_fee_type))
                            {
                                signstr += "&fee_type=" + wx_fee_type;
                            }
                        }
    
                        //wx_is_subscribe  
                        if (ds.Tables[0].Columns.Contains("is_subscribe"))
                        {
                            wx_is_subscribe = ds.Tables[0].Rows[0]["is_subscribe"].ToString();
                            if (!string.IsNullOrEmpty(wx_is_subscribe))
                            {
                                signstr += "&is_subscribe=" + wx_is_subscribe;
                            }
                        }
    
                        //wx_mch_id  
                        if (ds.Tables[0].Columns.Contains("mch_id"))
                        {
                            wx_mch_id = ds.Tables[0].Rows[0]["mch_id"].ToString();
                            if (!string.IsNullOrEmpty(wx_mch_id))
                            {
                                signstr += "&mch_id=" + wx_mch_id;
                            }
                        }
    
                        //wx_nonce_str  
                        if (ds.Tables[0].Columns.Contains("nonce_str"))
                        {
                            wx_nonce_str = ds.Tables[0].Rows[0]["nonce_str"].ToString();
                            if (!string.IsNullOrEmpty(wx_nonce_str))
                            {
                                signstr += "&nonce_str=" + wx_nonce_str;
                            }
                        }
    
                        //wx_openid  
                        if (ds.Tables[0].Columns.Contains("openid"))
                        {
                            wx_openid = ds.Tables[0].Rows[0]["openid"].ToString();
                            if (!string.IsNullOrEmpty(wx_openid))
                            {
                                signstr += "&openid=" + wx_openid;
                            }
                        }
    
                        //wx_out_trade_no  
                        if (ds.Tables[0].Columns.Contains("out_trade_no"))
                        {
                            wx_out_trade_no = ds.Tables[0].Rows[0]["out_trade_no"].ToString();
                            if (!string.IsNullOrEmpty(wx_out_trade_no))
                            {
                                signstr += "&out_trade_no=" + wx_out_trade_no;
                            }
    
                        }
    
                        //wx_result_code   
                        if (ds.Tables[0].Columns.Contains("result_code"))
                        {
                            wx_result_code = ds.Tables[0].Rows[0]["result_code"].ToString();
                            if (!string.IsNullOrEmpty(wx_result_code))
                            {
                                signstr += "&result_code=" + wx_result_code;
                            }
                        }
    
                        //wx_result_code   
                        if (ds.Tables[0].Columns.Contains("return_code"))
                        {
                            wx_return_code = ds.Tables[0].Rows[0]["return_code"].ToString();
                            if (!string.IsNullOrEmpty(wx_return_code))
                            {
                                signstr += "&return_code=" + wx_return_code;
                            }
                            LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_return_code" + wx_return_code);
                        }
    
                        //wx_sign   
                        if (ds.Tables[0].Columns.Contains("sign"))
                        {
                            wx_sign = ds.Tables[0].Rows[0]["sign"].ToString();
                            //if (!string.IsNullOrEmpty(wx_sign))  
                            //{  
                            //    signstr += "&sign=" + wx_sign;  
                            //}  
                        }
    
                        //wx_time_end  
                        if (ds.Tables[0].Columns.Contains("time_end"))
                        {
                            wx_time_end = ds.Tables[0].Rows[0]["time_end"].ToString();
                            if (!string.IsNullOrEmpty(wx_time_end))
                            {
                                signstr += "&time_end=" + wx_time_end;
                            }
                            LogHelper.WriteLog(typeof(NativeNotifyPage), "time_end" + wx_time_end);
                        }
    
                        //wx_total_fee  
                        if (ds.Tables[0].Columns.Contains("total_fee"))
                        {
                            wx_total_fee = Convert.ToInt32(ds.Tables[0].Rows[0]["total_fee"].ToString());
    
                            signstr += "&total_fee=" + wx_total_fee;
    
                            LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_total_fee" + wx_total_fee);
                        }
    
                        //wx_trade_type  
                        if (ds.Tables[0].Columns.Contains("trade_type"))
                        {
                            wx_trade_type = ds.Tables[0].Rows[0]["trade_type"].ToString();
                            if (!string.IsNullOrEmpty(wx_trade_type))
                            {
                                signstr += "&trade_type=" + wx_trade_type;
                            }
                        }
    
                        //wx_transaction_id  
                        if (ds.Tables[0].Columns.Contains("transaction_id"))
                        {
                            wx_transaction_id = ds.Tables[0].Rows[0]["transaction_id"].ToString();
                            if (!string.IsNullOrEmpty(wx_transaction_id))
                            {
                                signstr += "&transaction_id=" + wx_transaction_id;
                            }
                            LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_transaction_id" + wx_transaction_id);
                        }
    
                        #endregion
    
                        //追加key 密钥  
                        signstr += "&key=" + System.Web.Configuration.WebConfigurationManager.AppSettings["key"].ToString();
                        //签名正确  
                        string orderStrwhere = "ordernumber='" + wx_out_trade_no + "'";
    
    
    
                        if (wx_sign == System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(signstr, "MD5").ToUpper())
                        {
                            //签名正确   处理订单操作逻辑  
    
    
                        }
                        else
                        {
                            //追加备注信息  
    
                        }
    
                    }
                    else
                    {
                        // 返回信息,如非空,为错误原因  签名失败 参数格式校验错误  
                        string return_msg = ds.Tables[0].Rows[0]["return_msg"].ToString();
    
                    }
    
    
                    return_result = sb.ToString();
                }
    
    
            }
    
    
    
     
    
        
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
    
            //获得Post过来的数据  
            public string getPostStr()
            {
                Int32 intLen = Convert.ToInt32(System.Web.HttpContext.Current.Request.InputStream.Length);
                byte[] b = new byte[intLen];
                System.Web.HttpContext.Current.Request.InputStream.Read(b, 0, intLen);
                return System.Text.Encoding.UTF8.GetString(b);
            }
    
        
        
        }

    备注:记得将方法地址加入到统一下单的中去如图

  • 相关阅读:
    HTB-靶机-Charon
    第一篇Active Directory疑难解答概述(1)
    Outlook Web App 客户端超时设置
    【Troubleshooting Case】Exchange Server 组件状态应用排错?
    【Troubleshooting Case】Unable to delete Exchange database?
    Exchange Server 2007的即将生命周期,您的计划是?
    "the hypervisor is not running" 故障
    Exchange 2016 体系结构
    USB PE
    10 months then free? 10个月,然后自由
  • 原文地址:https://www.cnblogs.com/weizhiing/p/7700723.html
Copyright © 2011-2022 走看看