參考文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
項目安裝Senparc.Weixin、Senparc.Weixin.MP、Senparc.Weixin.MP.MvcExtension 三個NuGet包。
微信公眾平台開發文檔,JSSDK使用步驟-前三步
步驟一:綁定域名
先登錄微信公眾平台進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。
備注:登錄后可在“開發者中心”查看對應的接口權限。
步驟二:引入JS文件
在需要調用JS接口的頁面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js
如需進一步提升服務穩定性,當上述資源不可訪問時,可改訪問:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。
備注:支持使用 AMD/CMD 標准模塊加載方法加載
步驟三:通過config接口注入權限驗證配置
所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調用(同一個url僅需調用一次,對於變化url的SPA的web app可在每次url變化時進行調用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實現web app的頁面會導致簽名失敗,此問題會在Android6.2中修復)。
wx.config({ debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。 appId: '', // 必填,公眾號的唯一標識 timestamp: , // 必填,生成簽名的時間戳 nonceStr: '', // 必填,生成簽名的隨機串 signature: '',// 必填,簽名 jsApiList: [] // 必填,需要使用的JS接口列表 });
一、參數說明
appId:微信公眾平台-開發-基本配置-公眾號開發信息-開發者ID(AppId)
timestamp:獲取當前時間戳,js獲取方法如下:
var timestamp=Date.parse(new Date());
nonceStr:隨機字符串,js獲取方法如下:
function randomString(len) {
len = len || 32;
var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默認去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
var maxPos = $chars.length;
var pwd = '';
for (i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
}
var nonceStr = randomString(32);
signature:簽名,獲取方法:
post or get 訪問:
public static string WebRequestPostOrGet(string sUrl, string sParam)
{
byte[] bt = System.Text.Encoding.UTF8.GetBytes(sParam);
Uri uriurl = new Uri(sUrl);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uriurl);
req.Method = "Post";
req.Timeout = 120 * 1000;
req.ContentType = "application/x-www-form-urlencoded;";
req.ContentLength = bt.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(bt, 0, bt.Length);
reqStream.Flush();
}
try
{
using (WebResponse res = req.GetResponse())
{
Stream resStream = res.GetResponseStream();
StreamReader resStreamReader = new StreamReader(resStream, System.Text.Encoding.UTF8);
string resLine;
System.Text.StringBuilder resStringBuilder = new System.Text.StringBuilder();
while ((resLine = resStreamReader.ReadLine()) != null)
{
resStringBuilder.Append(resLine + System.Environment.NewLine);
}
resStream.Close();
resStreamReader.Close();
return resStringBuilder.ToString();
}
}
catch (Exception ex)
{
return ex.Message;
}
}
獲取jsapi_ticket:
public string GetAccessToken()
{
string AppId="微信公眾號開發者ID";
return Senparc.Weixin.MP.Containers.AccessTokenContainer.GetAccessToken(AppId);
}
public string Getjsapi_ticket()
{
string jsapi_ticket = "";
string AccessToken = GetAccessToken();
string Url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + AccessToken + "&type=jsapi";
jsapi_ticket = WebRequestPostOrGet(Url, "");
return jsapi_ticket;
}
public string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url)
{
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);
string string1 = string1Builder.ToString();
return Sha1(string1);
}
public static string Sha1(string orgStr, string encode = "UTF-8")
{
var sha1 = new SHA1Managed();
var sha1bytes = System.Text.Encoding.GetEncoding(encode).GetBytes(orgStr);
byte[] resultHash = sha1.ComputeHash(sha1bytes);
string sha1String = BitConverter.ToString(resultHash).ToLower();
sha1String = sha1String.Replace("-", "");
return sha1String;
}
js調用:
$.ajax({
url: "@Url.Content("~/WeiXin/Getjsapi_ticket")",
type: "get",
success: function (data) {
var jsapi_ticket = JSON.parse(data).ticket;
var noncestr = randomString(32);//隨機字符串
var timestamp = Date.parse(new Date());//獲取時間戳
var url = location.href;//當前url
var str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url;
var signature = "";
$.ajax({
url: "@Url.Content("~/Weixin/GetSignature")",
type: "get",
data: { jsapi_ticket: jsapi_ticket, noncestr: noncestr, timestamp: timestamp, url: url },
success: function (Signature) {
signature = Signature;
wx.config({
debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
appId: '', // 必填,公眾號的唯一標識
timestamp: timestamp, // 必填,生成簽名的時間戳
nonceStr: noncestr, // 必填,生成簽名的隨機串
signature: signature,// 必填,簽名
jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表
});
}
});
},
error: function (err) {
}
});
jsApiList:接口列表:['scanQRCode']
二、打開微信掃碼接口
wx.scanQRCode({
needResult: 1, // 默認為0,掃描結果由微信處理,1則直接返回掃描結果,
scanType: ["qrCode"], //"qrCode", "barCode" 可以指定掃二維碼還是一維碼,默認二者都有
success: function (res) {
var result = res.resultStr; // 當needResult 為 1 時,掃碼返回的結果
}
});
得到掃碼結果后,可根據自己的業務需求進行后續操作。
注:以上代碼屬個人整理,用於交流學習,非原創。如涉及侵權,請聯系我,我立即處理。(QQ/微信:742010299 昵稱:同心同德)
