云开发如何对外提供回调 URL

2,098 阅读4分钟

在云开发的使用过程中,有不少的用户会提出自己的疑问,我如何才能在自己的云开发应用中加入一个回调地址?

在实际开发过程中,不少涉及到支付、订单等异步操作的场景,会需要提供一个回调 URL,以确保在用户完成自己的支付过程后,由支付服务器对回调的 URL 发起请求,确认调用成功。因此,不少用户在使用时提出了自己的疑问,应该如何实现这样的功能?

由于目前云开发云函数尚未对外提供 HTTP 调用的能力,因此,我们可以借助腾讯云提供的云函数和 API 网关,来实现类似的功能。

架构介绍

在进行调用时开发者所设置的回调地址是一个 API 网关的地址,微信支付等服务的服务器在完成操作以后,会执行 HTTP 请求,请求 API 网关。 API 网关对应的是腾讯云云函数,我们可以在腾讯云云函数中调用云开发的 SDK,或者是云开发的 HTTP API,完成对云开发数据库的操作。

具体实现

依赖

  • 腾讯云账号
  • 小程序的 AppID 和 App Secret

实现

1. 创建云函数

访问 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,你可以实现非常多的功能,能不能实现,就看你的想象力有没有达到啦。