微信公眾號(hào)支付(MVC版本)
一、獲取微信支付 MCHID,KEY,APPID,APPSecret 四個(gè)支付關(guān)鍵值.
微信支付商戶平臺(tái) https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F
1.登錄微信支付商戶平臺(tái)獲取到商戶號(hào)(MCHID),
2.在"賬號(hào)中心"欄目下"API安全"欄目里設(shè)置API密鑰(KEY)
微信公眾號(hào): https://mp.weixin.qq.com/
1.登錄微信公眾在"基本配置"欄獲取應(yīng)用ID(APPID)和應(yīng)用密鑰(APPSecret)
2.在"接口權(quán)限"欄目下"網(wǎng)頁賬號(hào)"綁定正式支付的域名 (如:××××.net,不要http:和"/"斜杠)
3.在"微信支付"欄目下"開發(fā)配置"里面設(shè)置公眾支付的支付授權(quán)目錄(如:××××.net/WeChatWeb/)
二、把WxPayAPI添加到制作項(xiàng)目中,在Config.cs文件里修改獲取到的MCHID,KEY,APPID,APPSecret四個(gè)關(guān)鍵值以及NOTIFY_URL值(NOTIFY_URL是支付授權(quán)目錄),并在MVC項(xiàng)目里建一個(gè)WeChatWeb控制器,里面加上邏輯代碼.并傳遞微信jsapi支付所需的參數(shù).代碼示例如下:
后臺(tái)Action代碼
/// <summary>
/// 獲取微信支付相關(guān)信息
/// </summary>
/// <returns></returns>
[HttpGet]
public virtual ActionResult Index()
{
JsApiPay jsApiPay = new JsApiPay();
OStudent model = null;
try
{
//調(diào)用【網(wǎng)頁授權(quán)獲取用戶信息】接口獲取用戶的openid和access_token
jsApiPay.GetOpenidAndAccessToken();
//獲取微信支付者公共id
jsApiPay.openid = jsApiPay.openid;
string ID = Request["ID"]; //如果要獲取頁面?zhèn)鬟f過來的值,需修改GetOpenidAndAccessToken()方法里面的代碼,加上Request.Url.Query獲取參數(shù)
model = OStudentSiteService.GetByKey(id).AppendData as OStudent;
if (model != null)
{
jsApiPay.total_fee = 1;//測試 訂單金額(1表示分,正式金額要*100)
jsApiPay.Order_ID = model.order_ID; //訂單號(hào)(自己定義訂單號(hào))
}
//JSAPI支付預(yù)處理
//調(diào)用統(tǒng)一下單,獲得下單結(jié)果
WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult();
//從統(tǒng)一下單成功返回的數(shù)據(jù)中獲取微信瀏覽器調(diào)起jsapi支付所需的參數(shù)
var wxJsApiParam = jsApiPay.GetJsApiParameters(); //獲取到的是json格式字符串
ViewBag.wxJsApiParam = wxJsApiParam; //前臺(tái)頁面js調(diào)用
Log.Debug(this.GetType().ToString(), "wxJsApiParam : " + wxJsApiParam);
}
catch (Exception ex)
{
Response.Write(ex.Message + "," + ex.Source);
Response.End();
}
return View(model);
}
//修改支付方式
[HttpPost]
public virtual JsonResult PayMethod()
{
AjaxJsonResult ajax = new AjaxJsonResult() { err = true, msg = string.Empty, timeout = 3 };
string id = Request.Form["id"];
string payMethod = Request.Form["payMethod"];
var model = (Project.Core.Models.Model.OStudent)OStudentSiteService.GetByKey(id).AppendData;
model.payMethod = payMethod; //支付方式
OperationResult result = OStudentSiteService.Modify(model);
if (result.ResultType == OperationResultType.Success)
{
ajax.err = false;
ajax.msg = "操作成功";
}
return Json(ajax);
}
/// <summary>
/// 修改支付狀態(tài)
/// </summary>
/// <param name="userID"></param>
/// <returns></returns>
[HttpPost]
public virtual string EditPayStatus(Guid userID)
{
string msg = "error";
var model = OStudentSiteService.GetByKey(userID).AppendData as OStudent;
model.Status = (int)X.Project.Site.Models.Enum.PayStatus.Success; //付款成功
OperationResult result = OStudentSiteService.Modify(model);
if (result.ResultType == OperationResultType.Success)
{
msg = "ok";
}
return msg;
}
前臺(tái)Index.chtml視圖頁面JS代碼
<script type="text/javascript">
var _wxJsApiParam = eval('(@Html.Raw(ViewBag.wxJsApiParam))');
function callpay() {
//選擇支付方式
var payMethod = $("input[name='PayMethod']:checked").val();
if (payMethod == "" || payMethod == null) {
layer.msg("請(qǐng)選擇支付方式", function () { })
return false;
}
$.ajax({
type: "POST",
dataType: "JSON",
url: '@Url.Action("PayMethod", "WeChatWeb")',
data: {
payMethod: payMethod,
id: '@Model.ID'
},
success: function (data) {
//表示修改支付方式成功
if (!data.err) {
//1表示微信支付,則調(diào)用微信支付
if (payMethod == "1") {
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();
}
} else if (payMethod == "2") {
layer.alert('恭喜您,操作成功!', function () {
window.location.href = "@Url.Action(MVC.Default.Index())" ; //操作成功后的跳轉(zhuǎn)頁面
});
}
} else {
layer.msg("操作失敗", function () { })
return false;
}
}
});
}
//調(diào)用微信JS api 支付
function jsApiCall() {
WeixinJSBridge.invoke('getBrandWCPayRequest', _wxJsApiParam,
function (res) {
if (res.err_msg == "get_brand_wcpay_request:cancel") {
layer.msg("已取消支付", function () { });
return false;
} else if (res.err_msg == "get_brand_wcpay_request:ok") {
//支付成功
//ajax
$.ajax({
type: "POST",
dataType: "text",
url: '@Url.Action("EditPayStatus", "WeChatWeb")',
data: {
userID: '@Model.ID'
},
error: function (request) {
layer.msg("服務(wù)器錯(cuò)誤!", function () { });
return false;
},
success: function (data) {
window.location.href = "@Url.Action(MVC.Default.Index())"; //支付成功后跳轉(zhuǎn)的頁面
}
}); //ajax end
}
});
}
</script>
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例
- nodejs微信公眾號(hào)支付開發(fā)
- 微信公眾號(hào)可通過現(xiàn)金紅包接口發(fā)放微信支付現(xiàn)金紅包(附開發(fā)教程)
- Thinkphp微信公眾號(hào)支付接口
- 微信公眾號(hào)支付之坑:調(diào)用支付jsapi缺少參數(shù) timeStamp等錯(cuò)誤解決方法
- 微信支付PHP SDK之微信公眾號(hào)支付代碼詳解
- 微信公眾號(hào)支付(二)實(shí)現(xiàn)統(tǒng)一下單接口
- 微信公眾號(hào)支付(一)如何獲取用戶openId
- java開發(fā)微信公眾號(hào)支付
- 微信公眾平臺(tái)支付開發(fā)詳解
相關(guān)文章
asp.net中IDataParameter調(diào)用存儲(chǔ)過程的實(shí)現(xiàn)方法
這篇文章主要介紹了asp.net中IDataParameter調(diào)用存儲(chǔ)過程的實(shí)現(xiàn)方法,在asp.net數(shù)據(jù)庫程序設(shè)計(jì)中非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09
asp.net中利用ashx實(shí)現(xiàn)圖片防盜鏈代碼
直接分析盜鏈原理:看下面用httpwatch截獲的http發(fā)送的數(shù)據(jù)2008-11-11
ASP.NET2.0數(shù)據(jù)庫入門之SqlDataSource
ASP.NET2.0數(shù)據(jù)庫入門之SqlDataSource...2006-09-09
asp.net中JavaScript數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)代碼
我對(duì)JavaScript一直不了解。常常為了一點(diǎn)點(diǎn)的數(shù)據(jù)驗(yàn)證和無刷新就去動(dòng)用AJAX,實(shí)在不爽——有點(diǎn)殺雞用牛刀的感覺。2010-05-05
ASP.NET實(shí)現(xiàn)單點(diǎn)登陸(SSO)適用于多種情況
這篇文章主要介紹了ASP.NET在不同情況下實(shí)現(xiàn)單點(diǎn)登陸(SSO)的方法,在同主域但不同子域之間實(shí)現(xiàn)單點(diǎn)登陸等等2014-09-09
詳解在ASP.NET Core下使用SignalR技術(shù)
本篇文章主要介紹了在ASP.NET Core下使用SignalR技術(shù) ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02

