在本文中,我们将了解如何将快速条纹和条纹用作付款网关!所以,让我们开始!
谁配置条纹?
Stripe是一个付款网关,可让您在网站上接受付款。将条纹与快速的集成很容易,但是在开始代码之前,您需要进行一些配置。
首先,您需要创建一个Stripe account,并且在几秒钟内,您将可以访问条纹测试环境。
之后,您需要:
1)从您的条纹帐户的主页上复制Secret key
。
2)创建一个测试产品,访问Stripe仪表板中的Products
选项卡。
3)最后,从“产品详细信息”页面获取price id
。
太好了!现在您可以开始使用Fastify的条纹。
快速会做什么?
我们将要做的是创建一个简单的付款网关,该网关将接受带有条纹的付款。流将是:
0. User sees our product web page.
1. User clicks on the button to pay.
2. Fastify creates a Stripe session and redirects the user to the Stripe checkout page.
3. Stripe redirects the user to the callback URL.
4. Fastify receives the payment and sends a response to the user.
由于我们不关注网页的实现,我们将使用条纹
测试页。所有页面都存储在此github存储库中:koude3或Stripe documentation。
项目安装
要创建一个空项目,我们需要创建一个新文件夹并运行以下命令:
mkdir my-fastify-app-stripe
cd my-fastify-app-stripe
npm init --yes
现在我们可以安装所有需要的依赖项:
-
fastify
:我们最喜欢构建Web应用程序的框架。 -
stripe
:官方条纹SDK。 -
@fastify/static
:允许我们提供静态文件的插件。 -
@fastify/formbody
:允许我们解析请求的x-www-form-urlencoded
主体的插件。 -
@fastify/env
:允许我们从环境变量配置应用程序的插件。
创建一个.env
文件,您可以在其中配置以下变量:
NODE_ENV=dev
PORT=3000
STRIPE_PRIVATE_KEY=--paste-stripe-private-key-here--
BASE_URL=http://localhost:3000
HOST=0.0.0.0
最后,我们必须将测试网页复制到新的public/
文件夹中。您应该已经在上一节中下载了这些页面。
项目配置
我们准备创建一个新的app.js
文件来开始编写我们的应用程序。我们的第一步是:
- 配置
@fastify/static
插件以服务public/
网页。 - 配置
@fastify/env
插件以读取.env
文件,如果我们缺少某些环境变量,则schema
选项会警告我们。
'use strict'
const path = require('path')
const fastify = require('fastify')
const fastifyStatic = require('@fastify/static')
const env = require('@fastify/env')
async function buildApp () {
const app = fastify({
logger: true
})
app.register(fastifyStatic, {
root: path.join(__dirname, '/public')
})
await app.register(env, {
dotenv: true,
schema: {
type: 'object',
required: ['PORT', 'STRIPE_PRIVATE_KEY'],
properties: {
NODE_ENV: { type: 'string' },
PORT: { type: 'integer' },
STRIPE_PRIVATE_KEY: { type: 'string' },
HOST: { type: 'string', default: 'localhost' },
BASE_URL: { type: 'string', default: 'http://localhost:3000' }
}
}
})
return app
}
async function run () {
const app = await buildApp()
app.listen({
port: app.config.PORT,
host: app.config.HOST
})
}
run()
现在,运行node app.js
命令将启动应用程序,如果您在http://localhost:3000/
打开浏览器,则应查看产品页面。
到目前为止做得好!
条纹整合
现在,单击按钮付款将将用户重定向到Stripe Checkout页面,但是由于我们还没有集成条纹。
所以,让我们创建一个带有以下代码的新stripe-integration.js
文件:
'use strict'
const stripe = require('stripe')
module.exports = async function plugin (app, opts) {
const stripeClient = stripe(app.config.STRIPE_PRIVATE_KEY)
app.register(require('@fastify/formbody'))
app.post('/create-checkout-session', async (request, reply) => {
const session = await stripeClient.checkout.sessions.create({
line_items: [
{
// Provide the exact Price ID
price: 'price_1LRC97CHE57DZYK7ay4z2eGw',
quantity: 1
}
],
mode: 'payment',
success_url: `${app.config.BASE_URL}/success?id=${Math.random()}`,
cancel_url: `${app.config.BASE_URL}/cancel?id=${Math.random()}`
})
return reply.redirect(303, session.url)
})
app.get('/success', async (request, reply) => {
request.log.info('success callback from id %s', request.query.id)
return reply.sendFile('success.html')
})
app.get('/cancel', async (request, reply) => {
request.log.info('cancel callback from id %s', request.query.id)
return reply.sendFile('cancel.html')
})
}
此文件是管理条纹集成的快速插件。首先,它使用STRIPE_PRIVATE_KEY
环境变量实例化条纹客户端。然后,它注册/create-checkout-session
路由,该路由将创建新的结帐会话。在创建会议期间,您将能够控制产品的价格和数量。现在,出于测试目的,我们复制并粘贴了Stripe仪表板中生成的price
ID,但是您当然可以根据用户输入动态加载它。
如What will do Fastify?
部分所述,我们拥有success
和cancel
端点,该端点将被到达“ Stripe Checkout”页面完成付款。在这种情况下,我们只是在查询字符串中添加一个随机ID,以模拟我们可以识别回调以更新一些数据。
sendFile
方法将发送位于public/
文件夹中的文件,并将向用户显示反馈消息,让他们知道他们将收到刚刚支付的好东西。
我们的最后一步是在app.js
文件中注册stripe-integration
插件。因此,我们必须在@fastify/env
注册后添加以下行。
//...
HOST: { type: 'string', default: 'localhost' },
BASE_URL: { type: 'string', default: 'http://localhost:3000' }
}
}
})
app.register(require('./stripe-integration'))
return app
}
现在,我们可以运行该应用程序并查看结帐页面!
要完成测试付款,您可以使用Stripe fake credit cards
付款后,您将看到success
页!
概括
恭喜!您已经通过Stripe教程完成了快速的速度!现在,您可以开始改进此基本脚手架,以通过Fastify将电子商务与条纹集成。
源代码可在koude29
上获得记住要在Twitter @Eomm上关注我以获取更多内容!很快见下一篇文章!