支付提交頁面:
[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");
以上代碼全部經過實體網站測試成功運行。