關於微信公衆號開發和小程序開發的教程其實網上已經有不少了,可是基於koa.js 開發的教程其實很少,因而接下來對踩坑的經歷作一些小結;javascript
本身也寫了一個微信工具類,項目地址是微信工具類java
目錄結構git
1. 微信網頁js-sdkgithub
接口調用請求說明小程序
`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${appsecret}`
複製代碼
參數 | 必須 | 說明 |
---|---|---|
grant_type | 是 | 受權類型,獲取access_token填寫client_credential |
appid | 是 | 用戶惟一憑證 |
appsecret | 是 | 用戶惟一憑證密鑰 |
接口調用請求說明api
`https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=${accessToken}&type=jsapi`
複製代碼
參數 | 必須 | 說明 |
---|---|---|
access_token | 是 | 從上一步中獲取或者緩存中未過時的access_token |
type | 是 | 填寫爲jsapi |
getNonceStr() {
let text = '';
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for (let i = 0; i < 16; i += 1) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}
複製代碼
getTimestamp() {
return (`${new Date().valueOf()}`).slice(0, -3);
}
複製代碼
const crypto = require('crypto');
// ...
getSign(apiTicket, noncestr, timestamp, url) {
const sortData = `jsapi_ticket=${apiTicket}&noncestr=${noncestr}×tamp=${timestamp}&url=${url}`;
return crypto.createHash('sha1').update(sortData).digest('hex');
}
複製代碼
1、 在須要調用JS接口的頁面引入以下JS文件,(支持https): res.wx.qq.com/open/js/jwe…緩存
2、全部須要使用JS-SDK的頁面必須先注入配置信息,不然將沒法調用微信
wx.config({
debug: true, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印。
appId: '', // 必填,公衆號的惟一標識
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機串
signature: '',// 必填,簽名
jsApiList: [] // 必填,須要使用的JS接口列表
});
複製代碼
// 一個存放小程序對應的appid 和secret的對象,這裏能夠實現爲存放在數據,演示說明則簡略
const miniGameMap = {
app: {
appid: '...',
appsecret: '...',
}
}
getMiniLoginData(code, appName) {
const appInfo = miniGameMap[appName];
let result = {
errcode: 40029,
errMsg: '無效的小程序信息',
};
if (appInfo) {
const miniappid = appInfo.appid;
const miniappsecret = appInfo.appsecret;
const reqUrl = `https://api.weixin.qq.com/sns/jscode2session?appid=${miniappid}&secret=${miniappsecret}&js_code=${code}&grant_type=authorization_code`;
// HttpClient 能夠替換爲自定義的請求庫,不作限制
result = HttpClient.request(reqUrl).then(HttpClient.responseAdapter);
}
return result;
}
複製代碼
微信JS-SDK說明文檔session