mludvik / yii2-gopay
Yii2 对官方 [GoPay 的 Payments REST API PHP SDK](https://github.com/gopaycommunity/gopay-php-api) 的集成。
1.0.0
2018-09-09 08:53 UTC
Requires
- gopay/payments-sdk-php: ~1.3.0
- yiisoft/yii2: ~2.0
This package is not auto-updated.
Last update: 2024-09-24 10:35:19 UTC
README
Yii2 对官方 GoPay 的 Payments REST API PHP SDK 的集成。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令:
php composer.phar require mludvik/yii2-gopay:"~1.0"
或者将以下内容添加到你的 composer.json 文件的 require 部分中:
"mludvik/yii2-gopay": "~1.0"
用法
在开始使用此扩展之前,建议您阅读 GoPay REST API 文档。
GoPayComponent
GoPayComponent 是 GoPay PHP SDK 的轻量级包装。
通过添加相应的组件配置来启用它。
'components' => [
...
'goPay' => [
'class' => 'mludvik\gopay\GoPayComponent',
'config' => [
'goid' => '...',
'clientId' => '...',
'clientSecret' => '...',
'isProductionMode' => YII_ENV_PROD,
'scope' => TokenScope::ALL,
'language' => Language::ENGLISH,
'timeout' => 30,
],
],
...
]
然后您可以在 Payments 对象上调用任何方法。
use Yii;
Yii::$app->goPay->createPayment([...]);
Yii::$app->goPay->getStatus(...);
...
GoPayAsset
GoPayAsset 将前端 GoPay 依赖项导入到您的页面中。它对 YII_EVN 常量敏感 - 当 YII_ENV === 'prod' 时加载生产版本,否则加载测试版本。有多种方法可以使用它。
- 要在所有页面上加载它,请将其注册到
AppAsset中。
class AppAsset extends AssetBundle {
...
public $depends = [
...
'mludvik\gopay\GoPayAsset',
];
}
- 要在特定页面上加载它,请将其注册到相应的视图中。
use mludvik\gopay\GoPayAsset;
GoPayAsset::register($this);
- 当使用以下描述的
GoPayForm时,您根本不需要注册GoPayAsset。它将在渲染GoPayForm的页面上自动注册。
GoPayForm
GoPayForm 是一个用于帮助您构建结账页面的小部件。
GoPayForm 实际上是 ActiveForm,有两个区别。
- 它使用异步 POST 请求将数据提交到控制器,然后将用户重定向到支付网关。
- 它有一个静态方法
response,可以在控制器中使用来构建对表单提交的预期响应。
示例
首先,您需要一个表单来收集用户的支付偏好(例如,首选的支付方式)。这也是放置一些业务逻辑的好地方。
namespace app\models;
use Yii;
use yii\base\Model;
class CheckoutForm extends Model {
public $paymentMethod;
...
public function createPayment() {
// Build request based on form's data.
$request = [...];
// Establish payment on GoPay side.
return Yii::$app->goPay->createPayment($request);
}
}
然后创建结账操作。
namespace app\controllers;
use Yii;
use yii\web\Controller;
use mludvik\gopay\GoPayForm;
use app\models\CheckoutForm;
class PaymentController extends Controller {
...
public function actionCheckout() {
$model = CheckoutForm;
if(Yii::$app->request->isAjax) {
if($model->load(Yii::$app->request->post()) && $model->validate()) {
$response = $model->createPayment();
return GoPayForm::response($response);
} else {
return GoPayForm::response(null);
}
}
return $this->render('checkout', ['model' => $model]);
}
}
最后,创建视图。
<?php use mludvik\gopay\GoPayForm; ?>
<?php $form = GoPayForm::begin(); ?>
...
<?= Html::submitButton('Pay') ?>
<?php GoPayForm::end(); ?>