eseperio / omnipay-redsys
为 Omnipay PHP 支付处理库提供的 Redsys (信用卡 + Bizum) 支付网关
Requires
- php: >=5.6
- guzzlehttp/psr7: ^1.4
- omnipay/common: 3.*
- redsys/messages: ^1.0
This package is auto-updated.
Last update: 2024-09-11 12:36:00 UTC
README
Omnipay PHP 支付处理库的 RedSys 驱动程序
Omnipay 是一个与框架无关、多网关的 PHP >7.1 支付处理库。此包实现了 Omnipay 对 RedSys(原名 Sermepa)的支持。
这是由 nazka 提供的原始包的改进版本,该包似乎已经停滞多年。
此包功能特点:
- Omnipay 3.X 支持
- Redsys 3DS2 支持
- Redsys Bizum 支持
- Redsys 支付方式字典
- 交易类型字典
- 检查交易与支付方式的兼容性,以确保请求的有效性
- 包含所有错误代码的 JSON 字典
- 更好的文档和如何工作的说明
- Redsys 支持的所有语言的字典
安装
通过 Composer。要安装,只需运行
composer require eseperio/omnipay-redsys
如何工作
为了理解此库中的代码,您应该查看文档页面 how it works
错误列表
Redsys 有一个由网关返回的错误列表。您可以在 此处 找到错误列表。整个列表也可在 JSON 格式 此处 获得
基本用法
为 RedSys 创建网关实例
$gateway = Omnipay::create('Redsys');
现在定义网关所需的全部参数
$gateway->setMerchantCode('my_merchant_code'); $gateway->setMerchantKey('my_merchant_key'); $gateway->setTransactionType(\Omnipay\Redsys\Dictionaries\TransactionTypes::AUTHORIZATION); $gateway->setCurrency('my_currency'); $gateway->setMerchantName('my_shop_name'); $gateway->setMerchantPaymethod('my_pay_method'); $gateway->setSignatureMode('my_signature_mode'); $gateway->setConsumerLanguage(0); $gateway->setTerminal('my_terminal');
setMerchantUrl
是网关将发送交易响应的 URL。此 URL 必须可访问
接下来,创建一个请求,可以是购买(常见)或授权请求
$request = $gateway->purchase() // Define the urls ->setCancelUrl('my_cancel_url') ->setReturnUrl('my_return_url') ->setMerchantUrl('my_merchant_url') // Define the transaction ->setTitular('my_company_name') ->setAmount('my_total_amount') ->setTransactionId('my_transaction_id') ->setOrder('my_order_id') ->setTransactionReference('my_transaction_reference') ->setDescription('my_order_description') // Optional. ->setConsumerLanguage(\Omnipay\Redsys\Dictionaries\Languages::SPANISH); ], ]);
重要:Redsys 期望 transactionId 是一个整数,金额是一个整数,最后两位是分数
Omnipay 有许多设置金额的方法,但此库有重写的方法 setAmount
,以确保金额是一个整数,最后两位是分数。我们强烈建议使用此方法,除非您正在使用 Money library,在这种情况下使用 setMoney(Money $money)
当您使用 setAmount()
时,金额将以 number_format($amount, 2, '', '')
格式化。您仍然可以使用 setAmountInteger()
将金额设置为整数。
接收支付响应
以前,创建了一个模拟 Redsys 响应的假请求,但自 Omnipay 3.0 以来,必须使用 acceptNotification 接收网关的响应。
新方法(acceptNotification)
$gateway = Omnipay::create('Redsys'); $gateway->initialize([ 'merchantId' => '123456789', 'merchantKey' => 'sq7HjrUOBfKmC576ILgskD5srU870gJ7', ... ]); $notification = $gateway->acceptNotification(); if ($notification->getTransactionStatus() === NotificationInterface::STATUS_COMPLETED) { // Payment was successful $transactionReference = $notification->getTransactionReference(); // Do your stuff here } else { // Payment failed $message = $notification->getMessage(); // Do your stuff here }
旧方法(completePurchase)
现在,在您提供的 merchantUrl
路由上,您可以接收 Redsys 的响应
$gateway = Omnipay::create('Sermepa'); $response = $gateway->completePurchase()->send(); if($response->isSuccessful()){ // The payment was successful // Confirm your order or other stuff $orderId = $response->getTransactionId(); // ... }
使用 BIZUM
所有参数在卡和bizum之间共享,因此您可以使用相同的网关实例创建bizum请求。唯一的区别是支付方式。
// Set the payment method to BIZUM $request->setPayMethod(PayMethods::PAY_METHOD_BIZUM); // Bizum is only compatible with AUTHORIZATION transactions $gateway->setTransactionType(TransactionTypes::AUTHORIZATION);
有关其他通用使用说明,请参阅主Omnipay仓库。
升级到Omnipay 3.X
与Omnipay 3.0一起使用的更改
- 货币:使用ISO-4217代码(https://en.wikipedia.org/wiki/ISO_4217#Active_codes)而不是数字。(' EUR' => '978')