1. 程式人生 > >微信公眾平臺:掃一掃demo

微信公眾平臺:掃一掃demo

sel src 創建時間 語言 公眾 scala next 明顯 pass

ylbtech-微信公眾平臺:掃一掃demo

1.返回頂部
1、Web.config
  <appSettings>
    <add key="appid" value="<appid>"/>
    <add key="secret" value="<secret>"/>
  </appSettings>
2、
2.返回頂部
1、GetWxConfig.aspx.cs
using System;
using System.Configuration;
using System.Net;
using System.Text; using System.Web.Security; using System.Web.Services; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Gyg.Web.wechat { public partial class GetWxConfig : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { }
#region 獲取AccessToken /// <summary> /// 獲取AccessToken /// </summary> /// <returns></returns> private static string GetAccessToken() { //https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", "client_credential", ConfigurationManager.AppSettings["appid"], ConfigurationManager.AppSettings["secret"]); var wc = new WebClient(); var strReturn = wc.DownloadString(tokenUrl); return strReturn; } #endregion #region 獲取Jsapi_Ticket /// <summary> /// 獲取Jsapi_Ticket /// </summary> /// <param name="accessToken"></param> /// <returns></returns> private static string GetWeiXinJsapi_Ticket(string accessToken) { string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type={1}", accessToken, "jsapi"); var wc = new WebClient(); var strReturn = wc.DownloadString(tokenUrl); //取得微信返回的json數據 return strReturn; } #endregion #region 基礎字符 /// <summary> /// 基礎字符 /// </summary> private static string[] strs = new string[] { "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" }; #endregion #region 創建隨機字符串 /// <summary> /// 創建隨機字符串 /// </summary> /// <returns></returns> private static string CreatenNonce_str() { Random r = new Random(); var sb = new StringBuilder(); var length = strs.Length; for (int i = 0; i < 15; i++) { sb.Append(strs[r.Next(length - 1)]); } return sb.ToString(); } #endregion #region 創建時間戳 /// <summary> /// 創建時間戳 /// </summary> /// <returns></returns> private static long CreatenTimestamp() { return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; } #endregion #region 簽名算法 /// <summary> /// 簽名算法 ///本代碼來自開源微信SDK項目:https://github.com/night-king/weixinSDK /// </summary> /// <param name="jsapi_ticket">jsapi_ticket</param> /// <param name="noncestr">隨機字符串(必須與wx.config中的nonceStr相同)</param> /// <param name="timestamp">時間戳(必須與wx.config中的timestamp相同)</param> /// <param name="url">當前網頁的URL,不包含#及其後面部分(必須是調用JS接口頁面的完整URL)</param> /// <returns></returns> public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url, out string string1) { var string1Builder = new StringBuilder(); string1Builder.Append("jsapi_ticket=").Append(jsapi_ticket).Append("&") .Append("noncestr=").Append(noncestr).Append("&") .Append("timestamp=").Append(timestamp).Append("&") .Append("url=").Append(url.IndexOf("#") >= 0 ? url.Substring(0, url.IndexOf("#")) : url); string1 = string1Builder.ToString(); return FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1"); } #endregion //GET api/GetInfoMation /// <summary> ///初始化的數據調用微信接口返回參數 /// </summary> /// <returns></returns> [WebMethod] public static string GetInfoMation(string url) { try { //WxLog.Debug("進入方法", "來了"); //生成tokcen string tocken = GetAccessToken(); JObject TokenJO = (JObject)JsonConvert.DeserializeObject(tocken); //驗證簽名 string Jsapi_Ticket = GetWeiXinJsapi_Ticket(TokenJO["access_token"].ToString()); JObject Jsapi_TicketJo = (JObject)JsonConvert.DeserializeObject(Jsapi_Ticket); #region string rtn = ""; string jsapi_ticket = Jsapi_TicketJo["ticket"].ToString(); string noncestr = CreatenNonce_str(); long timestamp = CreatenTimestamp(); string outstring = ""; string JS_SDK_Result = GetSignature(jsapi_ticket, noncestr, timestamp, url, out outstring); //拼接json串返回前臺 rtn = "{\"appid\":\"" + ConfigurationManager.AppSettings["appid"] + "\",\"jsapi_ticket\":\"" + jsapi_ticket + "\",\"noncestr\":\"" + noncestr + "\",\"timestamp\":\"" + timestamp + "\",\"outstring\":\"" + outstring + "\",\"signature\":\"" + JS_SDK_Result.ToLower() + "\"}"; #endregion return rtn; } catch (Exception ex) { return string.Empty; } } } }
2、
3.返回頂部
1、demo.html
<!DOCTYPE html>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>微信JS-SDK Demo</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
    <link rel="stylesheet" href="./src/style.css">
    <script src="../jQuery.js"></script>
</head>
<body ontouchstart="">
        <div class="lbox_close wxapi_form">
            <h3 id="menu-scan">微信掃一掃</h3>
            <span class="desc">調起微信掃一掃接口</span>
            <button class="btn btn_primary" id="scanQRCode0">scanQRCode(微信處理結果)</button>
            <button class="btn btn_primary" id="scanQRCode1">scanQRCode(直接返回結果)</button>

    </div>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script>
        /*
         * 註意:
         * 1. 所有的JS接口只能在公眾號綁定的域名下調用,公眾號開發者需要先登錄微信公眾平臺進入“公眾號設置”的“功能設置”裏填寫“JS接口安全域名”。
         * 2. 如果發現在 Android 不能分享自定義內容,請到官網下載最新的包覆蓋安裝,Android 自定義分享接口需升級至 6.0.2.58 版本及以上。
         * 3. 常見問題及完整 JS-SDK 文檔地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
         *
         * 開發中遇到問題詳見文檔“附錄5-常見錯誤及解決辦法”解決,如仍未能解決可通過以下渠道反饋:
         * 郵箱地址:[email protected]
         * 郵件主題:【微信JS-SDK反饋】具體問題
         * 郵件內容說明:用簡明的語言描述問題所在,並交代清楚遇到該問題的場景,可附上截屏圖片,微信團隊會盡快處理你的反饋。
         */
        var link = location.href;
        $.ajax({
            url: "/wechat/GetWxConfig.aspx/GetInfoMation",//後臺給你提供的接口
            type: "Post",
            data: "{ ‘url‘: ‘" + link + "‘ }",
            async: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                var datad = JSON.parse(data.d); //轉譯為Json字符串
                wx.config({
                    debug: false,
                    appId: datad.appid,
                    timestamp: datad.timestamp,
                    nonceStr: datad.noncestr,
                    signature: datad.signature,
                    jsApiList: [
                      scanQRCode
                    ]
                });
                wx.error(function (res) {
                    alert(res);
                });
            },
            error: function (e) {
                alert(e.responseText);
            }
        });
</script>
    <script src="./src/demo.js"> </script>

</body>
</html>
2、src/demo.js
/*
 * 註意:
 * 1. 所有的JS接口只能在公眾號綁定的域名下調用,公眾號開發者需要先登錄微信公眾平臺進入“公眾號設置”的“功能設置”裏填寫“JS接口安全域名”。
 * 2. 如果發現在 Android 不能分享自定義內容,請到官網下載最新的包覆蓋安裝,Android 自定義分享接口需升級至 6.0.2.58 版本及以上。
 * 3. 完整 JS-SDK 文檔地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
 *
 * 如有問題請通過以下渠道反饋:
 * 郵箱地址:[email protected]
 * 郵件主題:【微信JS-SDK反饋】具體問題
 * 郵件內容說明:用簡明的語言描述問題所在,並交代清楚遇到該問題的場景,可附上截屏圖片,微信團隊會盡快處理你的反饋。
 */
wx.ready(function () {
  // 9 微信原生接口
  // 9.1.1 掃描二維碼並返回結果
  document.querySelector(‘#scanQRCode0‘).onclick = function () {
    wx.scanQRCode();
  };
  // 9.1.2 掃描二維碼並返回結果
  document.querySelector(‘#scanQRCode1‘).onclick = function () {
    wx.scanQRCode({
      needResult: 1,
      desc: ‘scanQRCode desc‘,
      success: function (res) {
        alert(JSON.stringify(res));
      }
    });
  };
});

wx.error(function (res) {
  alert(res.errMsg);
});
3、
4.返回頂部
5.返回頂部
6.返回頂部
技術分享圖片 作者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

微信公眾平臺:掃一掃demo