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