本文講前端如何獨立的進行微信開發(沒有搭建後臺,如何經過config接口注入權限驗證配置)。css
一、申請微信公衆號成功後,進入微信公衆平臺(https://mp.weixin.qq.com/),登陸。html
二、在開發者工具中選擇公衆平臺測試帳號,點擊進入,微信掃碼受權登陸。前端
三、進入測試號頁面,獲得測試號信息:jquery
四、完成JS-SDK使用權限簽名算法。git
首先獲取access_token(有效期7200秒,開發者必須在本身的服務全局緩存access_token):打開連接https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,連接中的APPID和APPSECRET用步驟3中獲得的測試號信息對應的替換,便可成功返回access_token,好比個人返回數據以下:github
{ access_token: "br8H90LtER9bYV2X6w21gn2ncpNsk47jJqlunDxYHVVLqsjjP99OJd3cLTxrNg_xp7Pxry_aZ5JBVClfjrXE07m9j3LkSkFRDvDhmSK3Lp0BwsafdgTD0ZrnaDnkd0RuUCMjAJANVF", expires_in: 7200 }
而後獲取jsapi_ticket(有效期7200秒,開發者必須在本身的服務全局緩存jsapi_ticket):打開連接https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi,連接中的ACCESS_TOKEN用上一步獲取的access_token替換,便可成功返回jsapi_ticket,好比個人返回數據以下:算法
{ errcode: 0, errmsg: "ok", ticket: "kgt8ON7yVITDhtdwci0qefauZHtIntmVAA1tkdyuhJBV868ar6VeAiJpPeg-hDCbtfKfWaHOGS28YeeeqPyHTQ", expires_in: 7200 }
而後按照微信文檔說明的簽名算法獲取signature。api
下面咱們分解一下該簽名算法:緩存
首先準備原材料,一共須要四個原料:noncestr(隨機字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網頁的URL,不包含#及其後面部分) 。jsapi_ticket在咱們完成以上步驟後就獲得了,url就是咱們開發的頁面的url,那麼咱們實際上只差隨機字符串和時間戳。安全
如今咱們經過如下代碼製造一個隨機字符串:
function generateRandomString() { return (Math.random().toString(36).substr(2)); } var noncestr = encodeURIComponent(generateRandomString());
經過微信文檔示例,發現時間戳單位爲秒,因而咱們經過如下代碼實現:
var timestamp1 = new Date().getTime()/1000; var timestamp = timestamp1.toFixed(0);
那麼如今原材料備齊!
接下來按照規則處理原材料。首先完成拼接:
var array = new Array(jsapi_ticket, noncestr, timestamp, url); var str = 'jsapi_ticket=' + array[0] + '&' + 'noncestr=' + array[1] + '&' + 'timestamp=' + array[2] + '&' + 'url=' + array[3];
而後對上面拼接完的字符串進行sha1加密,便可獲得signature。可是怎麼加密呢?通過實踐發現,咱們可使用cryptoJS,參考cryptoJS(https://github.com/brix/crypto-js)在github上的說明,經過如下代碼加密:
var sign = CryptoJS.SHA1(str).toString();
五、參考微信文檔JSSDK使用步驟,前2步就不說了,主要說一下步驟三,經過config接口注入權限驗證配置。經過本文以上步驟,咱們能夠直接配置以下:
wx.config({ debug: true, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印。 appId: '你的測試號appid', // 必填,公衆號的惟一標識 timestamp: timestamp, // 必填,生成簽名的時間戳 nonceStr: noncestr, // 必填,生成簽名的隨機串 signature: sign, // 必填,簽名,見附錄1 jsApiList: ['chooseImage'] // 必填,須要使用的JS接口列表,全部JS接口列表見附錄2 });
六、開啓服務器,訪問頁面,just enjoy your coding!
附錄:
1、注意事項:
一、開發頁面的url要配置到上文3中提到的js接口安全域名中(不然config配置時會報錯invalid url domain);
二、手機微信要關注測試公衆號,不然訪問頁面後沒法體驗設計到微信接口的功能。
2、參考文獻:
一、微信JS-SDK說明文檔(http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html);
二、crypto-js(https://github.com/brix/crypto-js)。
3、感謝老大cyn的指導。
4、demo代碼以下.
html文件:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
<title>test</title>
<link rel="stylesheet" href="../../dist/css/index.css" />
<script src="../../dist/lib/jquery/jquery-2.2.0.min.js"></script>
<script src="../../dist/lib/wx/jweixin-1.0.0.js"></script>
<script src="../../dist/lib/crypto-js.js"></script>
<script src="../../dist/js/main.js"></script>
</head>
<body>
hello world!
</body>
</html>
js文件:
/** * * @authors lovelyun * */ $(function () { var data = { token: { access_token: "your token", expires_in: 7200 }, ticket: { errcode: 0, errmsg: "ok", ticket: "your ticket", expires_in: 7200 } }; var noncestr = encodeURIComponent(generateRandomString()); var timestamp1 = new Date().getTime()/1000; var timestamp = timestamp1.toFixed(0); var jsapi_ticket = data.ticket.ticket; var url = 'http://192.168.2.109:3000/dist/html/index.html'; var array = new Array(jsapi_ticket, noncestr, timestamp, url); var str = 'jsapi_ticket=' + array[0] + '&' + 'noncestr=' + array[1] + '&' + 'timestamp=' + array[2] + '&' + 'url=' + array[3]; var sign = CryptoJS.SHA1(str).toString(); function generateRandomString() { return (Math.random().toString(36).substr(2)); } wx.config({ debug: true, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印。 appId: 'your appid', // 必填,公衆號的惟一標識 timestamp: timestamp, // 必填,生成簽名的時間戳 nonceStr: noncestr, // 必填,生成簽名的隨機串 signature: sign, // 必填,簽名,見附錄1 jsApiList: ['chooseImage'] // 必填,須要使用的JS接口列表,全部JS接口列表見附錄2 }); });