webgriffe / sylius-pausepay-plugin
Sylius PausePay支付网关插件
Requires
- php: ^8.0
- guzzlehttp/psr7: ^1.8 || ^2.5
- nesbot/carbon: ^2.72
- php-http/discovery: ^1.19
- psr/http-factory: ^1.0
- sylius/sylius: ^1.11
- symfony/webpack-encore-bundle: ^1.17
Requires (Dev)
- behat/behat: ^3.14
- behat/mink-selenium2-driver: ^1.6
- dbrekelmans/bdi: ^1.1
- dmore/behat-chrome-extension: ^1.4
- dmore/chrome-mink-driver: ^2.9
- friends-of-behat/mink: ^1.10
- friends-of-behat/mink-browserkit-driver: ^1.6
- friends-of-behat/mink-debug-extension: ^2.1
- friends-of-behat/mink-extension: ^2.7
- friends-of-behat/page-object-extension: ^0.3
- friends-of-behat/suite-settings-extension: ^1.1
- friends-of-behat/symfony-extension: ^2.0
- friends-of-behat/variadic-extension: ^1.5
- phpspec/phpspec: ^7.5
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-doctrine: 1.3.69
- phpstan/phpstan-strict-rules: ^1.5
- phpstan/phpstan-webmozart-assert: ^1.2
- phpunit/phpunit: ^9.5
- polishsymfonycommunity/symfony-mocker-container: ^1.0
- robertfausk/behat-panther-extension: ^1.1
- sylius-labs/coding-standard: ^4.3
- sylius-labs/suite-tags-extension: ^0.2
- symfony/asset: ^5.4
- symfony/browser-kit: ^5.4
- symfony/debug-bundle: ^5.4
- symfony/dotenv: ^5.4
- symfony/flex: ^2.4
- symfony/intl: ^5.4
- symfony/web-profiler-bundle: ^5.4
- theofidry/alice-data-fixtures: ^1.5
- vimeo/psalm: ^5.9
README
Sylius PausePay 插件
Sylius PausePay支付方式的插件
安装
-
运行
composer require webgriffe/sylius-pausepay-plugin
-
将以下代码添加到您的
config/bundles.php
文件中:Webgriffe\SyliusPausePayPlugin\WebgriffeSyliusPausePayPlugin::class => ['all' => true]
。通常,通过
composer require
命令,插件会自动添加到config/bundles.php
文件中。如果没有,您需要手动添加。 -
创建一个新的文件
config/packages/webgriffe_sylius_pausepay_plugin.yaml
。imports: - { resource: "@WebgriffeSyliusPausePayPlugin/config/config.php" }
-
创建一个新的文件
config/routes/webgriffe_sylius_pausepay_plugin.yaml
。webgriffe_sylius_pausepay_plugin_shop: resource: "@WebgriffeSyliusPausePayPlugin/config/routes/shop.php" prefix: /{_locale} requirements: _locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$ webgriffe_sylius_pausepay_plugin_index: resource: "@WebgriffeSyliusPausePayPlugin/config/routes/index.php" webgriffe_sylius_pausepay_plugin_payum: resource: "@WebgriffeSyliusPausePayPlugin/config/routes/payum.php" sylius_shop_payum_cancel: resource: "@PayumBundle/Resources/config/routing/cancel.xml"
-
添加 PaymentOrder 实体。创建一个名为
src/Entity/Payment/PaymentOrder.php
的新文件,内容如下:<?php declare(strict_types=1); namespace App\Entity\Payment; use Doctrine\ORM\Mapping as ORM; use Webgriffe\SyliusPausePayPlugin\Entity\PaymentOrder as BasePaymentOrder; /** * @ORM\Entity * @ORM\Table(name="webgriffe_sylius_pausepay_payment_order") */ class PaymentOrder extends BasePaymentOrder { }
-
添加一个新的 CompanyInfoResolver 服务,它装饰了插件中的虚拟服务
webgriffe_sylius_pausepay.resolver.company_info
。此服务用于解析“订单”的公司信息,并在创建支付时传递给 PausePay 系统。创建一个名为
src/Resolver/PausePay/CompanyInfoResolver.php
的新文件,内容如下:<?php declare(strict_types=1); namespace App\Resolver\PausePay; use Sylius\Component\Core\Model\OrderInterface; use Webgriffe\SyliusPausePayPlugin\Resolver\CompanyInfoResolverInterface; use Webgriffe\SyliusPausePayPlugin\ValueObject\CompanyInfo; final class CompanyInfoResolver implements CompanyInfoResolverInterface { public function resolveFromOrder(OrderInterface $order): CompanyInfo { // TODO: your logic here } }
并将其定义为具有别名
webgriffe_sylius_pausepay.resolver.company_info
的服务装饰/替换。例如,创建一个名为config/services/resolver.yaml
的文件,内容如下:services: webgriffe_sylius_pausepay.resolver.company_info: class: App\Resolver\PausePay\CompanyInfoResolver
TODO: 添加沙盒逻辑
-
如果您有 Sylius 服务
PaymentMethodResolver
的自定义实现,您必须使用服务PausePayAvailabilityChecker
添加逻辑以检查 PausePay 支付方法的可用性。TODO: 添加示例
-
运行
php bin/console doctrine:migrations:migrate
-
运行
php bin/console sylius:install:assets
或者,您可以将条目添加到您的
webpack.config.js
文件中.addEntry( 'webgriffe-sylius-pausepay-entry', './vendor/webgriffe/sylius-pausepay-plugin/public/poll_payment.js' )
然后覆盖模板
WebgriffeSyliusPausePayPlugin/after_pay.html.twig
以包含条目{% block javascripts %} {{ parent() }} <script> window.afterUrl = "{{ afterUrl }}"; window.paymentStatusUrl = "{{ paymentStatusUrl }}"; </script> {{ encore_entry_script_tags('webgriffe-sylius-pausepay-entry', null, 'sylius.shop') }} {% endblock %}
用法
访问管理员面板并转到“支付方式”部分。创建一个新的支付方式,并将“PausePay”作为网关选择。然后,使用所需的参数配置支付方式。
贡献
有关Sylius插件开发的全面指南,请访问Sylius文档,在那里您可以找到插件开发指南,其中充满了示例。
快速入门安装
传统
-
运行
composer create-project sylius/plugin-skeleton ProjectName
。 -
从插件骨架根目录,运行以下命令
$ (cd tests/Application && yarn install) $ (cd tests/Application && yarn build) $ (cd tests/Application && APP_ENV=test bin/console assets:install public) $ (cd tests/Application && APP_ENV=test bin/console doctrine:database:create) $ (cd tests/Application && APP_ENV=test bin/console doctrine:schema:create)
要设置插件数据库,请记住在 tests/Application/.env
和 tests/Application/.env.test
中配置您的数据库凭据。
Docker
-
执行
docker compose up -d
-
初始化插件
docker compose exec app make init
-
在浏览器中打开
open localhost
用法
运行插件测试
-
PHPUnit
vendor/bin/phpunit
-
PHPSpec
vendor/bin/phpspec run
-
Behat(非JS场景)
vendor/bin/behat --strict --tags="~@javascript"
-
Behat(JS场景)
-
启动无头Chrome
google-chrome-stable --enable-automation --disable-background-networking --no-default-browser-check --no-first-run --disable-popup-blocking --disable-default-apps --allow-insecure-localhost --disable-translate --disable-extensions --no-sandbox --enable-features=Metal --headless --remote-debugging-port=9222 --window-size=2880,1800 --proxy-server='direct://' --proxy-bypass-list='*' http://127.0.0.1
- 安装SSL证书(仅需要一次)并在
127.0.0.1:8080
上运行测试应用程序的web服务器
symfony server:ca:install APP_ENV=test symfony server:start --port=8080 --dir=tests/Application/public --daemon
- 运行Behat
vendor/bin/behat --strict --tags="@javascript"
-
静态分析
-
Psalm
vendor/bin/psalm
-
PHPStan
vendor/bin/phpstan analyse -c phpstan.neon -l max src/
-
-
编码标准
vendor/bin/ecs check
使用您的插件打开Sylius
-
使用
test
环境(cd tests/Application && APP_ENV=test bin/console sylius:fixtures:load) (cd tests/Application && APP_ENV=test bin/console server:run -d public)
-
使用
dev
环境(cd tests/Application && APP_ENV=dev bin/console sylius:fixtures:load) (cd tests/Application && APP_ENV=dev bin/console server:run -d public)