eseperio/omnipay-redsys

为 Omnipay PHP 支付处理库提供的 Redsys (信用卡 + Bizum) 支付网关

v1.2.2 2023-03-14 15:34 UTC

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一起使用的更改