本文主要講解asp.net mvc框架下公衆號支付如何實現,公衆號支付主要包括三個核心代碼,前臺調起支付js代碼、對應js調用參數參數生成代碼、支付成功處理代碼。html
微信提供了各類支付方式,試用於各類不一樣的支付場景,主要有以下幾種:前端
一、刷卡支付ajax
刷卡支付是用戶展現微信錢包內的「刷卡條碼/二維碼」給商戶系統掃描後直接完成支付的模式。主要應用線下面對面收銀的場景。json
掃碼支付是商戶系統按微信支付協議生成支付二維碼,用戶再用微信「掃一掃」完成支付的模式。該模式適用於PC網站支付、實體店單品或訂單支付、媒體廣告支付等場景。api
公衆號支付是用戶在微信中打開商戶的H5頁面,商戶在H5頁面經過調用微信支付提供的JSAPI接口調起微信支付模塊完成支付。應用場景有:瀏覽器
APP支付又稱移動端支付,是商戶經過在移動端應用APP中集成開放SDK調起微信支付模塊完成支付的模式。微信
五、H5支付mvc
H5支付用於在手機端微信外瀏覽器進行支付,筆者的測試本支付方式在微信內不能使用。框架
具體相關代碼以下:asp.net
var _wxJsApiParam; function callpay() { if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } } else { jsApiCall(); } } //調用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke('getBrandWCPayRequest', _wxJsApiParam, function (res) { if (res.err_msg == "get_brand_wcpay_request:cancel") { $.messager.alert('提示信息', '支付已經取消!', 'info'); return false; } else if (res.err_msg == "get_brand_wcpay_request:ok") { //支付成功 $.messager.alert('提示信息', '支付成功!', 'info'); } }); } $(function () { $("#buyBtn").click(function () { //調起微信公衆號JsApi支付 $.ajax({ url: "/Pay/GenerateOrder", type: 'post', cache: false, dataType: 'html', data: { OBJECTID: $("#OBJECTID").val() }, success: function (data) { if (data != "Error") { _wxJsApiParam = eval('(' + data + ')'); callpay(); } else $.messager.alert('提示信息', '生成訂單失敗!', 'info'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); return; } }); }); });
/// <summary> /// 生成訂單及JSAPI提交參數 /// </summary> /// <param name="tmpModel"></param> /// <returns></returns> [HttpPost] public ActionResult GenerateOrder() { try { //調用支付 JsApiPay jsApiPay = new JsApiPay(); jsApiPay.bodyStr = "商品名稱"; jsApiPay.attachStr = "附加信息"; jsApiPay.orderId = "訂單編號"; jsApiPay.openid = "OpenId"; jsApiPay.total_fee = 1;//測試 訂單金額(1表示分,正式金額要*100) //JSAPI支付預處理 //調用統一下單,得到下單結果 WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult(); //從統一下單成功返回的數據中獲取微信瀏覽器調起jsapi支付所需的參數 var wxJsApiParam = jsApiPay.GetJsApiParameters(); //獲取到的是json格式字符串 return Content(wxJsApiParam); } catch (Exception e) { return Content("Error"); } }
/// <summary> /// 支付成功後臺處理方法 /// </summary> /// <returns></returns> [HttpPost] public virtual ActionResult JsApiNotifyUrl() { WxPayData notifyData = GetNotifyData(); //檢查支付結果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,則當即返回結果給微信支付後臺 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付結果中微信訂單號不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml()); return Content("支付結果中微信訂單號不存在"); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); string trade_no = notifyData.GetValue("out_trade_no").ToString();//訂單號 //查詢訂單,判斷訂單真實性 if (!QueryOrder(transaction_id)) { //若訂單查詢失敗,則當即返回結果給微信支付後臺 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "訂單查詢失敗"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml()); return Content("訂單查詢失敗"); } //查詢訂單成功 else { WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml()); //更新支付狀態 return Content("支付成功" + res.ToXml()); } }
5、源碼下載地址:http://www.kwstu.com/ResourcesView/weixin_201710301110519827
聯繫QQ:806693619