首页 文章

我怎样才能真正保存信用卡以供日后使用?

提问于
浏览
2

Stripe给出了great example如何保存信用卡并在以后收费 .

除非他们以后实际上没有对信用卡收费,否则他们将在稍后向客户收费 . 我想允许我的用户选择哪个CC文件收费 .

API reference提示我应该能够通过传递卡ID和客户ID来创建收费所需的令牌,如果我正在使用Stripe Connect,我就是这样 .

所以我试过了:

\Stripe\Stripe::setApiKey(env('STRIPE_SECRET_KEY'))

$token = \Stripe\Token::create([
    'card' => 'card_19hSQyK4YQ3aCebXXXXXX',
    'customer' => 'cus_A1VRwawXXXXXX',
], ['stripe_account' => 'acct_15H0GKKXXXXXXXXX']);

但我得到这个错误:

必须作为连接帐户进行身份验证才能使用客户参数 . 有关详细信息,请参阅https://stripe.com/docs/api#create_card_token .

我不太清楚这意味着什么 . 我应该使用我的秘密密钥还是客户的秘密?

1 回答

  • 1

    如果您拥有卡#和客户#,则实际上不需要创建令牌 - 只需使用卡#作为 source 并将客户ID设置为 customer 来创建费用 .

    例如 . ,

    $charge = \Stripe\Charge::create([
        'amount' => 500,
        'currency' => 'CAD',
        'source' => 'card_19hSQyK4YQ3aCebXXXXXX',
        'customer' => 'cus_A1VRwawXXXXXX',
    ], ['stripe_account' => 'acct_15H0GKKXXXXXXXXX']);
    

    以下是如何从Stripe获得信用卡:

    $creditCards = [];
    
    \Stripe\Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
    $stripeCustomer = \Stripe\Customer::retrieve($booking->customer->stripe_customer_id);
    
    $defaultSource = $stripeCustomer->default_source;
    
    foreach($stripeCustomer->sources->all()->data as $paySource) {
        switch($paySource['object']) {
            case 'card':
                $creditCards[$paySource->id] = $paySource->brand . ' ending in ' . $paySource->last4 . ' (Exp. ' . $paySource->exp_month . '/' . $paySource->exp_year . ')';
                break;
            default:
                throw new \Exception("Unexpected Stripe payment source type: " . $paySource['object']);
        }
    }
    

相关问题