六维教程

EdgeOne Makers 电商支付与其他集成

上一篇讲了数据库和 AI 模型的集成,这篇再往前迈一步,聊聊支付和更多第三方服务的对接。做电商要接支付、做工具站要接邮件服务、做数据分析要接统计平台,这些都属于”第三方服务集成”。Makers 的函数可以调用任何外部 API,所以理论上你能对接任何提供 HTTP 接口的服务。

支付系统集成

为什么要接支付

如果你的项目涉及收费,不管是卖商品、卖会员还是卖课程,都需要一个支付系统来处理收款。主流方案有几种:

支付方式 适用地区 接入难度 费率
Stripe 全球(中国大陆暂不支持) 低,API 设计优秀 约 2.9% + 0.30 美元/笔
微信支付 中国大陆 中,需要企业资质 0.6%
支付宝 中国大陆 中,需要企业资质 0.6%
Shopify Payments 全球 低,Shopify 内置 因地区而异

集成 Stripe

Stripe 是海外项目最常用的支付方案,API 设计很友好。Makers 的 SaaS 模板就内置了 Stripe 集成。

第一步: 创建 Stripe 账号

  1. Stripe 注册
  2. 在 Developers -> API keys 页面获取密钥
  3. 拿到 Publishable key(前端用)和 Secret key(后端用)

第二步: 配置环境变量

在 Makers 控制台添加:

STRIPE_PUBLISHABLE_KEY = pk_test_xxxxx
STRIPE_SECRET_KEY = sk_test_xxxxx

第三步: 安装 Stripe SDK

npm install stripe

第四步: 创建支付会话

// cloud-functions/api/create-checkout.js
// 创建 Stripe 支付会话

import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

export default async function onRequestPost(context) {
  const body = await context.request.json();
  const { priceId, successUrl, cancelUrl } = body;

  try {
    // 创建 Checkout Session
    const session = await stripe.checkout.sessions.create({
      payment_method_types: ['card'],
      line_items: [
        {
          price: priceId,    // 在 Stripe 控制台创建的价格 ID
          quantity: 1
        }
      ],
      mode: 'payment',       // 一次性支付,订阅用 'subscription'
      success_url: successUrl,  // 支付成功跳转地址
      cancel_url: cancelUrl     // 取消支付跳转地址
    });

    return Response.json({
      sessionId: session.id,
      url: session.url  // 前端跳转到这个 URL 完成支付
    });
  } catch (err) {
    return Response.json(
      { message: '创建支付会话失败', detail: err.message },
      { status: 500 }
    );
  }
}

第五步: 处理支付回调

用户支付完成后,Stripe 会向你注册的回调地址发送通知。你需要验证签名并处理订单状态更新。

// cloud-functions/api/webhook.js
// Stripe 支付回调处理

import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

export default async function onRequestPost(context) {
  const request = context.request;
  const signature = request.headers.get('stripe-signature');
  const body = await request.text();

  try {
    // 验证 Webhook 签名,确保请求来自 Stripe
    const event = stripe.webhooks.constructEvent(
      body,
      signature,
      process.env.STRIPE_WEBHOOK_SECRET  // 在 Stripe 控制台设置 Webhook 时获取
    );

    // 处理不同事件类型
    switch (event.type) {
      case 'checkout.session.completed':
        // 支付成功,更新订单状态
        const session = event.data.object;
        await handlePaymentSuccess(session);
        break;

      case 'payment_intent.failed':
        // 支付失败,记录失败信息
        await handlePaymentFailure(event.data.object);
        break;
    }

    return new Response('ok', { status: 200 });
  } catch (err) {
    return Response.json(
      { message: 'Webhook 验证失败', detail: err.message },
      { status: 400 }
    );
  }
}

async function handlePaymentSuccess(session) {
  // 这里更新你的数据库中的订单状态
  // 比如用 Supabase 更新
  console.log("支付成功", {
    sessionId: session.id,
    customerId: session.customer,
    amount: session.amount_total
  });
}

async function handlePaymentFailure(paymentIntent) {
  console.log("支付失败", {
    intentId: paymentIntent.id,
    lastError: paymentIntent.last_payment_error?.message
  });
}

使用 Shopify 搭建电商

如果你想做电商平台,Makers 提供了 Shopify 模板,可以直接用。

Shopify 模板整合了:

功能 说明
商品管理 在 Shopify 后台管理商品、库存、价格
购物车 Storefront API 实现自定义购物车
结算支付 Shopify 内置支付处理
订单管理 Shopify 后台统一管理订单

接入步骤:

  1. Shopify Dev 创建商店
  2. 添加商品并配置 Headless 主题
  3. 获取 Storefront API Access Token
  4. 在 Makers 部署 Shopify 模板,配置环境变量
  5. 部署上线
环境变量配置:
SHOPIFY_STORE_DOMAIN = your-store.myshopify.com
SHOPIFY_STOREFRONT_ACCESS_TOKEN = xxxxx
SHOPIFY_API_VERSION = 2025-04

第三方服务对接

除了支付,实际项目中经常需要对接各种第三方服务。

邮件服务

发送注册验证、订单通知等邮件。

服务 免费额度 特点
Resend 每月 3000 封 API 简洁,适合开发者
SendGrid 每天 100 封 老牌邮件服务
Mailgun 每月 5000 封(试用期) 功能全面

以 Resend 为例:

// cloud-functions/api/send-email.js
// 发送验证邮件

export default async function onRequestPost(context) {
  const body = await context.request.json();
  const { to, username } = body;

  const response = await fetch('https://api.resend.com/emails', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${process.env.RESEND_API_KEY}`
    },
    body: JSON.stringify({
      from: 'noreply@yourdomain.com',
      to: to,
      subject: '欢迎注册',
      html: `<h1>你好 ${username}</h1><p>感谢注册我们的服务!</p>`
    })
  });

  const result = await response.json();

  return Response.json({ emailId: result.id });
}

短信服务

验证码、通知类短信。

服务 适用地区 说明
腾讯云 SMS 中国大陆 国内到达率高
阿里云 SMS 中国大陆 国内到达率高
Twilio 全球 海外短信首选

对象存储

文件上传、图片处理等场景。

方案 说明
Makers Blob 存储 平台内置,无需额外配置
Supabase Storage 和 Supabase 数据库配合使用
腾讯云 COS 大容量、国内访问快
AWS S3 全球覆盖,生态成熟

统计分析

网站流量统计和用户行为分析。

服务 特点
Umami 开源、隐私友好、可自部署
Plausible 轻量、不需要 Cookie
Google Analytics 功能最全,但有隐私争议

实战案例: 会员订阅系统

下面把支付、数据库、邮件串起来,做一个完整的会员订阅系统。

整体架构

用户注册 -> 验证邮件 -> 选择套餐 -> Stripe 支付 -> Webhook 回调 -> 更新数据库 -> 开通会员

注册和发送邮件

// cloud-functions/api/register.js
// 用户注册

import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);

export default async function onRequestPost(context) {
  const body = await context.request.json();
  const { email, password, name } = body;

  // 创建用户(Supabase 内置认证)
  const { data, error } = await supabase.auth.admin.createUser({
    email,
    password,
    email_confirm: true
  });

  if (error) {
    return Response.json(
      { message: '注册失败', detail: error.message },
      { status: 400 }
    );
  }

  // 在 users 表创建用户记录
  await supabase.from('users').insert({
    id: data.user.id,
    email,
    name,
    plan: 'free'   // 默认免费套餐
  });

  return Response.json({ message: '注册成功', userId: data.user.id });
}

创建订阅支付

// cloud-functions/api/subscribe.js
// 创建订阅支付会话

import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

export default async function onRequestPost(context) {
  const body = await context.request.json();
  const { priceId, userId } = body;

  const session = await stripe.checkout.sessions.create({
    payment_method_types: ['card'],
    mode: 'subscription',
    customer_email: await getUserEmail(userId),
    line_items: [{ price: priceId, quantity: 1 }],
    success_url: 'https://yoursite.com/success?session_id={CHECKOUT_SESSION_ID}',
    cancel_url: 'https://yoursite.com/pricing',
    metadata: { userId }  // 把 userId 传到 metadata,回调时使用
  });

  return Response.json({ url: session.url });
}

async function getUserEmail(userId) {
  // 从数据库查询用户邮箱
  // ...
}

处理订阅回调

// cloud-functions/api/webhook.js
// 处理 Stripe 订阅相关事件

import Stripe from 'stripe';
import { createClient } from '@supabase/supabase-js';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);

export default async function onRequestPost(context) {
  const body = await context.request.text();
  const signature = context.request.headers.get('stripe-signature');

  const event = stripe.webhooks.constructEvent(
    body,
    signature,
    process.env.STRIPE_WEBHOOK_SECRET
  );

  switch (event.type) {
    case 'checkout.session.completed': {
      // 订阅成功,更新用户套餐
      const session = event.data.object;
      const userId = session.metadata.userId;

      await supabase
        .from('users')
        .update({
          plan: 'pro',
          stripe_customer_id: session.customer,
          stripe_subscription_id: session.subscription
        })
        .eq('id', userId);
      break;
    }

    case 'customer.subscription.deleted': {
      // 订阅取消,降级为免费套餐
      const subscription = event.data.object;

      await supabase
        .from('users')
        .update({ plan: 'free' })
        .eq('stripe_subscription_id', subscription.id);
      break;
    }
  }

  return new Response('ok');
}

这个案例把注册、支付、回调、数据库更新完整串了起来。实际项目中还需要加上权限中间件(检查用户是否是付费用户才能访问某些功能)、退款处理、发票生成等,但核心流程就是这样。

集成清单

不管对接什么第三方服务,集成的步骤基本一样:

步骤 操作
注册服务 去第三方平台注册账号
获取密钥 拿到 API Key 或 Token
配置环境变量 把密钥存到 Makers 环境变量或 GitHub Secrets
安装 SDK(可选) 有些服务有官方 SDK,用起来更方便
编写函数 在 Cloud Function 中调用第三方 API
测试验证 先用测试环境跑通,再切到正式环境
处理回调(可选) 支付等场景需要写 Webhook 回调函数

速查卡片

要点 说明
Stripe 集成 创建支付会话 + 处理 Webhook 回调
Shopify 电商 Makers 提供模板,配置 Storefront API 即可
Webhook 安全 一定要验证签名,确保请求来自第三方平台
邮件服务 Resend/SendGrid 等,用 fetch 调用 API 即可
第三方集成步骤 注册 -> 获取密钥 -> 配环境变量 -> 写函数 -> 测试
环境变量管理 密钥存平台环境变量,CI/CD 用 Secrets
回调处理 checkout.session.completed 处理支付成功、subscription.deleted 处理退订
通用原则 密钥不硬编码、验证回调签名、先用测试环境
上一篇
EdgeOne Makers AI 与数据库集成
下一篇
EdgeOne Makers 安全与加速概览