lotuashvili / laravel-tbcpay
Laravel TBC支付
Requires
- php: ^7.1|^8.0|^8.1
- doctrine/dbal: ^2.9
- wearede/tbcpay-php: ^0.9.2
README
Laravel TbcPay
此包允许您在Laravel应用程序中使用TBC支付。
目录
安装
composer require lotuashvili/laravel-tbcpay
适用于Laravel <= 5.4
如果您使用Laravel 5.4或更低版本,您需要在您的 config/app.php 文件中手动添加服务提供者。打开 config/app.php 并将 TbcPayServiceProvider 添加到 providers 数组中。
'providers' => [ # Other providers Lotuashvili\LaravelTbcPay\TbcPayServiceProvider::class, ],
然后运行
php artisan vendor:publish --provider="Lotuashvili\LaravelTbcPay\TbcPayServiceProvider"
并运行迁移
php artisan migrate
交易类型(SMS / DMS)
此系统中存在两种交易类型: SMS 和 DMS。
SMS - 是一种直接支付方式,钱在1个事件中收费,一旦客户输入信用卡详情并点击继续。
DMS - 是一种两步法,首先事件在卡片上锁定资金(最多30天),第二次事件捕获资金(例如,当产品被发送给客户时进行第二次事件)。
每天,商户必须关闭营业日。
生成和放置证书
TBC以 .p12 格式提供SSL证书,我们需要将其转换为 .pem 格式。使用以下命令:
openssl pkcs12 -in *.p12 -out tbcpay.pem
转换后,将证书(.pem 文件)放置在 storage/certificates 文件夹中。可以取任何名字(例如此示例中的 tbcpay.pem)并在 .env 中指定名称和密码。
TBCPAY_CERTIFICATE_NAME=tbcpay.pem
TBCPAY_CERTIFICATE_PASS=YourPassword123
之后,将 storage/certificates 文件夹添加到您的 .gitignore。
环境
设置环境变量
注意:请指定证书文件名而不是完整路径。证书放置在 storage/certificates 文件夹中。
使用ISO 4217标准设置默认货币。所有货币列表:http://en.wikipedia.org/wiki/ISO_4217(默认为981 - GEL)。
TBCPAY_DEBUG=true
TBCPAY_CERTIFICATE_NAME=tbcpay.pem
TBCPAY_CERTIFICATE_PASS=YourPassword123
TBCPAY_DEFAULT_CURRENCY=981
配置
金额单位
您可以从配置或 .env 文件中更改默认金额单位。金额单位用于在发送请求到TBC之前乘以最终金额。TBC银行要求金额以分(或Tetri)为单位,而不是USD(或GEL)。
默认情况下,单位设置为100,因此您可以将金额以GEL的形式传递,例如 $amount = 300 将重定向到具有 300GEL 金额的结账页面。
如果将单位设置为 1,则将重定向到具有 3GEL 金额的结账页面。
要更改金额单位,请在 .env 文件中将 TBCPAY_AMOUNT_UNIT=1 设置为或在 config/tbc.php 中直接更改 amount_unit。
商户URL
如果有一天TBC更新了商户和提交URL,您只需简单地从 .env 或 config/tbc.php 中覆盖旧URL。
在 .env 中设置 TBCPAY_MERCHANT_URL 和 TBCPAY_FORM_URL 或直接在 config/tbc.php 中设置 merchant_url 和 form_url。
调试
只需通过在 .env 中设置 TBCPAY_DEBUG=true 启用调试,默认情况下所有日志都会在 tbc_logs 表中。您可以使用 Lotuashvili\LaravelTbcPay\Models\TbcLog 模型访问它们。
使用方法
设置路由和控制器
发布文件后,将创建 app/Http/Controllers/TbcPayController。请随意修改控制器。
打开 routes/web.php 并定义路由(移除变量以使用默认值)。
<?php use Lotuashvili\LaravelTbcPay\TbcPay; // Other routes TbcPay::routes( $controller, // Default: 'TbcPayController' $successMethod, // Default: 'success' $failMethod // Default: 'fail' );
注意:排除 tbcpay/* 路由的 CSRF Token 验证,以避免在成功/失败 URL 上出现 TokenMismatchException。
在您的 app/Http/Middleware/VerifyCsrtToken.php 中添加 URL。
<?php class VerifyCsrfToken extends Middleware { // Other variables protected $except = [ 'tbcpay/*', ]; }
将成功和失败 URL 发送给 TBC。
成功:http://website.ge/tbcpay/success
失败:http://website.ge/tbcpay/fail
支付
在您的控制器中注入 \Lotuashvili\LaravelTbcPay\TbcPay 类以使用支付。
<?php class PaymentController { // Other methods public function pay(\Lotuashvili\LaravelTbcPay\TbcPay $tbcPay) { // OPTIONAL: Load model and start transaction by model // Model relation will be used in tbc_transactions table $model = User::first(); return $tbcPay->init( 100, // Amount 981, // Currency (Optional) 'Biller name', // Name of biller (Optional) 'Website payment', // Message to be displayed on a payment page (Optional) 'ge' // Language of the payment page (Optional) )->start($model) // Model parameter is optional ->sms() // Optional: Specify transaction type (Supported: sms and dms) ->view(); // Return final view of TBC payment to redirect to a payment page } }
返回视图后,网站将重定向到支付页面。填写卡详细信息后,您将重定向到您之前指定的成功或失败 URL。
使用其他方法
如果您已开始 DMS 授权(冻结账户上的资金),那么您必须在一段时间后实际对冻结金额进行收费。您需要 makeDms() 函数。
您可以直接通过调用例如 $tbcPay->reverse_transaction() 来访问核心处理器的方法(使用魔法 __call 函数)。请检查所有方法的 PlugAndPay TBC 处理器文档
通过cron关闭营业日
如果您在应用程序中没有运行 cron 作业,请参阅 Laravel 文档。
在您的 app/Console/Kernel.php 中注册命令。
protected $commands = [ // Other commands \Lotuashvili\LaravelTbcPay\Commands\CloseDay::class, ];
然后将命令添加到计划任务中(例如,使用 daily(),它将在每天 00:00 运行命令)。
protected function schedule(Schedule $schedule) { // Other commands $schedule->command('tbcpay:close-day') ->daily(); }
交易历史
默认情况下,所有交易都将在 tbc_transactions 表中可用。您可以使用 Lotuashvili\LaravelTbcPay\Models\TbcTransaction 模型访问它们。
如果您已启用 debug,则所有记录都将存储在 tbc_logs 表中,并且可以使用 Lotuashvili\LaravelTbcPay\Models\TbcLog 模型访问它们。
结果代码
| 键 | 值 | 描述 |
|---|---|---|
| 000 | 批准 | 批准 |
| 001 | 批准,带有 ID | 批准,持卡人身份识别 |
| 002 | 批准 | 部分金额批准 |
| 003 | 批准 | VIP 批准 |
| 004 | 批准 | 更新跟踪 3 |
| 005 | 批准 | 账户类型由发卡行指定 |
| 006 | 批准 | 部分金额批准,账户类型由发卡行指定 |
| 007 | 批准 | 更新 ICC |
| 100 | 拒绝 | 拒绝(一般,无注释) |
| 101 | 拒绝 | 拒绝,卡已过期 |
| 102 | 拒绝 | 拒绝,疑似欺诈 |
| 103 | 拒绝 | 拒绝,卡片接受者联系收单行 |
| 104 | 拒绝 | 拒绝,受限卡 |
| 105 | 拒绝 | 拒绝,卡片接受者联系收单行的安全部门 |
| 106 | 拒绝 | 拒绝,允许的 PIN 尝试次数超出 |
| 107 | 拒绝 | 拒绝,参考发卡行 |
| 108 | 拒绝 | 拒绝,参考发卡行的特殊条件 |
| 109 | 拒绝 | 拒绝,无效的商户 |
| 110 | 拒绝 | 拒绝,无效的金额 |
| 111 | 拒绝 | 拒绝,无效的卡号 |
| 112 | 拒绝 | 拒绝,需要 PIN 数据 |
| 113 | 拒绝 | 拒绝,不可接受的费用 |
| 114 | 拒绝 | 拒绝,没有请求的账户类型 |
| 115 | 拒绝 | 拒绝,请求的功能不受支持 |
| 116 | 拒绝,无资金 | 拒绝,资金不足 |
| 117 | 拒绝 | 拒绝,PIN 不正确 |
| 118 | 拒绝 | 拒绝,无卡记录 |
| 119 | 拒绝 | 拒绝,交易不允许持卡人进行 |
| 120 | 拒绝 | 拒绝,交易不允许终端进行 |
| 121 | 拒绝 | 拒绝,超出提款金额限制 |
| 122 | 拒绝 | 拒绝,安全违规 |
| 123 | 拒绝 | 拒绝,超出提款频率限制 |
| 124 | 拒绝 | 拒绝,违法行为 |
| 125 | 拒绝 | 拒绝,卡无效 |
| 126 | 拒绝 | 拒绝,无效的 PIN 锁定 |
| 127 | 拒绝 | 拒绝,PIN 长度错误 |
| 128 | 拒绝 | 拒绝,PIN 键同步错误 |
| 129 | 拒绝 | 拒绝,疑似伪造卡 |
| 180 | 拒绝 | 拒绝,持卡人意愿 |
| 200 | 取款 | 取款(一般,无注释) |
| 201 | 取款 | 取款,卡已过期 |
| 202 | 取款 | 取款,疑似欺诈 |
| 203 | 取款 | 取款,卡片接受者联系卡发卡行 |
| 204 | 取款 | 取款,受限卡 |
| 205 | 取款 | 取款,卡片接受者联系收单行的安全部门 |
| 206 | 取款 | 取款,允许的 PIN 尝试次数超出 |
| 207 | 取款 | 取款,特殊条件 |
| 208 | 取款 | 取款,丢失卡 |
| 209 | 取款 | 取款,被盗卡 |
| 210 | 取款 | 取款,疑似伪造卡 |
| 300 | 呼叫收单行 | 状态消息:文件操作成功 |
| 301 | 呼叫收单行 | 状态信息:文件操作不支持 |
| 302 | 呼叫收单行 | 状态信息:无法在文件中找到记录 |
| 303 | 呼叫收单行 | 状态信息:重复记录,旧记录被替换 |
| 304 | 呼叫收单行 | 状态信息:文件记录字段编辑错误 |
| 305 | 呼叫收单行 | 状态信息:文件被锁定 |
| 306 | 呼叫收单行 | 状态信息:文件操作不成功 |
| 307 | 呼叫收单行 | 状态信息:文件数据格式错误 |
| 308 | 呼叫收单行 | 状态信息:重复记录,新记录被拒绝 |
| 309 | 呼叫收单行 | 状态信息:未知文件 |
| 400 | 接受 | 接受(用于撤销) |
| 499 | 批准 | 批准,无原始消息数据 |
| 500 | 呼叫收单行 | 状态信息:已核对,平衡 |
| 501 | 呼叫收单行 | 状态信息:已核对,不平衡 |
| 502 | 呼叫收单行 | 状态信息:金额未核对,提供总计 |
| 503 | 呼叫收单行 | 状态信息:核对总计不可用 |
| 504 | 呼叫收单行 | 状态信息:未核对,提供总计 |
| 600 | 接受 | 接受(用于行政信息) |
| 601 | 呼叫收单行 | 状态信息:无法追踪原始交易 |
| 602 | 呼叫收单行 | 状态信息:无效的交易参考号 |
| 603 | 呼叫收单行 | 状态信息:参考号/PAN不兼容 |
| 604 | 呼叫收单行 | 状态信息:POS照片不可用 |
| 605 | 呼叫收单行 | 状态信息:已提供所请求的项目 |
| 606 | 呼叫收单行 | 状态信息:请求无法满足 - 所需文件不可用 |
| 680 | 列表准备就绪 | 列表准备就绪 |
| 681 | 列表未准备就绪 | 列表未准备就绪 |
| 700 | 接受 | 接受(用于收费) |
| 800 | 接受 | 接受(用于网络管理) |
| 900 | 接受 | 通知已确认,不接受财务责任 |
| 901 | 接受 | 通知已确认,接受财务责任 |
| 902 | 呼叫收单行 | 拒绝原因信息:无效交易 |
| 903 | 呼叫收单行 | 状态信息:重新输入交易 |
| 904 | 呼叫收单行 | 拒绝原因信息:格式错误 |
| 905 | 呼叫收单行 | 拒绝原因信息:交换机不支持收单机构 |
| 906 | 呼叫收单行 | 拒绝原因信息:正在切换 |
| 907 | 呼叫收单行 | 拒绝原因信息:发卡机构或交换机不工作 |
| 908 | 呼叫收单行 | 拒绝原因信息:路由找不到交易目的地 |
| 909 | 呼叫收单行 | 拒绝原因信息:系统故障 |
| 910 | 呼叫收单行 | 拒绝原因信息:发卡机构已关闭 |
| 911 | 呼叫收单行 | 拒绝原因信息:发卡机构超时 |
| 912 | 呼叫收单行 | 拒绝原因信息:发卡机构不可用 |
| 913 | 呼叫收单行 | 拒绝原因信息:重复传输 |
| 914 | 呼叫收单行 | 拒绝原因信息:无法追踪到原始交易 |
| 915 | 呼叫收单行 | 拒绝原因信息:核对切换或检查点错误 |
| 916 | 呼叫收单行 | 拒绝原因信息:MAC错误 |
| 917 | 呼叫收单行 | 拒绝原因信息:MAC密钥同步错误 |
| 918 | 呼叫收单行 | 拒绝原因信息:无可用通信密钥 |
| 919 | 呼叫收单行 | 拒绝原因信息:加密密钥同步错误 |
| 920 | 呼叫收单行 | 拒绝原因信息:安全软件/硬件错误 - 尝试再次操作 |
| 921 | 呼叫收单行 | 拒绝原因信息:安全软件/硬件错误 - 无操作 |
| 922 | 呼叫收单行 | 拒绝原因信息:消息编号顺序错误 |
| 923 | 呼叫收单行 | 状态信息:请求进行中 |
| 950 | 不接受 | 拒绝原因信息:违反商业协议 |
| XXX | 未定义 | 代码应由卡状态代码或停用列表插入原因代码替换 |
