首页 > 解决方案 > 条卡处理

问题描述

我希望这里有人可以关注我的流程,看看我做事是否正确,如果没有,建议我在哪里改进。

我的场景很简单:

第1步

我相信此时我有一个响应 ID 和一个源对象,其中包含抽象的卡片详细信息以及卡片 ID。

第2步

我连接到 Stripe API:

Stripe::setApiKey($stripe_secret_key); // note this is a Connect account
Stripe::setApiVersion('2018-05-21');

我检查我是否已经为此电子邮件地址存储了 Stripe 客户 ID。如果是这样,我使用它。否则,我创建一个 Stripe 客户:

$customer = Stripe_Customer::create(
    [
        'description' => $u->user_email,
        'email'=>$u->user_email
    ], $stripe_access_token
);
$customer_id = $customer->id;

然后我获取该客户的 Stripe 对象:

$customer = Stripe_Customer::retrieve($customer_id);

然后我使用响应 ID 获取源对象

$source = Stripe_Token::retrieve($form_response_id);

第 3 步

我想确保费用是从客户现在使用的卡中扣除的,无论他们之前是否访问过,或者之前是否使用过同一张卡。所以我将此来源保存给客户:

$customer->sources->create(['source' => $source->id]);
$customer->save();

...而且,虽然最新的来源应该是默认来源(即使用的那个),但我确保它:

$customer->default_source = $source->card->id;
$customer->save();

第4步

我做了一些本地工作来获取费用描述、计算申请费用等。我把它完全作为一个费用数组,使用我从 Stripe.js 收到的初始卡 ID 作为“源”参数

$charge = [
    'customer' => $customer->id,
    'source' => $transaction_card_id,
    'amount' => $total_gross_received_cents,
    'currency' => 'EUR',
    'description' => $transaction_desc,
    'application_fee' => $application_fee
];

$charge_obj = Stripe_Charge::create($charge, $stripe_access_token);
$charge_id = $charge_obj->id;

然后我将其保存$charge_id在我的交易记录中。

问题

我最大的担忧围绕着第 3 步——确保接受和使用正确的卡。注意:

我是否可以每次都将卡片保存为客户的新来源,即使它已经存在并已分配给他们?它似乎正在工作,并覆盖重复的源记录,但我想确定。

显然,我对推出一些我觉得我还没有完全理解的东西感到紧张,所以如果有人能给我一个大拇指或大拇指向下,我将非常感激。

标签: phpstripe-payments

解决方案


这是我的笔记:

  • 卡信息需要安全地存储在受信任的支付网关(例如:Stripe、PayPal)的一侧。不存储敏感的信用卡信息是PCI 合规性要求之一。

  • 就您而言,我认为您可以使用令牌。或者创建一个客户并保存您的客户 ID 以供以后使用。

https://stripe.com/docs/saving-cards
https://stripe.com/docs/recipes/updating-customer-cards
https://stackoverflow.com/a/18377973/5179786


推荐阅读