在云开发的使用过程中,有不少的用户会提出自己的疑问,我如何才能在自己的云开发应用中加入一个回调地址?
在实际开发过程中,不少涉及到支付、订单等异步操作的场景,会需要提供一个回调 URL,以确保在用户完成自己的支付过程后,由支付服务器对回调的 URL 发起请求,确认调用成功。因此,不少用户在使用时提出了自己的疑问,应该如何实现这样的功能?
由于目前云开发云函数尚未对外提供 HTTP 调用的能力,因此,我们可以借助腾讯云提供的云函数和 API 网关,来实现类似的功能。
架构介绍
在进行调用时开发者所设置的回调地址是一个 API 网关的地址,微信支付等服务的服务器在完成操作以后,会执行 HTTP 请求,请求 API 网关。 API 网关对应的是腾讯云云函数,我们可以在腾讯云云函数中调用云开发的 SDK,或者是云开发的 HTTP API,完成对云开发数据库的操作。
具体实现
依赖
- 腾讯云账号
- 小程序的 AppID 和 App Secret
实现
1. 创建云函数
访问 https://console.cloud.tencent.com/ ,使用你的腾讯云账号登陆,在顶部菜单栏中找到「云产品」— 「Serverless」—「云函数」
在云函数中,选择「函数服务」,并在函数服务页面点击「新建」
创建一个新的云函数,其中函数名称根据你的需要填写
运行环境选择 Node.js 8.9,创建方式选择空白函数,完成后点击下一步。
在下一页不需要做修改,直接点击完成。
2. 创建 API 网关调用
在创建完成云函数以后,我们会进入到这样的界面,在这个界面中选择「触发方式」
在触发方式页面新增一个触发方式,使用 「API 网关触发」,请求方法选择「ANY」,发布环境选择「发布」,鉴权方法选择「免鉴权」。
填写完成后,点击保存,然后你会获得一个地址,这个地址就是你后续的回调地址。
你可以将这个地址在浏览器中打开,可以看到这样的数据
则说明我们的云函数完成了配置。
3. 编写程序调用
当我们完成了云函数的配置以后,接下来我们可以修改云函数,使其完成我们自己想要的功能。
我们希望云函数可以从外部发来的请求中获取到参数,并借助云开发提供的 API,对云开发数据库中的数据进行更新。则我们可以这样操作
我们在本地新建一个目录,并在其中执行如下命令(需要你提前安装了 N ode.js 环境)
cd 新建文件夹
npm init -y
npm install -y got
然后创建一个文件index.js
,并在其中加入如下代码,并设置其中的 APPID、SECRET、ENV_ID 等字段。
'use strict';
const got = require('got');
const APPID = ''; // 小程序 APPID
const SECRET = ''; // 小程序 Secret
const ENV_ID = ''
const TOKEN_URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${SECRET}`
const QUERY_URL = 'https://api.weixin.qq.com/tcb/databasecollectionget?access_token='
exports.main_handler = async (event, context, callback) => {
// 1. 提取参数 可以从 URL?id=1&status=2 中提取出 1 和 2
const id = event.queryString.id;
const status = event.queryString.status;
// 2. 获取 Token,用于后续的调用
let token_resp = await got(TOKEN_URL);
let token = JSON.parse(token_resp.body).access_token
const url = QUERY_URL + token;
// 执行云开发命令
let result = await got(url, {
method: 'POST',
json: true,
headers: {
'content-type': 'applicaiton/json',
'accept-encoding':'gzip'
},
body: {
"env": ENV_ID
}
})
return result.body
};
配置完成后,保存文件。
4. 上传代码
打包完成后,重新访问腾讯云控制台,找到刚刚创建的云函数,进入到「函数代码」中,选择其中的「本地上传文件夹」,选择你刚刚创建的文件夹,等待其自动压缩完成后,点击保存上传。
上传完成后,会自动进行部署。
你可以重新访问刚刚生成的 API 网关地址,并在其后加入 id 和 status 参数,比如我的最后的地址是 https://service-51pn7koc-1251337088.gz.apigw.tencentcs.com/release/myFunction?id=1&status=2
访问以后,得到的结果是这样的
这样就说明我成功的从云函数中访问了云数据库,并且通过一个无需鉴权的 API 地址获取到了信息。
总结
实际上,借助于 API 网关、云函数以及云开发的 API & SDK,你可以实现非常多的功能,能不能实现,就看你的想象力有没有达到啦。