程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# MVC 微信領取教程系列之大眾號領取代碼

C# MVC 微信領取教程系列之大眾號領取代碼

編輯:C#入門知識

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();

這個辦法曾經被我刪掉了,用處是用於,我們收到用戶的款之後,我們需求同步一些數據到我們的數據庫外面去,所以,該怎樣操作,自己自行修正了。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved