前言
当今的互联网时代,各种开放平台层出不穷,微信、支付宝等已经成为人们日常生活不可或缺的一部分。而如何与这些开放平台对接,让后端开发者非常头疼,需要考虑到服务器的管理、部署、性能优化等问题,这些问题会对开发效率带来很大的影响,Serverless 的出现则非常好的解决了这些问题。
那么本文将介绍如何使用 Serverless 搭建 API 对接微信 / 支付宝等开放平台。
Serverless 是什么?
Serverless(无服务器架构)是一种新兴的云计算架构,不需要宿主操作系统,不需要维护操作系统、数据库、Web服务器的状态,不用关心网络层的操作等问题。它是一个让开发者可以专注于代码编写,而不是关注服务器架构和管理的云计算架构。
Serverless 最核心的特性就是“事件驱动”,服务器只有在接收到请求的时候才会去执行代码,所以减少了无意义的计算,从而减少了服务器的开销。另外,Serverless 服务具有自动扩容能力、冷启动时间短的特点,能够应对高并发场景。
Serverless 对接微信 / 支付宝等开放平台
准备工作
使用 Serverless 对接微信 /支付宝等开放平台,需要提前准备好以下工作:
一个可用的 Serverless 平台,这里推荐使用阿里云函数计算(FC)。
一个公众号或者服务窗口的账号,具体使用哪种账号,根据你的实际业务需求来选择。
微信支付或支付宝支付的商户号以及对应的 API 密钥。
构建 Serverless 项目
在阿里云函数计算上创建一个新的项目,这个项目将作为我们使用 Serverless 对接微信 / 支付宝等开放平台的基础。
创建项目后,在项目根目录下新建一个 config.js
文件,用于存储微信支付或支付宝支付的商户号以及对应的 API 密钥。
-- -------------------- ---- ------- -- --------- -------------- - - ------ - ------- ------------------------ ------ ----------------------- ---- -------------------- -- ------- - ------- -------------------- ------------ -------------------------- ------------------ ------------------------ - --
使用 Serverless 实现微信支付
创建项目
创建一个新的项目,并在项目的根目录下创建一个 payment
目录,该目录用于存放与微信支付相关的代码。在 payment
目录下创建一个 wechat.js
文件,用于存放微信支付相关的逻辑。
在 wechat.js
文件中引入 Serverless SDK,并在导出的函数中实现微信支付的逻辑。
-- -------------------- ---- ------- -- --------- ----- --------- - ----------------------- ----- - ----- - - --------------------- ----- ------------ - - ------ ------------ ------ ------------- ----------- ---------- ---------- ----------------------------- -- ---- -- ----- --------- - --- ------------------------ --------------- - ----- ------- -------- -- - ----- ------ - ----- ------------------------------ -- -------- ------ ------- --
配置路由
为 Serverless 函数创建一个路由,与微信支付的接口路径相对应。 在项目的根目录下创建一个 app.js
文件,用于实现 Serverless 函数的路由。
-- -------------------- ---- ------- -- ------ ----- ---------- - --------------------------- ----- ------- - ------------------- ----- ------ - ---------------------------- ----- --- - ---------- -------------------------- ----- ----- ---- -- - ----- ---- - ----- ------------------- ----- --------------- --- ---------------------- - ----------------
配置自动部署
Serverless 的项目需要配置好参数后,需要进行部署,才能通过 API 网关暴露出来。我们可以通过 Serverless 的功能进行自动部署。在项目根目录下,创建一个 serverless.yml
文件,并添加以下内容。
-- -------------------- ---- ------- - -------------- -------- --------------- --------- ----- ------ ---------- ------- -------- ----------- ------- - ----- ----- -------------- ------- --- - ----------
使用 Serverless 实现支付宝支付
创建项目
创建一个新的项目,并在项目的根目录下创建一个 payment
目录,该目录用于存放与支付宝支付相关的代码。在 payment
目录下创建一个 alipay.js
文件,用于存放支付宝支付相关的逻辑。
在 alipay.js
文件中引入 Serverless SDK,并在导出的函数中实现支付宝支付的逻辑。
-- -------------------- ---- ------- -- --------- ----- ------ - ------------------------------ ----- - ------ - - --------------------- ----- ------------ - - ------ -------------- --------- ------- -------- -------- -------- ------------------------------------------- ----------- ------------------- ---------- ------------------------ -- ----- --------- - --- --------------------- --------------- - ----- ------- -------- -- - ----- ------ - ----- ---------------------------------- ------- -- --------- ------ ------- --
配置路由
为 Serverless 函数创建一个路由,与支付宝支付的接口路径相对应。在项目的根目录下创建一个 app.js
文件,用于实现 Serverless 函数的路由。
-- -------------------- ---- ------- -- ------ ----- ---------- - --------------------------- ----- ------- - ------------------- ----- ------ - ---------------------------- ----- --- - ---------- -------------------------- ----- ----- ---- -- - ----- ---- - ----- ------------------- ----- --------------- --- ---------------------- - ----------------
配置自动部署
Serverless 的项目需要配置好参数后,需要进行部署,才能通过 API 网关暴露出来。我们可以通过 Serverless 的功能进行自动部署。在项目根目录下,创建一个 serverless.yml
文件,并添加以下内容。
-- -------------------- ---- ------- - -------------- -------- --------------- --------- ----- ------ ---------- ------- -------- ----------- ------- - ----- ----- -------------- ------- --- - ----------
总结
通过上面的介绍,我们可以知道 Serverless 架构相对于传统的服务器架构,优势非常明显:使用方便、冷启动时间短、自动扩容等特点,可以加快开发者的开发效率,减少运维成本。在与微信 / 支付宝等开放平台对接时,使用 Serverless 可以使对接过程更加方便简洁、高效。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654890977d4982a6eb2d3ebe