leifermendez/laravel-stripe

此包最新版本(1.1.0)没有提供许可证信息。

用于laravel的包,已集成欧洲SCA(支付服务法规)系统,日期为2021年9月14日

1.1.0 2019-10-24 18:05 UTC

This package is auto-updated.

Last update: 2024-08-29 04:49:14 UTC


README

以下将展示如何使用SCA协议在Stripe中进行充值。此包允许我们注册用户,保存卡片用于后续支付,创建支付意图。

注意:在继续之前,请记得在 Stripe 获取您的访问凭证

安装

composer require leifermendez/laravel-stripe

Laravel 5.* 集成

将服务提供者添加到您的 config/app.php 文件中

    'providers'     => array(

        //...
        leifermendez\stripe\StripeProvider::class,

    ),

将外观添加到您的 config/app.php 文件中

    'aliases'       => array(

        //...
        'StripeSCA'  => leifermendez\stripe\StripeLaravelFacade::class,

    ),

使用

请记住将您的凭证放入 .env 文件中,模式:"sandbox" 或 "live"

# STRIPE

STRIPE_PK=pk_test_xxxxxxxxxxxx
STRIPE_SK=sk_test_xxxxxxxxxxx
STRIPE_MODE=sandbox

(1) 获取卡片Token

在某些情况下,需要通过API获取卡片Token(不推荐),建议使用 StripeJS

StripeJS 演示

//Test card: https://stripe.com/docs/testing#cards

$card_data = array(
    'card' => [
        'number' => 4000002500003155,
        'exp_month' => 12,
        'exp_year' => 2020,
        'cvc' => 123
    ]
);

$card = StripeLaravelFacade::tokenCard($card_data);
$card = json_decode($card, true);

dd($card);

(2) 保存客户

如果我们想保存我们的客户以供以后查询。

// https://stripe.com/docs/api/payment_intents/create

$data = array(
    'email' => 'leifer33@gmail.com',
    'source' => 'tok_1FOO42HBaMrHjOH4Cu0dnogU' // <-- Token Card Paso (1)
);

$user = StripeLaravelFacade::saveCustomer($data);
$user = json_decode($user, true);

dd($response);

Cliente

(3) 创建支付

注意:由于SCA的实施,支付必须在"支付意图" 下进行。技术上,我们执行的是请求支付的操作,Stripe负责检查卡片是否需要或不需要两步验证。

行为:可能发生两种情况

  • (1) 不需要双重验证,支付将正确完成。
  • (2) 需要双重验证
    • 响应的 "status" 将决定采取的行动 查看更多状态。在此情况下最常见的状态是 requires_action,此操作只能通过StripeJS完成
// https://stripe.com/docs/api/payment_intents/create

$amount = 134;
$charge = array(
    'description' => 'Mi primer cobro',
    'amount' => floatval($amount * 100),
    'currency' => 'EUR',
    'payment_method_types' => ['card'],
    'customer' => cus_G0amE3Dmn4p1f0, // <--- ID Customer Paso (2)
    'setup_future_usage' => 'off_session' // <--- Off Session
);

$response = StripeLaravelFacade::charge_sca($charge);

dd($response);

Pago

(3.1) 创建未捕获的支付

注意:(未捕获的),是需要保留或冻结以供以后使用或放弃的支付。例如:如果您有酒店,希望收取100EUR的保证金或押金,您可以使用此选项,因为系统会冻结客户卡片上的此金额7天。这笔钱只有在接下来的7天内才能用于收取,否则如果未进行任何收取,Stripe将释放此金额给客户。

$amount = 134;

$charge = array(
    'description' => 'Cobro de fianza' ,
    'amount' => floatval($amount * 100),
    'currency' => 'EUR',
    'payment_method_types' => ['card'],
    'off_session' => 'true',
    'confirm' => 'true',
    'capture_method' => 'manual', // <--- Indicamos que es un pago No Capturado
    'source' => 'card_1FX8TaHBaMrHjOH4MeiQmvPC', // <---  ID Source Customer Paso (2)
    'customer' => 'cus_G0amE3Dmn4p1f0'  // <--- ID Customer Paso (2)

);

$response = StripeLaravelFacade::charge_sca($charge);

dd($response);

No_capturado