将条纹与快速的
#node #stripe #fastify #payments

Manuel Spigolon

在本文中,我们将了解如何将快速条纹和条纹用作付款网关!所以,让我们开始!

谁配置条纹?

Stripe是一个付款网关,可让您在网站上接受付款。将条纹与快速的集成很容易,但是在开始代码之前,您需要进行一些配置。

首先,您需要创建一个Stripe account,并且在几秒钟内,您将可以访问条纹测试环境。

之后,您需要:

1)从您的条纹帐户的主页上复制Secret key

stripe-key.png

2)创建一个测试产品,访问Stripe仪表板中的Products选项卡。

stripe-create-product.png

3)最后,从“产品详细信息”页面获取price id

stripe-price-id.png

太好了!现在您可以开始使用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存储库中:koude3Stripe 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-product.png

到目前为止做得好!

条纹整合

现在,单击按钮付款将将用户重定向到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?部分所述,我们拥有successcancel端点,该端点将被到达“ 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

stripe-fake-pay.png

付款后,您将看到success页!

概括

恭喜!您已经通过Stripe教程完成了快速的速度!现在,您可以开始改进此基本脚手架,以通过Fastify将电子商务与条纹集成。

源代码可在koude29

上获得

记住要在Twitter @Eomm上关注我以获取更多内容!很快见下一篇文章!