前两天要用到微信JS库的的一句话——wx.closeWindow();但是整个调用过程有点儿泪奔了。。。。
虽然开发者平台上说的清清楚楚,但是使用起来就是not ok!
登录到微信公众平台:
在公众号设置里面:
找到功能设置,填入JS接口安全域名:
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> </script>
感觉这里的调用还是相当繁琐的,希望微信能做个安全方便的接口来调用。
// wx.config({ // debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 // appId: '<%=appId%>', // 必填,公众号的唯一标识 // timestamp: <%=timestamp%>, // 必填,生成签名的时间戳 // nonceStr: '<%=nonceStr%>', // 必填,生成签名的随机串 // signature: '<%=Signature%>',// 必填,签名,见附录1 // jsApiList: ['closeWindow'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 // });
appid,timestamp,noncestr,jsApiList都是比较好填写的参数,唯一比较麻烦的是签名。
签名步骤比较小复杂:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
/// <summary> /// 生成签名 /// </summary> /// <param name="jsapi_ticket">The jsapi_ticket.</param> /// <param name="noncestr">The noncestr.</param> /// <param name="timestamp">The timestamp.</param> /// <param name="url">The URL.</param> /// <returns>System.String.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/1 18:20:43</remarks> private string GetSignature() { WxAccount wa = WxAccountAdapter.Instance.LoadByCode(PubAccCode);//获取当前公众号 WebClientBase wcb = new WebClientBase(); //获取Access_token信息 string strAccess_token = wcb.RequestMyWebClient(EnumSubmitMethod.Get, "", "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wa.AppID + "&secret=" + wa.AppSecret); access_tokenEntity at = WxAPITools.JSONUtil<access_tokenEntity>.FromJsonToObject<access_tokenEntity>(strAccess_token); string strJson = wcb.RequestMyWebClient(EnumSubmitMethod.Get, "", "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + at.access_token + "&type=jsapi"); jsapi_ticket jt = WxAPITools.JSONUtil<jsapi_ticket>.FromJsonToObject<jsapi_ticket>(strJson);//转化为对象 string url = HttpContext.Current.Request.Url.ToString(); url = url.IndexOf("#") >= 0 ? url.Substring(0, url.IndexOf("#")) : url; string tmpStr = "jsapi_ticket=" + jt.ticket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + url; return FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); } /// <summary> /// jsapi_ticket是公众号用于调用微信JS接口的临时票据 /// </summary> /// <remarks>Editor:v-liuhch CreateTime:2015/6/1 18:25:27</remarks> public class jsapi_ticket { public string errcode { get; set; } public string errmsg { get; set; } public string ticket { get; set; } public string expires_in { get; set; } } /// <summary> /// Class access_tokenEntity /// </summary> /// <remarks>Editor:v-liuhch CreateTime:2015/6/1 21:08:07</remarks> public class access_tokenEntity { public string access_token { get; set; } public string expires_in { get; set; } }
需要注意的是URL地址到底取的是哪一部分;获取数据的方式都是get;对所有待签名参数按照字段名的ASCII 码从小到大排序;
如果开启debug后,返回一个config:ok就说明成功了。
PS:确认接口签名的时候,可以使用微信提供的这个网页调试工具:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign