小程序开发技巧(三)-- 云开发时效数据刷新和存储 (access_token等)
小程序云开发时效数据刷新和存储 (access_token等)
1.问题描述
小程序中经常有需要进行OCR识别,或者使用外部api例如百度AI识别等接口,请求调用这些接口需要令牌,即一些具有时效性的数据。本文以小程序云开发使用百度API接口为例,介绍access_token定时刷新和请求机制。
下面是百度调用身份证识别的一段需求,需要传的参数需要有access_token。
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/idcard
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
access_token 是具有时效性的数据,每次请求一次接口就进行一次请求刷新,显然是对计算机资源的极大浪费,且影响效率。
2.问题解决方案

2.1.云数据库配置
新建一个云数据库名为setconfig。作为配置型信息存储数据库,类似access_token的数据都可以向其中存储。
对access_token配置下列字段:
- _openid (你的openid* 必填)
- config_name (配置名,填access_token)
- value (access_token的值,默认为null)
id会自动生成,配置完效果如下(这个value是已经更新后的值)

2.2 定时云函数配置
阅读access_token获取的文档,可知,我们需要请求一个地址来获取access_token的值。
获取Access_Token
请求URL数据格式
向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:
- grant_type: 必须参数,固定为
client_credentials; - client_id: 必须参数,应用的
API Key; - client_secret: 必须参数,应用的
Secret Key;
例如:
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&
实现
我们需要在云函数中模拟请求,并根据返回结果刷新云数据库中的access_token值。
想要运行通过该程序,需要开发者自己去百度创建账号并创建应用。
云函数index.js
// 云函数入口文件 index.js
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
var request = require('request')
// 定时器
exports.main = async(event, context) => {
const appkey = '填写你的百度AppKey';
const appsecret = '填写你的百度AppSecret';
var url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + appkey + '&client_secret=' + appsecret;
return new Promise((resolve, reject) => {
request({
url: url,
method: "POST",
json: true,
headers: {
"content-type": "application/json",
},
}, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log('通行证为' + body.access_token)
resolve(body.access_token)
//记得修改.doc('xxx') 中的内容
db.collection('setconfig').doc('aaaf5a56-1dd9-4e50-974b-34688fa47b20').update({
data: {
value: body.access_token
}
}).then(res => {
console.log('调用完成')
console.log(res)
})
}
})
})
}
docid是setconfig生成的,每个人不同注意修改
还有一种更新写法,不过更推荐使用上面的方法,效率更高,且稳定。
db.collection('setconfig').where({
config_name:'access_token'
}).update({
data: {
value: body.access_token
}
})
云函数config.json(定时触发器功能实现)
{
"triggers": [
{
"name": "myTrigger",
"type": "timer",
"config": "0 0 2 * * * *"
}
]
}
云函数整体结构为:

然后上传并部署(云端安装依赖)。
2.3 小程序端获取Access_token
在小程序进入相应界面的时候,请求云数据库,获取access_token
onLoad: function (options) {
//页面初始化
var that = this;
db.collection('setconfig').where({
config_name:'access_token'
}).get({
success(res){
that.setData({
access_token:res.data[0].value
})
//console.log(res.data[0])
},
fail(res){
wx.showToast({
title: '请求失败,无法通过扫描填充数据',
})
}
})
},
3. 参考资料
[2]微信小程序云开发数据库update函数更新不了数据的问题
小程序开发相关问题欢迎联系QQ 1025584691
小程序开发技巧(三)-- 云开发时效数据刷新和存储 (access_token等)的更多相关文章
- 微信小程序开发技巧总结 (一)-- 数据传递和存储
结合自己在平时的开发中遇到的各种问题,和浏览各种问题的解决方案总结出一些自己在日常开发中常用的技巧和知点,希望各位不吝斧正. 1.短生命周期数据存储 以小程序启动到彻底关闭为周期的的数据建议存储在ap ...
- 微信小程序入门笔记-使用云开发(4)
1.云数据库 一.介绍 云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象.一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数 ...
- 使用wepy开发微信小程序商城第三篇:购物车(布局篇)
使用wepy开发微信小程序商城 第三篇:购物车(布局篇) 前两篇如下: 使用wepy开发微信小程序商城第一篇:项目初始化 使用wepy开发微信小程序商城第二篇:路由配置和页面结构 基于上两篇内容,开始 ...
- 微信小程序仿朋友圈功能开发(发布、点赞、评论等功能)
微信小程序仿朋友圈功能开发(发布.点赞.评论等功能) 1.项目分析 项目整体分为三个部分 发布 展示 详情页 graph LR 朋友圈发布 --内容发布--> 内容展示 内容展示 --点击展示卡 ...
- [小程序开发] 微信小程序内嵌网页web-view开发教程
为了便于开发者灵活配置小程序,微信小程序开放了内嵌网页能力.这意味着小程序的内容不再局限于pages和large,我们可以借助内嵌网页丰富小程序的内容.下面附上详细的开发教程(含视频操作以及注意事项) ...
- 微信小程序基于腾讯云对象存储的图片上传
在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...
- 微信小程序集成腾讯云 IM SDK
微信小程序集成腾讯云 IM SDK 1.背景 因业务功能需求需要接入IM(即时聊天)功能,一开始想到的是使用 WebSocket 来实现这个功能,然天意捉弄(哈哈)服务器版本太低不支持 wx 协议(也 ...
- 小程序实践(三):九宫格实现及item跳转
效果图: 实现效果图红色线包含部分的九宫格效果,并附带item点击时间. --------------------------------------------------------------- ...
- 微信小程序把玩(三十三)Record API
原文:微信小程序把玩(三十三)Record API 其实这个API也挺奇葩的,录音结束后success不走,complete不走,fail也不走, 不知道是不是因为电脑测试的原因,只能等公测或者等他们 ...
随机推荐
- Nginx_安全1
Nginx 安全 nginx隐藏版本号 # 在Nginx的配置文件中进行修改,增加下面这个. server_tokens on; nginx对IP和目录限速 # Nginx可以通过HTTPLimitZ ...
- VS2010 保护视力 背景色设置
vs2010——工具——选项---环境——字体和颜色——纯文本——项背景色——自定义 色调:88 饱和度:92 亮度:209
- PAT甲级——1009 Product of Polynomials
PATA1009 Product of Polynomials Output Specification: For each test case you should output the produ ...
- rest framework-解析器和渲染器-长期维护
############### 解析器 ############### # 解析器----数据解析器, # # 前端发送了json数据,在request的body里面, # 我们需要把json ...
- iOS 后台任务
首先开启后台任务 使用设置后台任务触发的时机 application.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIn ...
- VS各种错误集成总结,持续更新
1.error C4996: 'GetVersionExW': 被声明为已否决 解决办法:工程 -- 配置属性 --C/ C++ -- 常规 -- SDL check 关掉 2.fatal error ...
- UITextView实现PlaceHolder的方式
实现UITextView实现PlaceHolder的方式的方式有两种,这两种方法的核心就是通过通知来添加和去除PlaceHolder:下面来介绍两种方法:个人比较喜欢第一种,看起来更加合理. 方法1: ...
- Cocos2dx-JS学习01
123456 <body><script src="res/loading.js"></script><canvas id="g ...
- 奇点云数据中台技术汇(三)| DataSimba系列之计算引擎篇
随着移动互联网.云计算.物联网和大数据技术的广泛应用,现代社会已经迈入全新的大数据时代.数据的爆炸式增长以及价值的扩大化,将对企业未来的发展产生深远的影响,数据将成为企业的核心资产.如何处理大数据,挖 ...
- Hadoop_ssh免密认证出现的问题
问题 network is unreachable 网络解决方法 看了大部分文章博客,发现都是说网关或者没ping好,我都试了,发现没用 我的解决方法 把虚拟机右上角的网络连接即可(我的是S开头的一个 ...