又为大家带来简单的c#后台支付结果回调方法,首先还是要去微信官网下载模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在打开WxPayAPI项目中的example文件下的
NativeNotifyPage.aspx打开网页中的代码页如图:
将以下代码加入进去就能完成:
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 10 LogHelper.WriteLog(typeof(NativeNotifyPage), "可以运行1-1"); 11 12 String xmlData = getPostStr();//获取请求数据 13 if (xmlData == "") 14 { 15 16 } 17 else 18 { 19 var dic = new Dictionary<string, string> 20 { 21 {"return_code", "SUCCESS"}, 22 {"return_msg","OK"} 23 24 }; 25 var sb = new StringBuilder(); 26 sb.Append("<xml>"); 27 28 29 foreach (var d in dic) 30 { 31 sb.Append("<" + d.Key + ">" + d.Value + "</" + d.Key + ">"); 32 } 33 sb.Append("</xml>"); 34 35 36 37 38 39 //把数据重新返回给客户端 40 DataSet ds = new DataSet(); 41 StringReader stram = new StringReader(xmlData); 42 XmlTextReader datareader = new XmlTextReader(stram); 43 ds.ReadXml(datareader); 44 if (ds.Tables[0].Rows[0]["return_code"].ToString() == "SUCCESS") 45 { 46 47 LogHelper.WriteLog(typeof(NativeNotifyPage), "数据能返回"); 48 49 50 string wx_appid = "";//微信开放平台审核通过的应用APPID 51 string wx_mch_id = "";//微信支付分配的商户号 52 53 string wx_nonce_str = "";// 随机字符串,不长于32位 54 string wx_sign = "";//签名,详见签名算法 55 string wx_result_code = "";//SUCCESS/FAIL 56 57 string wx_return_code = ""; 58 string wx_openid = "";//用户在商户appid下的唯一标识 59 string wx_is_subscribe = "";//用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效 60 string wx_trade_type = "";// APP 61 string wx_bank_type = "";// 银行类型,采用字符串类型的银行标识,银行类型见银行列表 62 string wx_fee_type = "";// 货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 63 64 65 string wx_transaction_id = "";//微信支付订单号 66 string wx_out_trade_no = "";//商户系统的订单号,与请求一致。 67 string wx_time_end = "";// 支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 68 int wx_total_fee = 1;// 订单总金额,单位为分 69 int wx_cash_fee = 1;//现金支付金额订单现金支付金额,详见支付金额 70 71 72 #region 数据解析 73 //列 是否存在 74 string signstr = "";//需要前面的字符串 75 //wx_appid 76 if (ds.Tables[0].Columns.Contains("appid")) 77 { 78 wx_appid = ds.Tables[0].Rows[0]["appid"].ToString(); 79 if (!string.IsNullOrEmpty(wx_appid)) 80 { 81 signstr += "appid=" + wx_appid; 82 } 83 } 84 85 //wx_bank_type 86 if (ds.Tables[0].Columns.Contains("bank_type")) 87 { 88 wx_bank_type = ds.Tables[0].Rows[0]["bank_type"].ToString(); 89 if (!string.IsNullOrEmpty(wx_bank_type)) 90 { 91 signstr += "&bank_type=" + wx_bank_type; 92 } 93 } 94 //wx_cash_fee 95 if (ds.Tables[0].Columns.Contains("cash_fee")) 96 { 97 wx_cash_fee = Convert.ToInt32(ds.Tables[0].Rows[0]["cash_fee"].ToString()); 98 99 signstr += "&cash_fee=" + wx_cash_fee; 100 } 101 102 //wx_fee_type 103 if (ds.Tables[0].Columns.Contains("fee_type")) 104 { 105 wx_fee_type = ds.Tables[0].Rows[0]["fee_type"].ToString(); 106 if (!string.IsNullOrEmpty(wx_fee_type)) 107 { 108 signstr += "&fee_type=" + wx_fee_type; 109 } 110 } 111 112 //wx_is_subscribe 113 if (ds.Tables[0].Columns.Contains("is_subscribe")) 114 { 115 wx_is_subscribe = ds.Tables[0].Rows[0]["is_subscribe"].ToString(); 116 if (!string.IsNullOrEmpty(wx_is_subscribe)) 117 { 118 signstr += "&is_subscribe=" + wx_is_subscribe; 119 } 120 } 121 122 //wx_mch_id 123 if (ds.Tables[0].Columns.Contains("mch_id")) 124 { 125 wx_mch_id = ds.Tables[0].Rows[0]["mch_id"].ToString(); 126 if (!string.IsNullOrEmpty(wx_mch_id)) 127 { 128 signstr += "&mch_id=" + wx_mch_id; 129 } 130 } 131 132 //wx_nonce_str 133 if (ds.Tables[0].Columns.Contains("nonce_str")) 134 { 135 wx_nonce_str = ds.Tables[0].Rows[0]["nonce_str"].ToString(); 136 if (!string.IsNullOrEmpty(wx_nonce_str)) 137 { 138 signstr += "&nonce_str=" + wx_nonce_str; 139 } 140 } 141 142 //wx_openid 143 if (ds.Tables[0].Columns.Contains("openid")) 144 { 145 wx_openid = ds.Tables[0].Rows[0]["openid"].ToString(); 146 if (!string.IsNullOrEmpty(wx_openid)) 147 { 148 signstr += "&openid=" + wx_openid; 149 } 150 } 151 152 //wx_out_trade_no 153 if (ds.Tables[0].Columns.Contains("out_trade_no")) 154 { 155 wx_out_trade_no = ds.Tables[0].Rows[0]["out_trade_no"].ToString(); 156 if (!string.IsNullOrEmpty(wx_out_trade_no)) 157 { 158 signstr += "&out_trade_no=" + wx_out_trade_no; 159 } 160 161 } 162 163 //wx_result_code 164 if (ds.Tables[0].Columns.Contains("result_code")) 165 { 166 wx_result_code = ds.Tables[0].Rows[0]["result_code"].ToString(); 167 if (!string.IsNullOrEmpty(wx_result_code)) 168 { 169 signstr += "&result_code=" + wx_result_code; 170 } 171 } 172 173 //wx_result_code 174 if (ds.Tables[0].Columns.Contains("return_code")) 175 { 176 wx_return_code = ds.Tables[0].Rows[0]["return_code"].ToString(); 177 if (!string.IsNullOrEmpty(wx_return_code)) 178 { 179 signstr += "&return_code=" + wx_return_code; 180 } 181 LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_return_code" + wx_return_code); 182 } 183 184 //wx_sign 185 if (ds.Tables[0].Columns.Contains("sign")) 186 { 187 wx_sign = ds.Tables[0].Rows[0]["sign"].ToString(); 188 //if (!string.IsNullOrEmpty(wx_sign)) 189 //{ 190 // signstr += "&sign=" + wx_sign; 191 //} 192 } 193 194 //wx_time_end 195 if (ds.Tables[0].Columns.Contains("time_end")) 196 { 197 wx_time_end = ds.Tables[0].Rows[0]["time_end"].ToString(); 198 if (!string.IsNullOrEmpty(wx_time_end)) 199 { 200 signstr += "&time_end=" + wx_time_end; 201 } 202 LogHelper.WriteLog(typeof(NativeNotifyPage), "time_end" + wx_time_end); 203 } 204 205 //wx_total_fee 206 if (ds.Tables[0].Columns.Contains("total_fee")) 207 { 208 wx_total_fee = Convert.ToInt32(ds.Tables[0].Rows[0]["total_fee"].ToString()); 209 210 signstr += "&total_fee=" + wx_total_fee; 211 212 LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_total_fee" + wx_total_fee); 213 } 214 215 //wx_trade_type 216 if (ds.Tables[0].Columns.Contains("trade_type")) 217 { 218 wx_trade_type = ds.Tables[0].Rows[0]["trade_type"].ToString(); 219 if (!string.IsNullOrEmpty(wx_trade_type)) 220 { 221 signstr += "&trade_type=" + wx_trade_type; 222 } 223 } 224 225 //wx_transaction_id 226 if (ds.Tables[0].Columns.Contains("transaction_id")) 227 { 228 wx_transaction_id = ds.Tables[0].Rows[0]["transaction_id"].ToString(); 229 if (!string.IsNullOrEmpty(wx_transaction_id)) 230 { 231 signstr += "&transaction_id=" + wx_transaction_id; 232 } 233 LogHelper.WriteLog(typeof(NativeNotifyPage), "wx_transaction_id" + wx_transaction_id); 234 } 235 236 #endregion 237 238 //追加key 密钥 239 signstr += "&key=" + System.Web.Configuration.WebConfigurationManager.AppSettings["key"].ToString(); 240 //签名正确 241 string orderStrwhere = "ordernumber='" + wx_out_trade_no + "'"; 242 243 244 245 if (wx_sign == System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(signstr, "MD5").ToUpper()) 246 { 247 //签名正确 处理订单操作逻辑 248 249 250 } 251 else 252 { 253 //追加备注信息 254 255 } 256 257 } 258 else 259 { 260 // 返回信息,如非空,为错误原因 签名失败 参数格式校验错误 261 string return_msg = ds.Tables[0].Rows[0]["return_msg"].ToString(); 262 263 } 264 265 266 return_result = sb.ToString(); 267 } 268 269 270 } 271 272 273 274 275 276 277 public bool IsReusable 278 { 279 get 280 { 281 return false; 282 } 283 } 284 285 //获得Post过来的数据 286 public string getPostStr() 287 { 288 Int32 intLen = Convert.ToInt32(System.Web.HttpContext.Current.Request.InputStream.Length); 289 byte[] b = new byte[intLen]; 290 System.Web.HttpContext.Current.Request.InputStream.Read(b, 0, intLen); 291 return System.Text.Encoding.UTF8.GetString(b); 292 } 293 294 295 296 }
备注:记得将方法地址加入到统一下单的中去如图