alkurn/yii2-stripe

Yii2 Stripe Wrapper

安装次数: 1,672

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 3

分支: 4

开放问题: 4

类型:yii2-extension

dev-master 2021-08-14 14:41 UTC

This package is not auto-updated.

Last update: 2024-09-22 04:17:52 UTC


README

安装

安装此扩展的首选方式是通过https://getcomposer.org.cn/download/

运行以下命令:

php composer.phar require alkurn/yii2-stripe "dev-master"

或将以下内容添加到你的composer.json文件的require部分:

"alkurn/yii2-stripe": "dev-master"

to the require section of your composer.json file.

使用方法

在main.php中添加一个新组件

'components' => [
...
'stripe' => [
    'class' => 'alkurn\stripe\Stripe',
    'publicKey' => "pk_test_xxxxxxxxxxxxxxxxxxx",
    'privateKey' => "sk_test_xxxxxxxxxxxxxxxxxx",
    'ClientId' => "ca_xxxxxxxxxxxxxxxxxx", //Optional
],
...

要渲染简单的结账表单,只需在视图中调用小部件,它将自动注册脚本。有关更多选项,请查看Stripe文档。

use alkurn\stripe\StripeCheckout;

<?= 
StripeCheckout::widget([
    'action' => '/',
    'name' => 'Yoga Trainer',
    'description' => 'Yoga Trainer ($40.00)',
    'amount' => 40,
    'image' => '/128x128.png',
]);
?>

自定义结账表单是简单表单的扩展版本,但您可以自定义按钮(参见buttonOptions)并按需处理令牌(tokenFunction)。

use alkurn\stripe\StripeCheckoutCustom;

<?= 
StripeCheckoutCustom::widget([
    'action' => '/',
    'name' => 'Demo test',
    'description' => '2 widgets ($20.00)',
    'amount' => 2000,
    'image' => '/128x128.png',
    'buttonOptions' => [
        'class' => 'btn btn-lg btn-success',
    ],
    'tokenFunction' => new JsExpression('function(token) { 
                alert("Here you should control your token."); 
    }'),
    'openedFunction' => new JsExpression('function() { 
                alert("Model opened"); 
    }'),
    'closedFunction' => new JsExpression('function() { 
                alert("Model closed"); 
    }'),
]);
?>

自定义表单的示例。StripeForm是一个扩展的ActiveForm,因此您可以执行金额和其他属性的验证。使用Jquery支付库是可选的,您可以禁用格式化和验证并编写自己的实现。您还可以更改JsExpression以用于响应和处理程序。

use alkurn\stripe\StripeForm;

 <?php
 $form = StripeForm::begin([
             'tokenInputName' => 'stripeToken',
             'errorContainerId' => 'payment-errors',
             'brandContainerId' => 'cc-brand',
             'errorClass' => 'has-error',
             'applyJqueryPaymentFormat' => true,
             'applyJqueryPaymentValidation' => true,
             'options' => ['autocomplete' => 'on']
 ]);
 ?>

 <div class="form-group">
     <label for="number" class="control-label">Card number</label>
     <span id="cc-brand"></span>
     <?= $form->numberInput() ?>
 </div>

 <div class="form-group">
     <label for="cvc" class="control-label">CVC</label>
     <?= $form->cvcInput() ?>
 </div>

 <!-- Use month and year in the same input. -->
 <div class="form-group">
     <label for="exp-month-year" class="control-label">Card expiry</label>
     <?= $form->monthAndYearInput() ?>
 </div>

 <!-- OR in two separate inputs. -->
 <div class="form-group">
     <label for="exp-month" class="control-label">Month</label>
     <?= $form->monthInput() ?>
 </div>

 <div class="form-group">
     <label for="exp-year" class="control-label">Year</label>
     <?= $form->yearInput() ?>
 </div>

 <div id="payment-errors"></div>
 
 <?= Html::submitButton('Submit'); ?>
 
 <?php StripeForm::end(); ?>
 
<?php
use alkurn\stripe\StripeConnect;


$provider = new StripeConnect([
    'clientId'          => '{stripe-client-id}',
    'clientSecret'      => '{stripe-client-secret}',
    'redirectUri'       => 'https://example.com/callback-url',
]);

if (!isset($_GET['code'])) {

    // If we don't have an authorization code then get one
    $authUrl = $provider->getAuthorizationUrl();
    $_SESSION['oauth2state'] = $provider->getState();
    header('Location: '.$authUrl);
    exit;

// Check given state against previously stored one to mitigate CSRF attack
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {

    unset($_SESSION['oauth2state']);
    exit('Invalid state');

} else {

    // Try to get an access token (using the authorization code grant)
    $token = $provider->getAccessToken('authorization_code', [
        'code' => $_GET['code']
    ]);

    // Optional: Now you have a token you can look up a users profile data
    try {

        // We got an access token, let's now get the user's details
        $account = $provider->getResourceOwner($token);

        // Use these details to create a new profile
        printf('Hello %s!', $account->getDisplayName());

    } catch (Exception $e) {

        // Failed to get user details
        exit('Oh dear...');
    }

    // Use this to interact with an API on the users behalf
    echo $token->getToken();
}