微信扫码支付asp.net(C#)实现步骤<转>
时间:2016-05-25 10:54:47
收藏:0
阅读:363
今天刚刚开始接触微信支付,从网上找了些资料,先整理在这,但是还没有经过测试
原文链接:http://www.cnblogs.com/valu/p/4339939.html
支付提交页面:
[HttpPost] public ActionResult index(decimal amount) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 string order_no = DateTime.Now.ToString("yyyyMMddHHmmss") + TenpayUtil.BuildRandomStr(4); //这里是数据操作,代码已删除 ViewData["weixin_pay_qr_code"] = string.Format("/get_qrcode?product_id={0}", order_no); return View(); }
输出二维码:
public void get_qrcode(string product_id) { WxPayHelper helper = new WxPayHelper(); Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("appid", config_util.mp_weixin_appid); dic.Add("mch_id", config_util.weixin_mch_id); dic.Add("nonce_str", TenpayUtil.getNoncestr()); dic.Add("product_id", product_id); dic.Add("time_stamp", TenpayUtil.getTimestamp()); dic.Add("sign", helper.GetSign(dic)); string url = WxPayHelper.FormatBizQueryParaMap(dic, false);//这里不要url编码 string code = "weixin://wxpay/bizpayurl?" + url; var qrc = Create_ImgCode(code, 6); System.IO.MemoryStream ms = new System.IO.MemoryStream(); qrc.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); byte[] bytes = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释 ms.Close(); Response.BinaryWrite(bytes); return; }
原生拉取微信支付代码:
public ContentResult index() { if (Request.RequestType == "POST") { try { WxPayHelper helper = new WxPayHelper(); StreamReader reader = new StreamReader(Request.InputStream); String xmlData = reader.ReadToEnd(); helper.ReceivePostXmlData(xmlData); common_util.WriteLog("接收post来的xmlData=" + xmlData); if (helper.CheckSign()) { common_util.WriteLog("签名验证通过"); string product_id = helper.GetProductId(); common_util.WriteLog("产品id=" + product_id); string order_no = product_id;if (产品ID存在) { #region 业务处理 helper.SetParameter("body", "用户充值,用户号:" + item.user_id); helper.SetParameter("out_trade_no", order_no); helper.SetParameter("total_fee", (item.amount * 100).ToString("#"));//这里单位是分 helper.SetParameter("notify_url", "http//www.openweixin.com.cn/notify"); helper.SetParameter("trade_type", "NATIVE"); string prepay_id = helper.GetPrepayId(); common_util.WriteLog("prepay_id=" + prepay_id); if (!string.IsNullOrEmpty(prepay_id)) { helper.SetReturnParameter("return_code", "SUCCESS"); helper.SetReturnParameter("result_code", "SUCCESS"); helper.SetReturnParameter("prepay_id", prepay_id); helper.SetReturnParameter("appid", helper.GetAppId); helper.SetReturnParameter("mch_id", helper.GetMch_Id); helper.SetReturnParameter("nonce_str", TenpayUtil.getNoncestr()); } else { helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码 helper.SetReturnParameter("result_code", "FAIL");//业务结果 helper.SetReturnParameter("err_code_des", "预订单生产失败"); } #endregion } else { helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码 helper.SetReturnParameter("result_code", "FAIL");//业务结果 helper.SetReturnParameter("err_code_des", "此商品无效");//业务结果 } } else { helper.SetReturnParameter("return_code", "FAIL"); helper.SetReturnParameter("return_msg", "签名失败"); common_util.WriteLog("签名验证没有通过"); } string xmlStr = helper.GetReturnXml(); common_util.WriteLog("返回xml=" + xmlStr); Response.ContentType = "text/xml"; Response.Clear(); Response.Write(xmlStr); Response.End(); } catch (Exception ex) { common_util.WriteLog("异常了" + ex); } } return Content("OK"); }
支付成功通知页面:
if (Request.RequestType == "POST") { try { WxPayHelper helper = new WxPayHelper(); StreamReader reader = new StreamReader(Request.InputStream); String xmlData = reader.ReadToEnd(); helper.ReceivePostXmlData(xmlData); common_util.WriteLog("Notify_接收post来的xmlData=" + xmlData); if (helper.CheckSign()) { Dictionary<string, string> dicBack = helper.GetParameter();//获取所有参数 if (dicBack != null && dicBack.Keys.Contains("return_code")) { if (dicBack["return_code"] == "SUCCESS") { common_util.WriteLog("return_code=SUCCESS"); if (dicBack["result_code"] == "SUCCESS") { common_util.WriteLog("result_code=SUCCESS"); string out_trade_no = dicBack["out_trade_no"];//商户订单号 common_util.WriteLog("out_trade_no=" + out_trade_no); //1.验证商户订单号是否被处理 //2.处理过直接返回成功,否则返回 //此处根据out_trade_no 处理业务数据 //处理业务数据结束 common_util.WriteLog("Notify_验证签名成功"); helper.SetReturnParameter("return_code", "SUCCESS"); helper.SetReturnParameter("return_msg", ""); } } if (dicBack["return_code"] == "FAIL") { common_util.WriteLog("Notify_验证签名成功"); helper.SetReturnParameter("return_code", "SUCCESS"); helper.SetReturnParameter("return_msg", dicBack["return_msg"]); } } } else { common_util.WriteLog("Notify_验证签名失败"); helper.SetReturnParameter("return_code", "FAIL"); helper.SetReturnParameter("return_msg", "签名失败"); } string xmlStr = helper.GetReturnXml(); common_util.WriteLog("Notify_返回xml=" + xmlStr); Response.ContentType = "text/xml"; Response.Clear(); Response.Write(xmlStr); Response.End(); } catch (Exception ex) { common_util.WriteLog("Notify_异常了" + ex); } } return Content("OK");
评论(0)