找回密码
 立即注册

QQ登录

只需一步,快速开始

微信小程序 c#后台支付结果回调

[复制链接]
查看: 63|回复: 0
最佳答案
0 

7

主题

7

帖子

155

积分

新人求带

积分
155
 楼主| 发表于 2017-11-15 10:04:59 | 显示全部楼层 |阅读模式
又为大家带来简单的c#后台支付结果回调方法,首先还是要去微信官网下载模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在打开WxPayAPI项目中的example文件下的

NativeNotifyPage.aspx打开网页中的代码页如图:
1230606-20171020173919537-1372800245.png

将以下代码加入进去就能完成:
  1.   public partial class NativeNotifyPage : System.Web.UI.Page
  2.     {
  3.         public static string wxJsApiParam { get; set; } //前段显示
  4.         public string return_result = "";
  5.         protected void Page_Load(object sender, EventArgs e)
  6.         {
  7.            Response.ContentType = "text/plain";
  8.             Response.Write("Hello World");

  9.             LogHelper.WriteLog(typeof(NativeNotifyPage), "可以运行1-1");

  10.             String xmlData = getPostStr();//获取请求数据  
  11.             if (xmlData == "")
  12.             {

  13.             }
  14.             else
  15.             {
  16.                 var dic = new Dictionary<string, string>
  17.                  {
  18.                   {"return_code", "SUCCESS"},
  19.                   {"return_msg","OK"}

  20.                  };
  21.                 var sb = new StringBuilder();
  22.                 sb.Append("<xml>");


  23.                 foreach (var d in dic)
  24.                 {
  25.                     sb.Append("<" + d.Key + ">" + d.Value + "</" + d.Key + ">");
  26.                 }
  27.                 sb.Append("</xml>");





  28.                 //把数据重新返回给客户端  
  29.                 DataSet ds = new DataSet();
  30.                 StringReader stram = new StringReader(xmlData);
  31.                 XmlTextReader datareader = new XmlTextReader(stram);
  32.                 ds.ReadXml(datareader);
  33.                 if (ds.Tables[0].Rows[0]["return_code"].ToString() == "SUCCESS")
  34.                 {

  35.                     LogHelper.WriteLog(typeof(NativeNotifyPage), "数据能返回");


  36.                     string wx_appid = "";//微信开放平台审核通过的应用APPID  
  37.                     string wx_mch_id = "";//微信支付分配的商户号  

  38.                     string wx_nonce_str = "";//     随机字符串,不长于32位  
  39.                     string wx_sign = "";//签名,详见签名算法  
  40.                     string wx_result_code = "";//SUCCESS/FAIL  

  41.                     string wx_return_code = "";
  42.                     string wx_openid = "";//用户在商户appid下的唯一标识  
  43.                     string wx_is_subscribe = "";//用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效  
  44.                     string wx_trade_type = "";//    APP  
  45.                     string wx_bank_type = "";//     银行类型,采用字符串类型的银行标识,银行类型见银行列表  
  46.                     string wx_fee_type = "";//  货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型  


  47.                     string wx_transaction_id = "";//微信支付订单号  
  48.                     string wx_out_trade_no = "";//商户系统的订单号,与请求一致。  
  49.                     string wx_time_end = "";//  支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则  
  50.                     int wx_total_fee = 1;//    订单总金额,单位为分  
  51.                     int wx_cash_fee = 1;//现金支付金额订单现金支付金额,详见支付金额  


  52.                     #region  数据解析  
  53.                     //列 是否存在  
  54.                     string signstr = "";//需要前面的字符串  
  55.                                         //wx_appid  
  56.                     if (ds.Tables[0].Columns.Contains("appid"))
  57.                     {
  58.                         wx_appid = ds.Tables[0].Rows[0]["appid"].ToString();
  59.                         if (!string.IsNullOrEmpty(wx_appid))
  60.                         {
  61.                             signstr += "appid=" + wx_appid;
  62.                         }
  63.                     }

  64.                     //wx_bank_type  
  65.                     if (ds.Tables[0].Columns.Contains("bank_type"))
  66.                     {
  67.                         wx_bank_type = ds.Tables[0].Rows[0]["bank_type"].ToString();
  68.                         if (!string.IsNullOrEmpty(wx_bank_type))
  69.                         {
  70.                             signstr += "&bank_type=" + wx_bank_type;
  71.                         }
  72.                     }
  73.                     //wx_cash_fee  
  74.                     if (ds.Tables[0].Columns.Contains("cash_fee"))
  75.                     {
  76.                         wx_cash_fee = Convert.ToInt32(ds.Tables[0].Rows[0]["cash_fee"].ToString());

  77.                         signstr += "&cash_fee=" + wx_cash_fee;
  78.                     }

  79.                     //wx_fee_type  
  80.                     if (ds.Tables[0].Columns.Contains("fee_type"))
  81.                     {
  82.                         wx_fee_type = ds.Tables[0].Rows[0]["fee_type"].ToString();
  83.                         if (!string.IsNullOrEmpty(wx_fee_type))
  84.                         {
  85.                             signstr += "&fee_type=" + wx_fee_type;
  86.                         }
  87.                     }

  88.                     //wx_is_subscribe  
  89.                     if (ds.Tables[0].Columns.Contains("is_subscribe"))
  90.                     {
  91.                         wx_is_subscribe = ds.Tables[0].Rows[0]["is_subscribe"].ToString();
  92.                         if (!string.IsNullOrEmpty(wx_is_subscribe))
  93.                         {
  94.                             signstr += "&is_subscribe=" + wx_is_subscribe;
  95.                         }
  96.                     }

  97.                     //wx_mch_id  
  98.                     if (ds.Tables[0].Columns.Contains("mch_id"))
  99.                     {
  100.                         wx_mch_id = ds.Tables[0].Rows[0]["mch_id"].ToString();
  101.                         if (!string.IsNullOrEmpty(wx_mch_id))
  102.                         {
  103.                             signstr += "&mch_id=" + wx_mch_id;
  104.                         }
  105.                     }

  106.                     //wx_nonce_str  
  107.                     if (ds.Tables[0].Columns.Contains("nonce_str"))
  108.                     {
  109.                         wx_nonce_str = ds.Tables[0].Rows[0]["nonce_str"].ToString();
  110.                         if (!string.IsNullOrEmpty(wx_nonce_str))
  111.                         {
  112.                             signstr += "&nonce_str=" + wx_nonce_str;
  113.                         }
  114.                     }

  115.                     //wx_openid  
  116.                     if (ds.Tables[0].Columns.Contains("openid"))
  117.                     {
  118.                         wx_openid = ds.Tables[0].Rows[0]["openid"].ToString();
  119.                         if (!string.IsNullOrEmpty(wx_openid))
  120.                         {
  121.                             signstr += "&openid=" + wx_openid;
  122.                         }
  123.                     }

  124.                     //wx_out_trade_no  
  125.                     if (ds.Tables[0].Columns.Contains("out_trade_no"))
  126.                     {
  127.                         wx_out_trade_no = ds.Tables[0].Rows[0]["out_trade_no"].ToString();
  128.                         if (!string.IsNullOrEmpty(wx_out_trade_no))
  129.                         {
  130.                             signstr += "&out_trade_no=" + wx_out_trade_no;
  131.                         }

  132.                     }

  133.                     //wx_result_code   
  134.                     if (ds.Tables[0].Columns.Contains("result_code"))
  135.                     {
  136.                         wx_result_code = ds.Tables[0].Rows[0]["result_code"].ToString();
  137.                         if (!string.IsNullOrEmpty(wx_result_code))
  138.                         {
  139.                             signstr += "&result_code=" + wx_result_code;
  140.                         }
  141.                     }

  142.                     //wx_result_code   
  143.                     if (ds.Tables[0].Columns.Contains("return_code"))
  144.                     {
  145.                         wx_return_code = ds.Tables[0].Rows[0]["return_code"].ToString();
  146.                         if (!string.IsNullOrEmpty(wx_return_code))
  147.                         {
  148.                             signstr += "&return_code=" + wx_return_code;
  149.                         }
  150.                         LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_return_code" + wx_return_code);
  151.                     }

  152.                     //wx_sign   
  153.                     if (ds.Tables[0].Columns.Contains("sign"))
  154.                     {
  155.                         wx_sign = ds.Tables[0].Rows[0]["sign"].ToString();
  156.                         //if (!string.IsNullOrEmpty(wx_sign))  
  157.                         //{  
  158.                         //    signstr += "&sign=" + wx_sign;  
  159.                         //}  
  160.                     }

  161.                     //wx_time_end  
  162.                     if (ds.Tables[0].Columns.Contains("time_end"))
  163.                     {
  164.                         wx_time_end = ds.Tables[0].Rows[0]["time_end"].ToString();
  165.                         if (!string.IsNullOrEmpty(wx_time_end))
  166.                         {
  167.                             signstr += "&time_end=" + wx_time_end;
  168.                         }
  169.                         LogHelper.WriteLog(typeof(NativeNotifyPage), "time_end" + wx_time_end);
  170.                     }

  171.                     //wx_total_fee  
  172.                     if (ds.Tables[0].Columns.Contains("total_fee"))
  173.                     {
  174.                         wx_total_fee = Convert.ToInt32(ds.Tables[0].Rows[0]["total_fee"].ToString());

  175.                         signstr += "&total_fee=" + wx_total_fee;

  176.                         LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_total_fee" + wx_total_fee);
  177.                     }

  178.                     //wx_trade_type  
  179.                     if (ds.Tables[0].Columns.Contains("trade_type"))
  180.                     {
  181.                         wx_trade_type = ds.Tables[0].Rows[0]["trade_type"].ToString();
  182.                         if (!string.IsNullOrEmpty(wx_trade_type))
  183.                         {
  184.                             signstr += "&trade_type=" + wx_trade_type;
  185.                         }
  186.                     }

  187.                     //wx_transaction_id  
  188.                     if (ds.Tables[0].Columns.Contains("transaction_id"))
  189.                     {
  190.                         wx_transaction_id = ds.Tables[0].Rows[0]["transaction_id"].ToString();
  191.                         if (!string.IsNullOrEmpty(wx_transaction_id))
  192.                         {
  193.                             signstr += "&transaction_id=" + wx_transaction_id;
  194.                         }
  195.                         LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_transaction_id" + wx_transaction_id);
  196.                     }

  197.                     #endregion

  198.                     //追加key 密钥  
  199.                     signstr += "&key=" + System.Web.Configuration.WebConfigurationManager.AppSettings["key"].ToString();
  200.                     //签名正确  
  201.                     string orderStrwhere = "ordernumber='" + wx_out_trade_no + "'";



  202.                     if (wx_sign == System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(signstr, "MD5").ToUpper())
  203.                     {
  204.                         //签名正确   处理订单操作逻辑  


  205.                     }
  206.                     else
  207.                     {
  208.                         //追加备注信息  

  209.                     }

  210.                 }
  211.                 else
  212.                 {
  213.                     // 返回信息,如非空,为错误原因  签名失败 参数格式校验错误  
  214.                     string return_msg = ds.Tables[0].Rows[0]["return_msg"].ToString();

  215.                 }


  216.                 return_result = sb.ToString();
  217.             }


  218.         }





  219.    
  220.         public bool IsReusable
  221.         {
  222.             get
  223.             {
  224.                 return false;
  225.             }
  226.         }

  227.         //获得Post过来的数据  
  228.         public string getPostStr()
  229.         {
  230.             Int32 intLen = Convert.ToInt32(System.Web.HttpContext.Current.Request.InputStream.Length);
  231.             byte[] b = new byte[intLen];
  232.             System.Web.HttpContext.Current.Request.InputStream.Read(b, 0, intLen);
  233.             return System.Text.Encoding.UTF8.GetString(b);
  234.         }

  235.    
  236.    
  237.     }
复制代码

备注:记得将方法地址加入到统一下单的中去如图
1230606-20171020174358615-1072903631.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


易域网-您身边的域名管家

henkuai.com是专业的第三方微信开发者平台,为生态而生。


本站为第三方微信开发者平台,非腾讯官方网站。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

欢迎来这里一起喝喝茶,
聊聊你的产品。

微信公众号gongzhongkaifa

工作日12小时内回复。

广告推广
zhongcong@henkuai.com

工作日12小时内回复。

市场合作
songchang@henkuai.com