微信公衆平臺:掃一掃demo

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

 

1.返回頂部
一、Web.config
  <appSettings>
    <add key="appid" value="<appid>"/>
    <add key="secret" value="<secret>"/>
  </appSettings>
二、
2.返回頂部
一、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;
            }
        }
    }
}
二、
3.返回頂部
一、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-常見錯誤及解決辦法」解決,如仍未能解決可經過如下渠道反饋:
         * 郵箱地址:weixin-open@qq.com
         * 郵件主題:【微信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>
二、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
 *
 * 若有問題請經過如下渠道反饋:
 * 郵箱地址:weixin-open@qq.com
 * 郵件主題:【微信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);
});
三、
4.返回頂部
 
5.返回頂部
 
 
6.返回頂部
 
warn 做者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。
相關文章
相關標籤/搜索