• 微信公众平台:扫一扫demo


    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-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
             * 邮箱地址: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>
    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
     *
     * 如有问题请通过以下渠道反馈:
     * 邮箱地址: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);
    });
    3、
    4.返回顶部
     
    5.返回顶部
     
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    DataGrip破解,汉化. 再见navicate, 再见sqlyog
    centOS安装JIRA 破解版 亲测
    centOS yum 安装 JDK
    CentOS No manual entry for xxx 没有手册文档
    idea集成JRebel热部署破解
    springboot 拦截器取不到 ajax跨域请求的header参数
    centOS安装ELK
    产品经理的”影响力“
    系统设计的一些心得
    EXIF.Js:读取图片的EXIF信息
  • 原文地址:https://www.cnblogs.com/storebook/p/9192629.html
Copyright © 2020-2023  润新知