微信公众平台:扫一扫demo

时间:2018-06-17 13:37:51   收藏:0   阅读:300
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.返回顶部
 
技术分享图片 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!