muratdemirel / pos
为土耳其银行提供的虚拟POS库
Requires
- php: >=7.1.3
- ext-dom: *
- ext-json: *
- ext-openssl: *
- ext-simplexml: *
- guzzlehttp/guzzle: ^7.4.5
- symfony/http-foundation: ^6
- symfony/serializer: ^5.0
Requires (Dev)
- escapestudios/symfony2-coding-standard: ^3.11
- phpunit/phpunit: ^8.3
- squizlabs/php_codesniffer: ^3.5
- symfony/var-dumper: ^5.1
- dev-master
- 0.7.4
- v0.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-78-garanti-pos-issuccess-hatalı-sonuç-veriyor
- dev-76-estpos-3d-ödeme-tamamlama-sorunu
- dev-task/pacgage-upgrade
- dev-master-old-pkg
This package is auto-updated.
Last update: 2024-09-29 06:08:45 UTC
README
本包的目标是,通过一个公共的接口类,使所有土耳其银行虚拟POS系统可使用。
-
EST POS (Asseco) 基础架构已完全测试并准备好使用。已测试过Akbank、TEB和Ziraat银行。
-
Garanti Virtual POS 支付系统正在运行,但3D支付部分需要在生产环境中进行测试。
-
YapıKredi PosNet 系统3D支付正在运行,但尚未测试
cancel
、refund
操作。 -
Finansbank PayFor 支持虚拟POS系统,由于Finansbank没有IP限制,您可以在localhost上运行
examples
目录中的示例代码进行测试。 -
VakifBank GET 7/24 MPI和VPOS 7/24 3D Secure支付运行正常,其他操作在发现问题后将进行修复。
-
InterPOS (Deniz bank) 已添加支持,在测试过程中将修复发现的问题。
-
Kuveyt POS 已添加3D Secure支付支持,在测试过程中将修复发现的问题。
主要标题
特性
- 标准电子商务模型支付 (
AbstractGateway::MODEL_NON_SECURE
) - 3D Secure模型支付 (
AbstractGateway::MODEL_3D_SECURE
) - 3D Pay模型支付 (
AbstractGateway::MODEL_3D_PAY
) - 3D Host模型支付 (
AbstractGateway::MODEL_3D_HOST
) - 订单/支付查询 (
AbstractGateway::TX_STATUS
) - 订单/支付历史查询 (
AbstractGateway::TX_HISTORY
) - 订单/退款 (
AbstractGateway::TX_REFUND
) - 订单取消 (
AbstractGateway::TX_CANCEL
)
不同网关的单个操作流程
- 要切换到不同银行,只需使用正确的
AccountFactory
方法来更改账户即可。 - 要在
3D
、3DPay
、3DHost
支付之间切换,只需在账户配置中更改账户类型(例如AbstractGateway::MODEL_3D_PAY
)。由于流程相同,因此无需更改代码。 - 对于同一类型的操作,不同网关返回的值已格式化为相同。也就是说,您不需要更新代码。
- 对于同一类型的操作,不同网关将发送相同格式的值。也就是说,您不需要更新代码。
最新更新
有关最新更改的详细信息,请参阅CHANGELOG
。
最低要求
- PHP >= 7.1.3
- ext-dom
- ext-json
- ext-openssl
- ext-SimpleXML
安装
在您的测试服务器上;
$ mkdir pos-test && cd pos-test $ composer require mews/pos
运行单元测试
在项目根目录中运行此命令
$ ./vendor/bin/phpunit tests
示例支付代码
config.php (配置文件)
<?php require './vendor/autoload.php'; // API kullanıcı bilgileri $account = \Mews\Pos\Factory\AccountFactory::createEstPosAccount( 'akbank', //pos config'deki ayarın index name'i 'yourClientID', 'yourKullaniciAdi', 'yourSifre', AbstractGateway::MODEL_3D_SECURE, //storetype 'yourStoreKey', AbstractGateway::LANG_TR ); // API kullanıcı hesabı ile paket bir değişkene aktarılıyor try { $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account); //değere göre API URL'leri test veya production değerler kullanılır. $pos->setTestMode(true); } catch (\Mews\Pos\Exceptions\BankNotFoundException | \Mews\Pos\Exceptions\BankClassNullException $e) { dd($e)); }
form.php (在从用户获取信用卡信息后运行的代码)
<?php require 'config.php'; // Sipariş bilgileri $order = [ 'id' => 'BENZERSIZ-SIPERIS-ID', 'amount' => 1.01, 'currency' => 'TRY', //TRY|USD|EUR, optional. default: TRY 'installment' => 0, //0 ya da 1'den büyük değer, optional. default: 0 //MODEL_3D_SECURE, MODEL_3D_PAY, MODEL_3D_HOST odemeler icin zorunlu //Success ve Fail URL'ler farklı olabilir ama kütüphane success ve fail için aynı kod çalıştırır. 'success_url' => 'https://example.com/response.php', 'fail_url' => 'https://example.com/response.php', //gateway'e gore zorunlu olan degerler 'ip' => $ip, //EstPos, Garanti, KuveytPos, VakifBank 'email' => 'mail@customer.com', // EstPos, Garanti, KuveytPos, VakifBank 'name' => 'John Doe', // EstPos, Garanti 'user_id' => 'Müşteri ID', // EstPos 'rand' => md5(uniqid(time())), // EstPos, Garanti, PayFor, InterPos, VakifBank. Rastegele değer. //lang degeri verilmezse account (EstPosAccount) dili kullanılacak 'lang' => AbstractGateway::LANG_TR, //LANG_TR|LANG_EN. Kullanıcının yönlendirileceği banka gateway sayfasının ve gateway'den dönen mesajların dili. ]; $session->set('order', $order); // Kredi kartı bilgieri $card = \Mews\Pos\Factory\CreditCardFactory::create( $pos, '4444555566667777', '25', '12', '123', 'john', AbstractCreditCard::CARD_TYPE_VISA, //bankaya göre zorunlu ); // API kullanıcısı ile oluşturulan $pos değişkenine prepare metoduyla sipariş bilgileri tanımlanıyor. $pos->prepare($order, \Mews\Pos\Gateways\AbstractGateway::TX_PAY, $card); try { // $formData icerigi form olarak banka gateway'ne yonlendirilir. // /examples/template/_redirect_form.php bakınız. $formData = $pos->get3DFormData(); } catch (\Throwable $e) { dd($e); }
response.php (从网关返回后运行的代码)
<?php require 'config.php'; $order = $session->get('order'); $pos->prepare($order, \Mews\Pos\Gateways\AbstractGateway::TX_PAY); // Ödeme tamamlanıyor, // Ödeme modeli (3D Secure, 3D Pay, 3D Host, Non Secure) $account tarafında belirlenir. // $card değeri Non Secure modelde ve Vakıfbank için 3DPay ve 3DSecure ödemede zorunlu. $pos->payment($card); // Ödeme başarılı mı? $pos->isSuccess(); // Sonuç çıktısı dump($pos->getResponse()); //response içeriği için /examples/template/_payment_response.php dosyaya bakınız.
添加不同银行的虚拟POS
在您的项目目录中
$ cp ./vendor/mews/pos/config/pos.php ./pos_ayarlar.php
或者;
在项目中创建一个配置文件(例如pos_ayarlar.php),然后将包内的./config/pos.php
文件的内容复制到这里。
<?php return [ //param birimleri Gateway'ler icinde tanımlıdır, özel bir mapping istemediğiniz sürece boş bırakınız 'currencies' => [ // 'TRY' => 949, // 'USD' => 840, ], // Banka sanal pos tanımlamaları 'banks' => [ 'akbank' => [ 'name' => 'AKBANK T.A.S.', 'class' => \Mews\Pos\Gateways\EstPos::class, 'urls' => [ 'production' => 'https://www.sanalakpos.com/fim/api', 'test' => 'https://entegrasyon.asseco-see.com.tr/fim/api', 'gateway' => [ 'production' => 'https://www.sanalakpos.com/fim/est3Dgate', 'test' => 'https://entegrasyon.asseco-see.com.tr/fim/est3Dgate', ], ] ], // Yeni eklenen banka 'isbank' => [ 'name' => 'İŞ BANKASI .A.S.', 'class' => \Mews\Pos\Gateways\EstPos::class, // Altyapı sınıfı 'urls' => [ 'production' => 'xxxx', // API Url 'test' => 'xxxx', // API Test Url 'gateway' => [ 'production' => 'xxxx', // 3d Kapı Url 'test' => 'xxxx', // 3d Test Kapı Url ], ] ], ] ];
之后,我们需要根据新设置创建并使用我们的对象。例如
//yeni ayar yolu ya da degeri $yeni_ayarlar = require './pos_ayarlar.php'; $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account, $yeni_ayarlar);
示例代码
在/examples
目录中。
3D支付示例代码通常会将卡信息通过POST方式发送到网站服务器(index.php
=> form.php
),然后被处理并导向网关。这样确保了不同银行之间的实现不会发生变化(统一的信用卡表单和相同的处理流程)。一般来说,可以直接将卡信息导向网关,而不是先发送到网站服务器(通常,银行示例代码就是这样实现的)。但是,
- 当有多个银行选项或者客户想要更换银行时,需要根据情况更新卡信息表单。
- 此外,YKB POSNet和VakıfBank POS要求通过网站服务器发送卡信息。
故障排除
会话重置
如果使用Cookie会话,当用户从网关返回网站时,会话可能会被重置。您需要在Response中设置samesite
值。[解决方案](https://stackoverflow.com/a/51128675/4896948)。
共享主机中的IP地址未定义错误
在共享主机中,除了您在Cpanel中看到的IP地址外,物理服务器还有一个额外的IP地址。这个IP地址在Cpanel中不会显示,您需要从您的托管服务提供商那里了解。如果遇到这个错误,请确保在银行网关中允许该IP地址。
通用文化
NonSecure、3D Secure、3DPay和3DHost支付模式之间的区别
- 3D - 根据银行的不同可能会有不同的名称,例如3D Full。从网关(输入3D密码的页面)返回后,会向银行网关发送一个额外的请求(授权请求)以完成支付。如果不发送此请求,则支付不会完成。
- 3DPay - 根据银行的不同可能会有不同的名称,例如3D Half。从网关返回后,支付被认为是完成的。不需要像3D支付那样发送额外的授权请求。
- 3DHost - 将用户引导到银行的页面进行信用卡输入,输入信用卡信息后,会被引导到银行的3D网关页面,然后返回到您的网站。导向完成后,支付将被视为完成。
- NonSecure - 支付操作在用户不进行3D认证的情况下完成。
- NonSecure、3D和3DPay - 支付中,信用卡信息由您的网站获取。而
3DHost 支付中,信用卡信息由银行网页获取。
授权、预授权、预授权取消操作之间的区别
- 授权 - 我们所熟悉并广泛使用的操作。一次性的支付操作完成。为此,总是需要从用户那里获取信用卡信息。库中的对应操作是
AbstractGateway::TX_PAY
- 预授权 - 而不是直接从用户那里提取资金,而是在交易完成后冻结资金。为此,总是需要从用户那里获取信用卡信息。库中的对应操作是
AbstractGateway::TX_PRE_PAY
- 预授权取消 - 在预授权完成后取消冻结的资金。在预授权之后,例如一周后,可以发送Post Otorizasyon请求。为此,不需要从用户那里获取信用卡信息。一些网关请求
orderId
值,而另一些则请求预授权结果返回的银行侧的orderId
。如果卖家想要取消预授权请求,则需要发送cancel
请求。库中的Post Otorizasyon操作对应的是AbstractGateway::TX_POST_PAY
- 这三种操作类型支持所有支付模式(NonSecure、3D、3DPay和3DHost)。
退款和取消操作之间的区别
- 退款 - 用于退还已完成的支付。可以在支付完成后的一定时间后(例如12小时)进行。退款操作需要金额是必须的,因为支付和退款金额可能不同。库中的对应操作是
AbstractGateway::TX_REFUND
- 取消 - 用于取消已完成的支付。必须在一定时间内(例如12小时)进行。如果网关在这段时间后改变了规则,则需要使用退款操作。通常不需要金额信息,但某些网关可能会请求。库中的对应操作是
AbstractGateway::TX_CANCEL
使用Docker测试环境
您的机器上需要安装Docker。在项目的根目录下运行docker-compose up
命令即可。 注意:localhost端口号80必须空闲。如果没有问题,可以通过https:///akbank/3d/index.php这样的方式访问代码示例。 https:/// URL会查看项目的examples
目录。
路线图
- 将准备文档
期待您的宝贵评论、建议和贡献。
如果您发现任何问题或需要添加POS系统,请创建issue。
许可
MIT