You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keystone 6中访问底层express应用以集成Stripe?

Keystone 6 集成Stripe访问底层Express实现方案

你可以通过Keystone 6内置的server.extendExpress配置钩子直接操作底层Express实例,实现自定义路由返回Stripe Payment Intent的client secret,完整实现流程如下:

  • 第一步:安装Stripe服务端SDK并完成初始化,敏感密钥统一从环境变量读取
  • 第二步:在Keystone配置文件的server配置块中添加extendExpress钩子,钩子入参即为当前Keystone使用的Express实例
  • 第三步:在钩子内注册自定义接口路由,实现Payment Intent创建逻辑并返回client secret给前端

代码示例

import { config } from '@keystone-6/core';
import Stripe from 'stripe';

// 初始化Stripe实例
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY as string, {
  apiVersion: '2023-10-16', // 替换为你实际使用的Stripe API版本
});

export default config({
  // 此处省略你的其他Keystone配置:数据库配置、列表定义、session配置等
  server: {
    // 此处省略其他server配置:端口、跨域规则等
    extendExpress: (app) => {
      // 注册自定义Stripe支付接口,添加自定义前缀避免和Keystone内置路由冲突
      app.post('/api/create-payment-intent', async (req, res) => {
        // 可在此处添加自定义鉴权逻辑,比如校验用户登录状态、参数合法性校验
        const { amount } = req.body;

        // 创建Stripe Payment Intent
        const paymentIntent = await stripe.paymentIntents.create({
          amount: amount, // 单位为对应币种的最小货币单位,例如人民币为分
          currency: 'cny', // 替换为实际业务使用的币种
        });

        // 返回client secret给前端
        res.send({
          clientSecret: paymentIntent.client_secret
        });
      });
    },
  },
});

注意事项

  1. 自定义路由请统一添加/api等专属前缀,避免和Keystone内置的/api/graphql等系统路由冲突
  2. 自定义接口默认没有鉴权逻辑,建议根据业务需求复用Keystone的session能力做身份校验,防止接口被恶意调用
  3. 请勿将Stripe密钥等敏感信息硬编码到配置文件中,统一通过环境变量注入

内容的提问来源于stack exchange,提问作者FRMR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 18:45:03