uniCloud开发公众号:二、请求access_token并缓存(阿里云空间)

算是个系列内容吧,最终要实现的是将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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万符网络

走过路过,欢迎打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值