赞
踩
算是个系列内容吧,最终要实现的是将uniCloud作为后端完成“扫码关注公众号后完成网站登录”
将要涉及的内容可能包括:
0.准备工作:各种配置、基础搭建
1.接受、解析、组装xml消息
2.请求access_token并缓存(本节)
3.生成带参数二维码
4.引入、封装redis缓存方法
5.引入、配置、初始化unipush
6.解析不同情况下用户扫码时推送的事件并完成登录
系列内容全部基于uniCloud+vk-uniCloud(云函数路由)+uni-app
编辑器HbuilderX最新版
云空间为阿里云
公众号为认证服务号
本节的内容,其实之前有单独发过一篇,当时是为了使用jssdk,而且云空间必须有腾讯的(此处鄙视腾讯涨价割韭菜),但最近发现uniCloud官方推了新的请求方法,让阿里云空间也可以请求access_token了,下面一起看看:
一、服务号后台添加ip白名单(详见第0节)
二、封装pubFun方法
依旧是写在/cloudfunctions/router/util/pubFunction.js
文件中,
/** * 请求access_token * pubFun.getWxAccessToken(); */ pubFun.getWxAccessToken = async () => { let timestamp = new Date().getTime(); // uniCloud中尽量使用毫秒时间戳 // 判断数据库中是否有未过期的token // 此时这张表未创建也不影响 let oldAccessToken = await vk.baseDao.selects({ dbName: "wx-mp-cache", getOne: true, getMain: true, // 主表where条件 whereJson: { name: 'accessToken' }, sortArr: [{ name: 'expire_time', type: 'desc' }] }); // 判断是否过期 if (vk.pubfn.isNotNull(oldAccessToken) && oldAccessToken.expire_time > timestamp) { // 未过期直接返回 return { token: oldAccessToken.token, expire_time: oldAccessToken.expire_time }; } // 重新获取access_token // 这里就用到了固定出口的代理请求方法,就是第0节中添加到白名单的那些 let accessTokenRes = await uniCloud.httpProxyForEip.get('https://api.weixin.qq.com/cgi-bin/token', { grant_type: 'client_credential', appid: appid, // 换成你自己的 secret: appsecret // 换成你自己的 }); // 这里必须parse accessTokenRes = JSON.parse(accessTokenRes); // 把新的token缓存下来 let newExpireTime = parseInt(timestamp) + 7200000 await vk.baseDao.add({ dbName: "wx-mp-cache", dataJson: { name: 'accessToken', token: accessTokenRes.body.access_token, // 注意看这里,代理请求的结果,数据是在body中…… expire_time:newExpireTime // 2小时过期 } }); // 返回 return { token: accessTokenRes.body.access_token, expire_time: newExpireTime }; }
三、云函数中使用这个方法
这个内容放到下一节吧,生成带参数的二维码时,需要用到这个token
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。