アプレットクラウド開発のリフレッシュやデータストレージの適時性(access_tokenはなど)
1.問題の説明
アプレットは、多くの場合、OCR認識を必要としている、または外部API例えば百度AI認識インターフェイスと、これらのインタフェースは、トークン呼要求、すなわち、時間に敏感なデータの数を必要とします。本論文では、小さなプログラムは定期的に更新し、要求メカニズムaccess_tokenは、一例として、BaiduのクラウドAPIインタフェースを使用して開発しました。
ここではBaiduのIDカードの識別が必要とされるパスのパラメータを呼び出すためにいくつかの需要がaccess_tokenはを必要としています。
例要求
HTTPメソッド:POST
リクエストURL: https://aip.baidubce.com/rest/2.0/ocr/v1/idcard
URLパラメータ:
パラメータ | 値 |
---|---|
アクセストークン | API鍵と秘密鍵のaccess_tokenはを通じて取得し、参照「アクセストークンを取得します」 |
リフレッシュ要求を行うため、各リクエストのインターフェイスは、コンピュータ資源の浪費、及び効率の影響が明らかになるとaccess_tokenは、データは、時間に敏感です。
2.問題解決策
2.1。クラウドデータベースの設定
クラウドと呼ばれる新しいデータベースを作成setConfigを。構成種類情報格納データベースとして、データが格納されaccess_tokenは同様とすることができます。
次のフィールドのaccess_tokenは構成:
- _openid(あなたのOpenID *必須)
- CONFIG_NAME(設定名、フィルaccess_tokenは)
- 値(NULLにaccess_tokenは、デフォルトの値)
次のような効果を設定自動的に生成されたID(この値が更新された値です。)
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 字段是触发器数组,目前仅支持一个触发器,即数组只能填写一个,不可添加多个
"triggers": [
{
// name: 触发器的名字,规则见下方说明
"name": "myTrigger",
// type: 触发器类型,目前仅支持 timer (即 定时触发器)
"type": "timer",
// config: 触发器配置,在定时触发器下,config 格式为 cron 表达式,
//现在为每天凌晨两点触发
"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