mews / pos
为土耳其银行提供的虚拟POS库
Requires
- php: >=7.4
- ext-dom: *
- ext-json: *
- ext-libxml: *
- ext-openssl: *
- ext-simplexml: *
- ext-zlib: *
- php-http/discovery: ^1.14
- psr/event-dispatcher-implementation: *
- psr/http-client-implementation: *
- psr/log: ^1.1 || ^2.0 || ^3.0
- symfony/http-foundation: ^4.0 || ^5.0 || ^6.0 || ^7.0
- symfony/serializer: ^4.0 || ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- escapestudios/symfony2-coding-standard: ^3.11
- monolog/monolog: ^2.8
- php-http/curl-client: ^2.2
- phpstan/phpstan: ^1.11
- phpstan/phpstan-strict-rules: ^1.4
- phpunit/phpunit: ^9
- rector/rector: ^1.1
- slim/psr7: ^1.4
- squizlabs/php_codesniffer: ^3.5
- symfony/event-dispatcher: ^5.4
- symfony/http-client: ^5.4
- symfony/var-dumper: ^5.1
- dev-master
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- 0.16.1
- 0.16.0
- 0.15.1
- 0.15.0
- 0.14.0
- 0.13.2
- 0.13.1
- 0.13.0
- 0.12.2
- 0.12.1
- 0.12.0
- 0.11.0
- 0.10.5
- 0.10.4
- 0.10.3
- 0.10.2
- 0.10.1
- 0.10.0
- 0.9.1
- 0.9.0
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.1
- 0.6.0
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.17
- 0.4.16
- 0.4.15
- 0.4.14
- 0.4.13
- 0.4.12
- 0.4.11
- 0.4.10
- 0.4.9
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.8
- 0.3.7
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.0
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.2
- 0.1.1
- 0.1.0
- dev-working-on-test-coverage
- dev-task/pacgage-upgrade
- dev-master-old-pkg
This package is auto-updated.
Last update: 2024-09-09 13:37:04 UTC
README
该包旨在通过一个公共接口类,实现所有土耳其银行虚拟POS系统的使用。
支持的支付网关/银行
主要标题
特性
- 非安全电子商务模型支付 (
PosInterface::MODEL_NON_SECURE
) - 3D Secure 模型支付 (
PosInterface::MODEL_3D_SECURE
) - 3D Pay 模型支付 (
PosInterface::MODEL_3D_PAY
) - 3D Host 模型支付 (
PosInterface::MODEL_3D_HOST
) - 订单/支付状态查询 (
PosInterface::TX_TYPE_STATUS
) - 查询订单历史记录 (
PosInterface::TX_TYPE_ORDER_HISTORY
) - 查询历史交易 (
PosInterface::TX_TYPE_HISTORY
) - 执行订单/退款 (
PosInterface::TX_TYPE_REFUND
) - 取消订单 (
PosInterface::TX_TYPE_CANCEL
) - 在发送到网关API之前修改API请求数据
- 支持不同货币的支付
- 重复(周期性)支付指令
- PSR-3 日志支持
- PSR-18 HTTP 客户端支持
不同网关的单个操作流程
- 从一个(3DSecure,3DPay,3DHost,NonSecure)支付模型切换到另一个模型只需要很少的修改。
- 对于同一类型操作,从不同网关返回的值已按相同格式归一化。也就是说,您不需要更新代码。
- 对于同一类型操作,发送到不同网关的值也已按相同格式归一化。
最新更新
有关最新更改,请参阅CHANGELOG
。
最低要求
- PHP >= 7.4
- ext-dom
- ext-json
- ext-openssl
- ext-libxml
- ext-zlib
- ext-SimpleXML
- ext-soap (仅适用于KuveytPos)
- PSR-18: HTTP 客户端
- PSR-14: 事件调度器
安装
框架
- 为 Symfony 安装,您可以使用 mews/pos-bundle。
- 为 Laravel 安装,您可以使用 mews/laravel-pos。
基本安装
$ composer require symfony/event-dispatcher mews/pos
库没有特定的HTTP Client依赖。可以使用任何符合PSR-18 HTTP Client标准的库。如果您的项目中已经安装了PSR-18实现,则会自动使用。
或者为了快速入门
$ composer require php-http/curl-client nyholm/psr7 symfony/event-dispatcher mews/pos
提供其他PSR-18实现的库: https://packagist.org.cn/providers/psr/http-client-implementation
然后在自己的项目目录中运行以下命令,将配置文件复制到项目中。
$ cp ./vendor/mews/pos/config/pos_production.php ./pos_prod_ayarlar.php
如果您在测试环境中开发,请同时复制测试设置
$ cp ./vendor/mews/pos/config/pos_test.php ./pos_test_ayarlar.php
复制后,您可以删除配置文件中不需要使用的银行设置。
然后,我们需要根据新设置创建并使用 Pos
对象。例如:
$yeniAyarlar = require __DIR__ . '/pos_prod_ayarlar.php'; // veya test ortamı için $yeniAyarlar = require __DIR__ . '/pos_test_ayarlar.php'; $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account, $yeniAyarlar, $eventDispatcher);
请不要在项目中直接使用库中的pos_production.php
和pos_test.php
配置文件!如上所述,建议您复制它们后再使用。
添加不同银行的虚拟POS
要将不同银行配置添加到您项目中复制的./pos_prod_ayarlar.php
文件中,可以使用下面的示例。
<?php return [ // Banka sanal pos tanımlamaları 'banks' => [ 'akbank' => [ 'name' => 'AKBANK T.A.S.', 'class' => Mews\Pos\Gateways\EstV3Pos::class, 'gateway_endpoints' => [ 'payment_api' => 'https://www.sanalakpos.com/fim/api', 'gateway_3d' => 'https://www.sanalakpos.com/fim/est3Dgate', 'gateway_3d_host' => 'https://sanalpos.sanalakpos.com.tr/fim/est3Dgate', ], ], // Yeni eklenen banka 'isbank' => [ // unique bir isim vermeniz gerekir. 'name' => 'İŞ BANKASI .A.S.', 'class' => \Mews\Pos\Gateways\EstV3Pos::class, // Altyapı sınıfı 'gateway_endpoints' => [ 'payment_api' => 'https://sanalpos.isbank.com.tr/fim/api', 'gateway_3d' => 'https://sanalpos.isbank.com.tr/fim/est3Dgate', ], ], ] ];
示例代码
示例可以在/examples
和/docs
目录中找到。
3D支付示例代码通常会将卡信息通过POST方式发送到网站服务器(index.php
<= form.php
),然后将其转发到网关。这样可以在不同银行之间保持实施的一致性(共同的信用卡表单和相同的处理流程)。通常,可以直接将卡信息转发到网关,而无需将其发送到网站服务器(通常,银行示例代码就是这样实现的)。但是
- 当有多个银行选项或客户需要更换银行时,您需要根据需要更新卡信息表单。
- 特别是YKB POSNet、Vakıf Katılım和VakıfBank POS要求通过网站服务器POST卡信息。
在弹出窗口或 Iframe 中进行支付
在不将客户重定向到银行页面的情况下,可以通过
注意事项
- 由于弹出窗口可能被浏览器阻止,因此建议使用modal box中的iframe。
故障排除
会话重置
如果您使用cookie会话,则当用户从网关返回网站时,会话可能会重置。您需要在response中设置samesite
值。请参考解决方案。
共享主机中的IP未定义错误
-
在共享主机中,除了您在Cpanel中看到的IP外,物理服务器还有一个额外的IP。这个IP地址在Cpanel中不可见,您需要向主机提供商咨询以获取它。如果您遇到此错误,请确保主机提供的IP地址被银行网关允许。
-
别忘了检查库环境值。
- 对于测试环境:
$pos->setTestMode(true);
- 对于生产环境:
$pos->setTestMode(false);
(默认为false
)
环境值在向银行发送请求时以及处理传入请求时都必须正确。
- 对于测试环境:
调试
库支持符合PSR-3标准的logger应用程序。示例:https://packagist.org.cn/providers/psr/log-implementation。
Monolog logger使用示例
composer require monolog/monolog
$handler = new \Monolog\Handler\StreamHandler(__DIR__.'/../var/log/pos.log', \Psr\Log\LogLevel::DEBUG); $logger = new \Monolog\Logger('pos', [$handler]); $pos = \Mews\Pos\Factory\PosFactory::createPosGateway( $account, $config, $eventDispatcher, null, $logger );
一般文化
如果您想了解支付模型,可以阅读这篇文章。
授权、预授权、预授权取消操作之间的区别
- 授权 - 我们所熟知和普遍使用的过程。一次性支付交易完成。为此,需要从用户那里获取信用卡信息。库中的对应操作为
PosInterface::TX_TYPE_PAY_AUTH
- 预授权 - 不是直接从用户那里扣除资金,而是在交易结束时将资金锁定。为此,需要从用户那里获取信用卡信息。库中的对应操作为
PosInterface::TX_TYPE_PAY_PRE_AUTH
- 预授权取消 - 实现因预授权而冻结的金额的提取。预授权完成后,例如一周后,可以发送后授权请求。为此,不需要用户提供信用卡信息。相反,某些网关需要
orderId
值,而另一些则要求预授权结果返回的银行端的orderId
。如果卖家想取消预授权请求,则发送cancel
请求。后授权操作的库中对应项为PosInterface::TX_TYPE_PAY_POST_AUTH
。此操作仅通过非安全支付模型实现。 TX_TYPE_PAY_AUTH
与TX_TYPE_PAY_PRE_AUTH
操作通常由所有支付模型(非安全、3DSecure、3DPay和3DHost)支持。
退款和取消操作之间的区别
- 退款 - 用于完成付款的退款。在某些网关中,此操作只能在当天结束时进行。退款操作必须指定金额,因为支付和退款的金额可能不同。库中此操作的对应项为
PosInterface::TX_TYPE_REFUND
- 取消 - 用于取消已完成的付款。在当天结束时之前可以进行。在当天结束时必须使用退款操作。通常不要求提供金额信息,但某些网关要求。库中此操作的对应项为
PosInterface::TX_TYPE_CANCEL
使用Docker测试环境
- 您的机器上必须安装Docker。
- 在项目根目录中运行
docker-compose up -d
命令。 - 在docker容器中运行
composer install
。
注意:localhost端口的80号端口必须为空。如果运行正常,可以通过以下方式访问代码示例:http://localhost/payten/3d/index.php。URL http://localhost/ 查看项目的examples
文件夹。
运行单元测试
您需要在项目根目录中运行此行
$ ./vendor/bin/phpunit
欢迎提出宝贵的意见、建议和贡献
如果您发现错误或有需要添加的POS系统,请创建问题。
许可
MIT