C# MVC 微信領取教程系列之大眾號領取代碼。本站提示廣大學習愛好者:(C# MVC 微信領取教程系列之大眾號領取代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C# MVC 微信領取教程系列之大眾號領取代碼正文
明天,我們接著講微信領取的系列教程,後面,我們講了這個微信紅包和掃碼領取。如今,我們講講這個大眾號領取。大眾號領取的使用環境罕見的用戶經過大眾號,然後再經過大眾號外面的菜單鏈接,進入大眾號的商城,然後在外面完成購置和領取功用,我們可以看看官方對這個大眾號領取的場景的解釋,鏈接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1,經過這個官方的解釋,那我們大約清楚這個大眾號的用處了,上面,我就說說,做這個大眾號領取的預備任務有哪些了。
1、下載微信web開發者工具,工具的運用方式,也看鏈接,地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140&token=&lang=zh_CN
2、配置“微信領取”環境,如下圖:

3、受權獲取用戶信息,如下圖:

上面開端,一步一步往下走。
一、我們先開發順序,首先,新建一個MVC工程(asp.net的話,官方給的demo就是asp.net的,可以下載來參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1),名為:微信領取之大眾號領取,如下圖:

然後右鍵項目,我們修正一上司性,如下圖:
然後我們再把順序自動生成的HomeController.cs和View外面的刪掉,再新建一個HomeController.cs和添加View,代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Web.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
}
}
View代碼:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
</div>
</body>
</html>
嗯,沒錯,目前還是空的,如今我們開端寫前台,代碼如下(我先貼上代碼,後續再解釋為啥這麼做,由於假如一步步的寫下去,依照後面兩個的篇幅來,我覺得都可以開課了,所以,我先上代碼,然後再一步步解釋。):
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>電表充值服務</title>
<link href="~/Scripts/jquery-easyui-1.4.5/themes/bootstrap/easyui.css" rel="stylesheet" />
<link href="~/Scripts/jquery-easyui-1.4.5/themes/mobile.css" rel="stylesheet" />
<link href="~/Scripts/jquery-easyui-1.4.5/themes/icon.css" rel="stylesheet" />
<style type="text/css">
body{
margin:0;
padding:0;
}
.logo {
width: 100%;
height: 70px;
background: url(/Images/EleLogo.png" />
最後,把順序發布出來,這次我們把Web發布在http://gzh.lmx.ren上 ,然後再把接口權限,改為這樣的,如下圖:

留意,這外面的域名和下面我們發布的域名要分歧。
除此以外,我們還需求改這裡:

就是一定要受權這裡,否則,領取的時分,會提示其他錯誤,詳細,我就不測試了。
另外,這裡其實曾經完成了這個大眾號的領取的流程了,但是,我們頁面上,會友善的提示(其實不友善,提示是白色的,在頭部,提示別輸出密碼什麼),這是由於,我們還沒把我們這個http://gzh.lmx.ren域名設置為平安域名,設置之後,就不會在提示了。設置辦法如下圖:

在這外面參加我們的域名,就完滿了。。。
我的代碼都盡量精簡,多余的,我都會丟掉,就是為了防止混雜視聽。假如代碼外面,有寫的不清楚的,可以私信問我,或群裡來問我,群號在文章末端。
如今,我開端逐個解釋我下面的做法。
首先,在後端,頁面加載的時分,他會先執行
public ActionResult Index()
{
if (Session["openid"] == null)
{
try
{
//調用【網頁受權獲取用戶信息】接口獲取用戶的openid和access_token
GetOpenidAndAccessToken();
}
catch (Exception ex)
{
//Response.Write(ex.ToString());
//throw;
}
}
return View();
}
這外面就是為了獲取用戶的Openid和Access_token,這個用處很大,還有就是,我們經過代碼可以知道,我們經過這個辦法,可以獲取到微信的一些相關信息,獲取完了之後,他會前往到我們的頁面下去,url就存在一個session外面,如下:
Session["url"] = url;
接著,在前端:
當頁面加載終了之後,會執行以下JS辦法,如下:
$(function () {
var vCode = getQueryString("code");
if (vCode != "" && vCode != null) {
//alert(vCode);
$.ajax({
type: 'post',
data: {
code: vCode
},
url: '/Home/getWxInfo',
success: function (sjson) {
//alert(sjson);
//var vData = JSON.stringify(sjson);
//alert(vData);
$.messager.show({
title: '提示',
msg: '歡送您離開微信端充值中心。'
});
}
})
}
else {
$.ajax({
type: 'post',
url: '/Home/getCode',
success: function (sjson) {
//alert(sjson);
location.href = sjson;
}
})
}
})
他會先獲取閱讀器的url,然後獲取code,就是普通url前面的xxx.com?code=xxx,這外面就是首先判別有無code,假如沒有code,則,我們去後台懇求這個code。為什麼懇求這個code呢?我們來看這個辦法: getWxInfo,如下圖:
/// <summary>
/// 獲取code
/// </summary>
/// <returns></returns>
[HttpPost]
public ActionResult getCode()
{
object objResult = "";
if (Session["url"] != null)
{
objResult = Session["url"].ToString();
}
else
{
objResult = "url為空。";
}
return Json(objResult);
}
他就會前往url到前端,前端經過js去訪問那個網址,那個網址就是微信端獲取到我們的信息之後,給我們依照規則再前往一個url,這rul就是我們前面需求後去的code的url。這個code對我們至關重要,由於前面我們要做跟領取有關的任務,都用到的。有了code,我們才干拿到openid和access_token。詳細看代碼邏輯也可以明了。
好,走到這一步,我們曾經知道openid和access_token了,這個時分,我們就擔任處置前端的東西。
前端,我就一個金額輸出框,然後一個提交,實踐使用中,我們一定還需求傳入商品的參數,我這外面就不寫那些多余的了,後續你們自己加出來就可以了。這外面在點擊提交的時分,會調用微信的環境,看上面的代碼:
//初始化微信領取環境
function fCharge() {
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
} else {
fPostCharge();
}
}
他會初始化一下環境,假如初始化成功,代表,這個頁面是在微信客戶端外面運轉的,那麼我們就給他運轉我們真正的充值代碼提交,所以,就會執行:fPostCharge();
提交之後,就會進入後台,後台需求組織我們前台需求用到的參數,其中包括如下:
/// <summary>
/// 充值
/// </summary>
/// <returns></returns>
[HttpPost]
public ActionResult MeterRecharge()
{
object objResult = "";
string strTotal_fee = Request.Form["totalfee"];
string strFee = (double.Parse(strTotal_fee) * 100).ToString();
//若傳遞了相關參數,則調一致下單接口,取得後續相關接口的入口參數
jsApiPay.openid = Session["openid"].ToString();
jsApiPay.total_fee = int.Parse(strFee);
//JSAPI領取預處置
try
{
string strBody = "南宮蕭塵微信領取";//商品描繪
WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult(strBody);
WxPayData wxJsApiParam = jsApiPay.GetJsApiParameters();//獲取H5調起JS API參數
ModelForOrder aOrder = new ModelForOrder()
{
appId = wxJsApiParam.GetValue("appId").ToString(),
nonceStr = wxJsApiParam.GetValue("nonceStr").ToString(),
packageValue = wxJsApiParam.GetValue("package").ToString(),
paySign = wxJsApiParam.GetValue("paySign").ToString(),
timeStamp = wxJsApiParam.GetValue("timeStamp").ToString(),
msg = "成功下單,正在接入微信領取."
};
objResult = aOrder;
}
catch (Exception ex)
{
ModelForOrder aOrder = new ModelForOrder()
{
appId = "",
nonceStr = "",
packageValue = "",
paySign = "",
timeStamp = "",
msg = "下單失敗,請重試,屢次失敗,請聯絡管理員."
};
objResult = aOrder;
}
return Json(objResult);
}
我們次要需求提供的就是這個類ModelForOrder 外面的參數,然後再把這些參數前往給前台調用,如下:
//調用微信領取模塊
function onBridgeReady(json) {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": json.appId, //大眾號稱號,由商戶傳入
"timeStamp": json.timeStamp, //時間戳,自1970年以來的秒數
"nonceStr": json.nonceStr, //隨機串
"package": json.packageValue,
"signType": "MD5", //微信簽名方式:
"paySign": json.paySign //微信簽名
},
function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
//alert("領取成功,請稍後查詢余額,如有疑問,請聯絡管理員.");
fAlreadyPay();
} // 運用以上方式判別前端前往,微信團隊鄭重提示:res.err_msg將在用戶領取成功後前往 ok,但並不保證它相對牢靠。
}
);
}
這樣,他就會彈出一個微信領取的窗口,如下:

然後我們確認付款之後,能否付款成功,假如付款成功,我們在執行: fAlreadyPay();
這個辦法曾經被我刪掉了,用處是用於,我們收到用戶的款之後,我們需求同步一些數據到我們的數據庫外面去,所以,該怎樣操作,自己自行修正了。
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持。