creagia/redsys-php

使用 Redsys 进行在线支付

资助包维护!
creagia

3.0.1 2024-07-09 09:47 UTC

This package is auto-updated.

Last update: 2024-09-09 10:11:25 UTC


README

Latest Version on Packagist Tests Total Downloads

将您的PHP代码与西班牙领先的支付网关Redsys集成。

如果您正在使用Laravel,请查看我们的其他包 creagia/laravel-redsys,它提供了现成的集成。

安装

您可以通过composer安装此包

composer require creagia/redsys-php

使用

此包支持重定向和REST集成方法。您可以在官方网站上了解更多关于可用集成方法的信息。

创建请求

use Creagia\Redsys\Enums\Currency;
use Creagia\Redsys\Enums\TransactionType;
use Creagia\Redsys\RedsysClient;
use Creagia\Redsys\RedsysRequest;
use Creagia\Redsys\Support\RequestParameters;

$redsysClient = new RedsysClient(
    merchantCode: env('redsys.merchantCode'),
    secretKey: env('redsys.key'),
    terminal: env('redsys.terminal'),
    environment: \Creagia\Redsys\Enums\Environment::Test,
);

$redsysRequest = RedsysRequest::create(
    $redsysClient,
    new RequestParameters(
        amountInCents: 123_45,
        order: '22013100005',
        currency: Currency::EUR,
        transactionType: TransactionType::Autorizacion,
        merchantUrl: 'https://example.com/redsysNotification',
        urlOk: 'https://example.com/paymentOk',
        urlKo: 'https://example.com/paymentKo',
    )
);

echo $redsysRequest->getRedirectFormHtml()

首先,您需要使用环境配置创建一个 RedsysClient。之后,您应该使用您的客户端和 RequestParameters 创建一个 RedsysRequest

除了必填字段外,您还可以定义任何额外的可选字段(如 merchantUrl 作为通知URL或 urlOkurlKo 在支付后重定向用户)作为 RequestParameters 参数。

最后,您可以使用 getRedirectFormHtml() 方法返回重定向表单或使用 sendPostRequest() 发送POST请求。在Redsys文档中了解更多关于这些集成方法的信息。

创建凭据文件(令牌)请求

虽然您可以通过将 RequestParameters 配置为Redsys文档中定义的方式创建 凭据文件,但此包提供了一些辅助功能以简化此过程。

use Creagia\Redsys\RedsysRequest;
use Creagia\Redsys\Support\RequestParameters;
use Creagia\Redsys\Enums\CofType;

$redsysRequest = RedsysRequest::create(
    redsysClient: $redsysClient,
    requestParameters: new RequestParameters(...)
)->requestingCardToken(
    cofType: CofType::Recurring
);

echo $redsysRequest->getRedirectFormHtml()

您还可以使用POST请求通过REST API发送您的请求。

use Creagia\Redsys\RedsysRequest;
use Creagia\Redsys\Support\RequestParameters;

$redsysRequest = RedsysRequest::create(
    redsysClient: $redsysClient,
    requestParameters: new RequestParameters(...)
)->usingCardToken(
    cofType: CofType::Recurring,
    cofTransactionId: $cofTransactionId,
    merchantIdentifier: $merchantIdentifier,
);

$response = $redsysRequest->sendPostRequest();

接收Redsys的通知

如果在支付请求创建期间定义了 merchantUrl 参数,Redsys将使用该URL与结果一起发布,因此您可以在授权或拒绝请求时执行任何操作。

请注意,Redsys不会通知您已放弃的付款,因此此 merchantUrl 不会通知每个创建的付款请求。只有当付款完成时才会通知。您应该注意放弃/挂起的请求。

use Creagia\Redsys\Exceptions\DeniedRedsysPaymentResponseException;
use Creagia\Redsys\RedsysClient;
use Creagia\Redsys\RedsysResponse;

$redsysClient = new RedsysClient(
    merchantCode: env('redsys.merchantCode'),
    secretKey: env('redsys.key'),
    terminal: env('redsys.terminal'),
    environment: \Creagia\Redsys\Enums\Environment::Test,
);

$redsysNotification = new RedsysResponse($redsysClient);
$redsysNotification->setParametersFromResponse($_POST);

// If you need it, prior to checking response, you can use the decoded data from
// Redsys accessing the `NotificationParameters` object on `$redsysNotification->parameters`. 

try {
    $notificationData = $redsysNotification->checkResponse();
    // Authorised payment
} catch (DeniedRedsysPaymentResponseException $e) {
    $errorMessage = $e->getMessage();
    // Denied payment with $errorMessage
}

自定义环境

在创建 RedsysClient 时,您可以定义请求的正确环境。该环境将用于将请求发送到生产或测试Redsys环境。

自定义环境

您可以将环境属性定义为 Environment::Custom。在这种情况下,您还需要定义 customBaseUrl 属性。

此功能使您能够使用任何模拟或伪造的Redsys网关在本地测试您的应用程序,例如。

您可以在我们的Laravel包 creagia/laravel-redsys 中找到一个示例,该包具有一个本地网关,可让您在本地测试集成。

$redsysClient = new RedsysClient(
    merchantCode: env('redsys.merchantCode'),
    secretKey: env('redsys.key'),
    terminal: env('redsys.terminal'),
    environment: \Creagia\Redsys\Enums\Environment::Custom,
    customBaseUrl: 'https://localGateway.test',
);

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

替代方案

贡献

有关详细信息,请参阅贡献

安全漏洞

请查阅我们的安全策略,了解如何报告安全漏洞。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件