当前位置: 首页 > 知识库问答 >
问题:

在平台账户上创建带支付方式的Stripe Connect客户

薛焱
2023-03-14

下面是关于让其他企业直接接受付款的文档。

我已成功创建了一个连接帐户,并在连接帐户上接受了客户的付款,但我尚未能够保存该客户的付款信息以备将来付款。

在所有文档中,尤其是在这里,它假设您已经使用支付方式在平台上创建了一个客户帐户,然后才应该尝试将支付方式克隆到连接的帐户。

我一辈子都不知道如何在平台帐户上创建一个具有支付信息的客户,然后再将其克隆到连接的帐户上。

根据文档,我从客户端开始,其中accountID是连接帐户的ID:


const [stripePromise, setstripePromise] = useState(() =>
    loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY, {
      stripeAccount: uid.accountID,
    })
  );

我的条纹元素是用stripePromise创建的。

在尝试保存卡的详细信息时,我在客户端执行以下操作:

这就是我认为我的错误是我在尝试创建平台支付方式时使用连接帐户凭据的地方。

  const handleRememberMe = async () => {
    const { token } = await stripe.createToken(
      elements.getElement(CardElement)
    );
    console.log(token);

    const res = await fetchPostJSON("/api/pay_performer", {
      accountID: accountID,
      amount: value,
      cardToken: token,
    });

该API调用转到“/API/pay_performer”:

//Handle onboarding a new connect user for x

require("dotenv").config();
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, {
  apiVersion: "2020-08-27",
});
import setCookie from "../../../utils/cookies";

export default async function createPayment(req, res) {
  if (req.method === "POST") {
// Connected account ID and the token generated on the client to be saved.
    const { accountID, amount, cardToken } = req.body;
    console.log(`API side cardToken: ${cardToken.used}`);
    try {
      // Trying to create a customer with that token.
      const customer = await stripe.customers.create({
        email: "test2@example.com",
        source: cardToken.card,
      });
      customer.sources = cardToken.card;
// Beginning the cloning process for the connected account.
      const token = await stripe.tokens.create(
        {
          customer: customer.id,
        },
        {
          stripeAccount: accountID,
        }
      );
      const clonedCustomer = await stripe.customers.create(
        {
          source: token.id,
        },
        {
          stripeAccount: accountID,
        }
      );
      console.log(`Default Source: ${clonedCustomer.default_source}`);

      console.log(`AccountID: ${accountID}, Amount: ${amount}`);
      const paymentIntent = await stripe.paymentIntents.create(
        {
          payment_method_types: ["card"],
          payment_method: clonedCustomer.default_source
            ? clonedCustomer.default_source
            : null,
          amount: amount * 100,
          currency: "usd",
          application_fee_amount: 1,
          customer: clonedCustomer.id,
        },
        {
          stripeAccount: accountID,
        }
      );

      const secret = paymentIntent.client_secret;
      console.log(secret);
      const payment_method = paymentIntent.payment_method;
      return res.status(200).send({ secret, payment_method });
    } catch (e) {
      console.log(e);
      return res.status(500).send({ error: e.message });
    }
  }
}

但我得到一个错误,即提供的令牌不是有效的令牌。我假设这是因为我使用客户端上已连接帐户的凭据创建了令牌,然后尝试将其应用于平台帐户。

我如何拥有一个单独的用户界面,首先创建平台客户,然后在购买时返回并将其克隆到连接的帐户。

我不应该将令牌传递给服务器,而只是通过HTTPS传递卡片信息吗?非常丢失,留档没有帮助!

感谢您的帮助!

共有1个答案

夏侯博
2023-03-14

为了创建客户、收集卡信息并将PaymentMethod附加到它们,例如,您可以使用SetupIntent和Elements[1]或创建PaymentMethod[2]。核心要点是,如果系统最初应该将该信息存储在平台上,则连接的帐户根本还没有发挥作用。从广义上讲,步骤是(不要在任何地方提供连接帐户的帐户ID,因为这只发生在平台帐户上),使用平台的密钥:

  1. 创建客户

[1] https://stripe.com/docs/payments/save-and-reuse

[2] https://stripe.com/docs/js/payment_methods/create_payment_method

 类似资料:
  • 说明 用于创建平台商家和门店 请求地址 http://api.dc78.cn/Api/sys_newaccount 请求方式 POST 请求参数 参数 参数名称 描述 pid 商家账号 英文、数字组成,不少于4位,不能重复 name 商家名称 addrcode 省市区地址编码 三级编码,参见说明http://www.mca.gov.cn/article/sj/tjbz/a/2017/201801/

  • 此接口用于代理商调用创建果盘平台商家账号。 支持创建独立商家账号和添加连锁账号子门店,使用issub=1来标识创建子门店。调用添加子门店前必须先调用创建第一个门店。 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 sys_newaccount string post POST参数组 是 object └pi

  • 说明api接口绑定收款账户 请求地址 http://api.dc78.cn/Api/sys_createCollectionAccount 请求方式 POST 请求参数 参数 参数名称 描述 account_id 收款账号ID 不传值则为新增,传值则为编辑(编辑只允许修改收款账号名称) pay_type 支付通道类型 1:微信 2:支付宝 3:扫呗 account_name 账号名称(账号名称只用

  • 说明 alipay.fund.trans.toaccount.transfer(单笔转账到支付宝账户接口) 官方文档:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer/ 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayApp\Fund\Transfer\Request 属性 名称

  • 在使用PayPal Adaptive的链式支付时,是否可以传递客户的账单地址?目前,用户在我的市场商店中输入他们的运输和账单地址,然后必须在贝宝结账页面上再次输入他们的姓名、电子邮件地址和账单地址,如果他们使用贝宝的客人结账选项(用借记卡/信用卡支付)。理想情况下,我想以某种方式通过这一点,当他们从我的结账移动到贝宝支付屏幕,这是通过并行支付使用自适应支付(经典API)。