【问题标题】:How to retrieve a payment method on the client side?如何在客户端检索付款方式?
【发布时间】:2019-11-22 01:23:58
【问题描述】:

我们正在运行一个带有 Angular/Typescript 前端和 .NET 后端的应用程序,分别使用 Stripe Elements 和 Stripe.NET。

我们目前正在使用“Sources”API。

前端可以创建源,后端将它们保存给我们的特定用户。当您再次打开前端时,后端会发送一个源 ID 列表。然后前端直接从 Stripe 收集显示这些来源所需的数据,以便用户可以选择他保存的来源之一进行支付,而不必再次输入所有数据。

输入支付方式/支付意图 API。

根据欧盟法规,Stripe 有一个新的 API,要求我们创建的卡不再作为“来源”,而是作为“PaymentMethod”。所以我在后端实现了它,在我的 IDE 中打开了前端,更新了 @types/stripe-v3 包并找到了新的支付意图 API。

唯一缺少的:一旦创建,我无法弄清楚前端是如何访问支付方式数据的。我可以创造它。发送到后端。后端可以检索它。将 ID 发送回前端……然后呢?如何显示可用的付款方式?

我原以为stripe.retrievePaymentMethod() 有一个stripe.retrieveSource()。但没有这样的运气。

我目前看到的向用户展示现有支付方式列表的唯一选择是在后端获取此信息,并将其全部通过类、逐个属性的方式传递给客户端。基本上将每个数据类条带复制到我们自己的后端 REST 定义中。这不可能。

我错过了什么?为什么前端没有stripe.retrievePaymentMethod()?我是否不了解这些 API 应该做什么的一些基本事实?

【问题讨论】:

  • 您使用的是移动支付或支付网关还是其他方式?
  • @SaeidAmini 我不知道如何回答这个问题。我正在使用 Stripe,特别是他们的 Payment Method API。前端应用程序将在移动设备和网络上可用。您是在谈论其他 Stripe API 或功能吗?
  • 不,我的意思是有很多支付网关类型。移动支付、信用卡和银行卡。我想知道你用的是哪一个。
  • @SaeidAmini 我们在我们的应用程序中支持 SEPA 和信用卡,但是 Payment Method API 目前只支持信用卡,所以我现在的问题是信用卡。
  • 如果我错了,请纠正我,我以前使用条纹 api 进行欧盟付款,但是由于您正在保存付款方式,我假设您正在使用他们的保险库,并且您获得了一个客户 ID,每个客户 ID与付款方式相关联,那么为什么您不能使用 customerid 从您的保险库中获取付款方式

标签: c# angular stripe-payments


【解决方案1】:

我已经使用 DotNet 和 Angular 实现了一个像 ccAvenue 这样的支付网关,在我的例子中,我将数据发送到服务器,然后我尝试从服务器重定向到支付网关,但是 API 返回了一些结果,并且结果无法重定向。

所以我创建了一个带有实现的网络表单,我将我的应用程序重定向到网络表单页面,然后我从那里调用了 ccAvenue 页面,在响应 URL 中,我只发送网络表单的响应页面,然后保存响应我重定向到我的 Angular 应用程序。

【讨论】:

  • 恐怕我不明白,这对我的问题有何帮助。
【解决方案2】:

如果我也理解的话,我认为您的问题是以下问题及其顺序。希望对您有所帮助。

【讨论】:

  • 感谢详细的流程图。问题是,我已经使用他们的 Sources API 获得了该流程。现在由于欧洲法规,我必须使用他们新的付款方式 API。我也有使用他们的新 API 的流程,但是该 API 中缺少一种方法。这就是我的问题所在。所以我正在寻找一个非常具体到我在我的问题中列出的供应商 API 的答案:Stripe and their payment method API。
  • 根据我的流程图,漏掉了哪一步?
  • 我对一般流程没有问题。我需要知道特定 API 的哪个特定功能 将向我提供现有令牌的信用卡详细信息(例如品牌和最后四位数字),以便我可以显示它们在前端。旧 API 可以做到这一点,但新 API 缺少该方法。当用户输入他们的数据时,我需要提供他们当前付款方式的列表供他们选择。
  • 是的,我愿意。他们似乎没有我在他们的新 API 中寻找的方法。
  • 我实现了很多支付网关,我熟悉万事达卡和 Visa 卡,但不幸的是,我没有使用 Stripe 等欧洲支付网关的经验,但我正在努力提供帮助.也许这对你有帮助:stripe.com/docs/payments/cards/reusing-cards
【解决方案3】:

直接联系Stripe后,确认是这样的:

我认为这只是我们没有添加的疏忽。

移动 SDK 中有类似的功能,所以我不明白为什么我们不应该拥有它

没有立即计划在不久的将来重新添加该功能, 因此,作为一种解决方法,我将通过我们的后端隧道传输所有数据。

【讨论】:

  • 现在仍然如此,今天得到了 Stripe 支持。
【解决方案4】:

如果您想处理 3Dsecure 卡并仍支持 SEPA 等其他方法,这里有一个解决方法。

您可以将已确认的PaymentIntent(付款方式)或Source 都附加到Customer 对象。 在您的前端,您可以同时实现(用于 3Dsecure 卡的带有客户端密码的 StripeElements)和用于 SEPA 的 IBAN 元素。

我可以提供我如何将付款意图保存给客户的代码示例。它在 PHP 中,但对于其他语言的逻辑应该是相同的。

假设我们的客户已经确认 PaymentIntent 并且我们有它的 id:

$intent = \Stripe\PaymentIntent::retrieve($stripe_intent_id);
$payment_method = \Stripe\PaymentMethod::retrieve($intent->payment_method);
$stripe_customer = Stripe\Customer::create([
      'payment_method' => $intent->payment_method,
]);

如果您在使用附加方法之前已经创建了 Customer 对象:

$payment_method->attach(['customer' => 'cus_FTkGe4lv5LfyI0']);

然后你就可以使用Customer对象PaymentMethodSource充电;

我没有尝试将这两种方法附加到同一个客户对象(我们只允许客户同时拥有一个付款选项),但它应该可以工作。让我知道它是否适合你。

【讨论】:

  • 啊,谢谢你的建议,但我已经这样做了。问题是 Payment Method API 是否有一个名为 retrievePaymentMethod 的方法。我可以毫无问题地创建意图、将其附加到客户或对 SEPA 付款来源进行相同操作。
猜你喜欢
  • 1970-01-01
  • 2018-01-06
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
相关资源
最近更新 更多