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 + "\"}";

如有疑问加我qq咨询405877988 微信开发群

时间: 2024-08-03 10:14:56

C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置的相关文章

微信开发配置JSSDK,注入权限验证,以及invalid signature签名错误解决

在微信开发中很多功能都要用到微信JSSDK,关于JSSDK的使用,微信官方的文档已经比较详细,一定要仔细去看文档. <script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 我们先进入微信SDK的JS文件.在页面中使用ajax注入权限验证,关于后台的验证以及签名算法,官方文档写的很详细,也有demo可以查看. $(function(){ //var url = window.lo

微信开发-微信公众平台开放JS-SDK

微信开放JS-SDK,助理网页开发 微信公众平台面向开发者开放微信内网页开发工具包(微信JS-SDK) JS-SDK这个工具包提供了以下 11 类的接口集,开发者从今天开始可以调用以下功能,让基于微信的Web-App 提供更好的体验给用户. 分享类接口: 图像类接口: 音频类接口: 智能类接口: 设备信息类接口: 地理位置类接口: 界面操作类接口: 微信扫一扫接口: 微信小店接口: 微信卡券接口: 微信支付接口: 这些接口中,除了图像类接口和地理位置类接口中的部分功能,其他大多数本身就是微信才有

微信开发微信“摇一摇&#183;周边”正式开放

今日,在微信公开课第三季长沙站现场,微信团队宣布“摇一摇·周边”(以下简称“摇周边”)正式对外开放.拥有微信认证的公众帐号商户,均可通过摇周边的商户申请平台(https://zb.weixin.qq.com/)或者微信公众平台后台申请入驻.联合微信支付.公众帐号.微信卡包,摇周边为更多商家提供了便捷连接用户和精准近场服务的能力. 据悉,摇周边还将于 4 月 13 日开展“免费送设备”体验活动,前 2000 名入驻的商户将有机会获得微信团队免费赠送的摇周边设备. 摇周边是微信基于低功耗蓝牙技术的

微信开发微信支付接口调试工具,不用花生壳也行

1:为什么要使用ngrok 在微信开发的时候 需要填写与微信服务器相连接的url 这个url必须是外网域名, 也就是说我们需要在这个外网域名对应的ip服务器上做开发,而没办法本地开发调试 所以用ngrok获得一个外网域名 这个外网域名实际访问的是本地主机 这样把此外网域名填入到微信需要的外网url里 就可以在本地开发调试了 2:下载ngrok ngrok - secure introspectable tunnels to localhostwindows版 3:注册ngrok 得到your a

微信开发 --- 微信支付

首先是微信支付的一个SDK:可以下载微信支付的 SDK 看上面的具体方法: 地址: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 示例: 原文地址:https://www.cnblogs.com/e0yu/p/8523838.html

最新微信公众平台js sdk整合PHP版

由于没有持续关注微信公众平台相关的开发,所以看到这个东西时,都没有耐心看完开发文档,或者不知道重点. 重点在哪呢?重点在示例代码:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E9.99.84.E5.BD.956-DEMO.E9.A1.B5.E9.9D.A2.E5.92.8C.E7.A4.BA.E4.BE.8B.E4.BB.A3.E7.A0.81 新版的sdk,变得对开发人员非常友好,直接支持调试模式.

【微信开发】JS和PHP分别判断当前浏览器是否微信浏览器

1.PHP端 //判断是否微信浏览器 -xzz1125 function is_weixin() { if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) { return true; } return false; } 2.JS端 <script type="text/javascript"> window.onload = function(){ if(isWeiXin()){ //do

微信开发微信网页授权登陆不成功的问题

最近一直在研究围绕微信平台的相关开发,其中踩到了不少坑,特来此记录一番,也方便交流.真想吐槽为什么微信弄个开放平台还要加一个公众平台呢?两边文档还不一样.类似的功能还得写两次.上网查了下,果然有人在喷微信文档多次误导第三方sdk写错了:) 上次接到一个任务,PC网站要支持微信第三方登陆功能.一直以为是在服务号那边做相应的配置和处理,看的是这边的文档 .尝试了多次都是提示scope没有相关权限,授权地址格式如下: [javascript] https://open.weixin.qq.com/co

微信开发-微信一般帮助类

public class CommonUtil { #region 微信相关帮助 /// <summary> /// 生成指定长度的签名的随机串 /// </summary> /// <param name="length"></param> /// <returns></returns> public static String CreateNoncestr(int length) { String chars