creagia / redsys-php
使用 Redsys 进行在线支付
Requires
- php: ^8.1
- ext-openssl: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- pestphp/pest: ^1.20
README
将您的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或 urlOk
和 urlKo
在支付后重定向用户)作为 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
变更日志
有关最近更改的更多信息,请参阅变更日志。
替代方案
- eusonlito/redsys-TPV PHP >=5.3
- 官方Redsys
贡献
有关详细信息,请参阅贡献。
安全漏洞
请查阅我们的安全策略,了解如何报告安全漏洞。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。