关于微信公众号开发和小程序开发的教程其实网上已经有不少了,可是基于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