zoukankan      html  css  js  c++  java
  • C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置

    官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.BF.E7.94.A8.E6.AD.A5.E9.AA.A4

    ,很多人在config接口注入权限验证配置的时候出现signature(签名无效),在这把自己开发的代码分享一下

    一、验证权限我们需要获取四个参数appId、timestamp、nonceStr、signature
    参数获取详细见官方文档:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E9.99.84.E5.BD.951-JS-SDK.E4.BD.BF.E7.94.A8.E6.9D.83.E9.99.90.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95
    注意:①access_token获取方法见我之前的的文章http://www.cnblogs.com/net-xiejun/p/4422890.html

       ②jsapi_ticket获取到jsapi_ticket有效时间为7200s,因为每天获取的jsapi_ticket数量有限,所以也必须缓存,方法见代码
    CS代码:
     1         #region 验证JsApi权限配置
     2         /// <summary>
     3         /// 获取JsApi权限配置的数组/四个参数
     4         /// </summary>
     5         /// <returns></returns>
     6         public string GetJsApiInfo(string Appid, string Appsecret)
     7         {
     8             string timestamp = CommonMethod.ConvertDateTimeInt(DateTime.Now).ToString();//生成签名的时间戳
     9             string nonceStr = CommonMethod.GetRandCode(16);//生成签名的随机串
    10             string url = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.ToString();//当前的地址
    11             string jsapi_ticket = "";
    12             //ticket 缓存7200秒
    13             if (System.Web.HttpContext.Current.Session["jsapi_ticket"] == null)
    14             {
    15                 jsapi_ticket = CommonMethod.WebRequestPostOrGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + BasicApi.GetTokenSession(Appid, Appsecret) + "&type=jsapi", "");
    16                 System.Web.HttpContext.Current.Session["jsapi_ticket"] = jsapi_ticket;
    17                 System.Web.HttpContext.Current.Session.Timeout = 7200;
    18             }
    19             else
    20             {
    21                 jsapi_ticket = System.Web.HttpContext.Current.Session["jsapi_ticket"].ToString();
    22             }
    23             Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(jsapi_ticket);
    24             jsapi_ticket = respDic["ticket"].ToString();//获取ticket
    25             string[] ArrayList = { "jsapi_ticket=" + jsapi_ticket, "timestamp=" + timestamp, "noncestr=" + nonceStr, "url=" + url };
    26             Array.Sort(ArrayList);
    27             string signature = string.Join("&", ArrayList);
    28             signature = FormsAuthentication.HashPasswordForStoringInConfigFile(signature, "SHA1").ToLower();
    29             return "{"appId":"" + Appid + "", "timestamp":" + timestamp + ","nonceStr":"" + nonceStr + "","signature":"" + signature + ""}";
    30         }
    31         #endregion

    二、js文件,页面多的话建议单独见一个js文件 每次引用js文件 就可以,代码如下:

     1 /*!
     2 * http://xxxxx.com/ 谢俊个人博客
     3  * 使用前需要配置安全域名 在公众号后台微信功能设置
     4  * 引用js文件 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 还有 jquery.js
     5  * Copyright 2015,谢俊
     6  * 时间:2015年6月9号 10:18
     7  */
     8 function wxconfig(data) {
     9     wx.config({
    10         debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    11         appId: data.appId, // 必填,公众号的唯一标识
    12         timestamp: data.timestamp, // 必填,生成签名的时间戳
    13         nonceStr: data.nonceStr, // 必填,生成签名的随机串
    14         signature: data.signature,// 必填,签名,见附录1
    15         jsApiList: [
    16         'checkJsApi',
    17         'onMenuShareTimeline',
    18         'onMenuShareAppMessage',
    19         'onMenuShareQQ',
    20         'onMenuShareWeibo',
    21         'hideMenuItems',
    22         'showMenuItems',
    23         'hideAllNonBaseMenuItem',
    24         'showAllNonBaseMenuItem',
    25         'translateVoice',
    26         'startRecord',
    27         'stopRecord',
    28         'onRecordEnd',
    29         'playVoice',
    30         'pauseVoice',
    31         'stopVoice',
    32         'uploadVoice',
    33         'downloadVoice',
    34         'chooseImage',
    35         'previewImage',
    36         'uploadImage',
    37         'downloadImage',
    38         'getNetworkType',
    39         'openLocation',
    40         'getLocation',
    41         'hideOptionMenu',
    42         'showOptionMenu',
    43         'closeWindow',
    44         'scanQRCode',
    45         'chooseWXPay',
    46         'openProductSpecificView',
    47         'addCard',
    48         'chooseCard',
    49         'openCard'
    50         ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    51     });
    52 }
    53 
    54 wx.ready(function () {
    55     //是否支持js接口
    56     document.querySelector('#checkJsApi').onclick = function () {
    57         wx.checkJsApi({
    58             jsApiList: [
    59               'onMenuShareTimeline',
    60               'onMenuShareAppMessage',
    61               'onMenuShareQQ',
    62               'onMenuShareWeibo'
    63             ],
    64             success: function (res) {
    65                 alert(JSON.stringify(res));
    66             }
    67         });
    68     };
    69 })

    三、页面调用,引用相关js文件后代码如下

    <script>
        var data = '@Html.Raw(ViewData["JsApiirray"].ToString())';
        data = eval("(" + data + ")");//实例化
        wxconfig(data);
    </script>
    

     注:JsApiirray为后台调用GetJsApiInfo方法获取的json格式的字符串"{"appId":"" + Appid + "", "timestamp":" + timestamp + ","nonceStr":"" + nonceStr + "","signature":"" + signature + ""}";

    源码下载:https://github.com/xiejun-net/weixin

    如有疑问加我qq咨询405877988 

    本文版权归作者(谢俊)和博客园所有,欢迎转载,转载请标明出处。

    原文地址:http://www.cnblogs.com/net-xiejun/

    微信开发群C#.NETWEB程序开发交流

    完整源码下载:https://github.com/xiejun-net/weixin

    个人公众账号:

  • 相关阅读:
    JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)
    An internal error occurred during: "Launching New_configuration"
    Android 创建虚拟机时“提示no system images installed for this target”
    [转] 传说中的WCF(2):服务协定的那些事儿
    [转] 传说中的WCF
    python的包管理
    python入门常用方法(转json,模拟浏览器请求头,写入文件)
    python读写数据篇
    python跳坑手记
    python爬虫入门篇
  • 原文地址:https://www.cnblogs.com/net-xiejun/p/4573289.html
Copyright © 2011-2022 走看看