alkurn / yii2-stripe
Yii2 Stripe Wrapper
dev-master
2021-08-14 14:41 UTC
Requires
- bower-asset/jquery.payment: *
- league/oauth2-client: ^2.0
- stripe/stripe-php: *
- yiisoft/yii2: *
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
- scrutinizer/ocular: ^1.1
- squizlabs/php_codesniffer: ~2.0
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(); }