在做本配置之前需要去微信配置后台增加jssdk域名的授权!
步骤1.在body结束处引用官方的JS文件!
<script src=”http://res.wx.qq.com/open/js/jweixin-1.0.0.js“></script>
步骤2.在JS文件引用后面配置wx.config及 方法调用!我本项目只引用了微信内置的扫描二维码与经纬度坐标调用!
如:
<script>*/wx.config({debug: false,appId: ‘<%=appid %>’,timestamp: ‘<%=timestamp %>’,nonceStr: ‘<%=nonceStr %>’,signature: ‘<%=signature %>’,jsApiList: [‘getLocation’,‘scanQRCode’,]});// 获取当前地理位置document.querySelector(‘#getLocation’).onclick = function () {wx.getLocation({success: function (res) {alert(JSON.stringify(res));},cancel: function (res) {alert(‘用户拒绝授权获取地理位置’);}});};//扫描二维码并返回结果document.querySelector(‘#scanQRCode0’).onclick = function () {wx.scanQRCode();};wx.error(function (res) {alert(res.errMsg);});</script>
其中config中需要注意的:timestamp,nonceStr,signature,jsApiList
timestamp为十位的时间标签精确到秒:DateTime.Now.ToString(“MMddhhmmss”)
nonceStr为十位的随机数:我调用的自己写的方法使用System.Guid.NewGuid()生成的!business.LMFile.LMCreatRandom(10);
jsApiList:为调用的模块例如我至调用了微信扫一扫与GPS定位,请参考官方说明!
signature:这个也是最复杂的一个东西需要使用jsapi_ticket+noncestr+timestamp+当前URL生成SHA1加密格式的密钥,并且是key+value的格式,我是这么写的!
key = “jsapi_ticket=” + jsapi_ticket + “&noncestr=” + nonceStr + “×tamp=” + timestamp + “&url=” + thisurl;
signature = FormsAuthentication.HashPasswordForStoringInConfigFile(key, “SHA1”).ToLower(); /转小写格式!
其中的jsapi_ticket是用 access_token去换取的:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi
access_token是用appid与appsecret换取的: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}PS:因为access_token的有效期为7200秒,建议做全局缓存每7199秒获取一次就可以了!也已使用反馈的ERROR信息做重新拉取!微信对获取access_token是有限制的100000次每日,因为当前开发项目足够使用了就没做缓存了!
后台完整代码如下!
==============================================================================
using System;using System.Collections.Generic;using System.Data.SqlClient;using System.Configuration;using System.Text;using System.Data;using System.IO;using System.Net;using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.Security;namespace WxPayAPI.items{public partial class startgo : System.Web.UI.Page{public string appid = ConfigurationManager.AppSettings[“AppId”];public string appsecret = ConfigurationManager.AppSettings[“AppSecret”];public string timestamp;public string nonceStr;public string signature;public string accesstoken;public string thisurl;public string openid = “”;public string key = “”;public string jsapi_ticket = “”;
protected void Page_Load(object sender, EventArgs e){if (Session[“openid”] == null){Response.Redirect(“/items/signup.aspx”);}else{openid = Session[“openid”].ToString();getaccess_toke();Session[“timestamp”] = timestamp = DateTime.Now.ToString(“MMddhhmmss”);Session[“nonceStr”] = nonceStr = business.LMFile.LMCreatRandom(10);Session[“thisurl”] = thisurl = Request.Url.ToString();Session[“key”] = key = “jsapi_ticket=” + jsapi_ticket + “&noncestr=” + nonceStr + “×tamp=” + timestamp + “&url=” + thisurl;Session[“signature”] = signature = FormsAuthentication.HashPasswordForStoringInConfigFile(key, “SHA1”).ToLower();string binding = business.LMFile.LMSQLSelectKeyword(“Binding_Openid”, “select [Binding_Openid] from [Bike_Binding] where [Binding_Openid] = ‘” + openid + “‘;”); ;if (binding == “”){Response.Redirect(“/items/binding.aspx”);}}}public void getaccess_toke(){//签名算法:第一步 获得access_tokenstring url = string.Format(“https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}”, appid, appsecret);string result = business.HttpClientHelper.GetResponse(url);//business.LogHelper.WriteLog(result);JObject outputObj = JObject.Parse(result);Session[“accesstoken”] = accesstoken = outputObj[“access_token”].ToString();//第二步 获得jsapi_ticketurl = string.Format(“https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi”, accesstoken);string result1 = business.HttpClientHelper.GetResponse(url);//business.LogHelper.WriteLog(result1);JObject outputObj1 = JObject.Parse(result1);//将json转为数组Session[“jsapi_ticket”] = jsapi_ticket = outputObj1[“ticket”].ToString(); //获取ticket}}}
雷铭小才
2017-04-28 13:26:18