netborg/laravel-przelewy24

Przelewy24 支付库用于Laravel。

dev-master 2023-06-30 14:47 UTC

This package is auto-updated.

Last update: 2024-08-30 01:12:17 UTC


README

该库通过API (API v3.2) 和WebServices (Web Services v2.5.0) 提供与 Przelewy24 支付提供商的集成。

请注意:此库仍处于开发早期阶段。某些功能可能无法正确工作或根本无法工作。自行承担风险。

要求

  • PHP ^7.1.3
  • Laravel ^5.6
  • PHP模块: php-soap, php-json
  • 需要HTTPS

安装

composer require netborg/laravel-przelewy24 "~3.0"
composer update

发布P24配置文件

php artisan vendor:publish --tag="p24-config"

库提供了核心数据库结构来处理支付请求。您可以选择将迁移类复制到您的 database/migrations 文件夹中,以进一步定制数据库模式。执行数据库迁移

php artisan vendor:publish --tag="p24-migrations"   // (optional) - if you want to publish and customize database schema before `php artisan migrate` command execution.
php artisan migrate     // always execute this command (even if you have not required optional migration publishing above)

配置

在您的 .env 配置文件中提供您的商户详细信息

P24_MERCHANT_ID=    // your MerchantId received from Przelewy24 ie. `123456`
P24_POS_ID=         // your PosId received from Przelewy24 (or copy your MerchantId from above)
P24_CRC=            // your CRC available in your panel on Przelewy24.
P24_API_KEY=        // your API KEY available in panel on Przelewy24.
P24_MODE=sandbox    // switch between test and production modes: `live` or `sandbox`

您可能想在 config/p24.php 文件中设置一个自定义路由,您的客户在交易取消事件发生时将被重定向到该路由

return [
    'merchant_id' => env('P24_MERCHANT_ID', 0),
    'pos_id' => env('P24_POS_ID', 0),
    'crc' => env('P24_CRC', null),
    'api_key' => env('P24_API_KEY', null),
    'mode' => env('P24_MODE', 'sandbox'),
    
    /*  
        provide route name (or URL starting with `http://` or `https://`) where Client shoud be redirected 
        on transaction cancellation or after payment completion (you can override it on transaction registration)
    */
    'route_return' => null,
];

就这些了。您可以从Przelewy24开始管理支付。

事件

尽管所有主要交易事件都得到支持并默认维护,但您可能想订阅各种事件并执行一些自定义操作。为此,请创建并注册您的自定义事件监听器。

    \NetborgTeam\P24\Events\P24TransactionUserReturnedEvent::class
    \NetborgTeam\P24\Events\P24TransactionConfirmationConnectionErrorEvent::class
    \NetborgTeam\P24\Events\P24TransactionConfirmationInvalidParameterEvent::class
    \NetborgTeam\P24\Events\P24TransactionConfirmationInvalidSenderEvent::class
    \NetborgTeam\P24\Events\P24TransactionConfirmationInvalidSignatureEvent::class
    \NetborgTeam\P24\Events\P24TransactionConfirmationSuccessEvent::class
  • \NetborgTeam\P24\Events\P24TransactionUserReturnedEvent::class:当用户取消或完成支付过程并被重定向回应用程序时,将触发此事件。如果交易注册时您已用自定义URL覆盖了 p24_url_return 参数,则此事件 不会触发
  • \NetborgTeam\P24\Events\P24TransactionConfirmationConnectionErrorEvent::class:如果应用程序在尝试发送交易确认以供验证时与 Przelewy24 服务器连接出现问题,则将触发此事件。
  • \NetborgTeam\P24\Events\P24TransactionConfirmationInvalidParameterEvent::class:如果任何核心交易参数值与从 Przelewy24 服务器收到的交易确认值不匹配,则可能偶尔触发此事件。可能是欺诈尝试的信号。
  • \NetborgTeam\P24\Events\P24TransactionConfirmationInvalidSenderEvent::class:如果交易确认是从未在此处列出的IP地址发送的,则可能偶尔触发此事件。
  • \NetborgTeam\P24\Events\P24TransactionConfirmationInvalidSignatureEvent::class:如果交易确认的签名无效,则将触发此事件。可能是欺诈尝试的信号。
  • \NetborgTeam\P24\Events\P24TransactionConfirmationSuccessEvent::class:当交易成功通过 Przelewy24 服务器验证和确认时,将触发此事件。建议订阅此事件以进行自定义处理的已确认交易。

使用示例

API调用

交易注册和客户支付启动

public function registerTransaction(
	\Illuminate\Http\Request $request, 
	\NetborgTeam\P24\Services\P24Manager $manager
) { 

	// create new Transaction (for attribute reference please see P24 API docs)
	$transaction = new \NetborgTeam\P24\P24Transaction([
	// recommended way to provide session ID via supporting method
	    'p24_session_id' => \NetborgTeam\P24\P24Transaction::makeUniqueId($request->session()->getId()),
	    'p24_amount' => 19900,
	    'p24_currency' => 'PLN',
	    'p24_description' => 'Transaction description',
	    'p24_email' => 'client@netborg-software.com',
	    'p24_country' => 'PL',
	]);

	try {
            $token = $manager->register($transaction);
            
            if (is_string($token)) {
	           /* 
		         if transaction has been successfully registered
	             unique token will be returned - save it 
	             with transaction details 
                */
                $transaction->token($token);

                // then redirect customer to Przelewy24 to make payment
                return $transaction->redirectForPayment();
            } elseif (is_array($token)) {
                // some transaction attributes are incorrect - perform some action
            } else {
                // error
            }
        } catch (\NetborgTeam\P24\Exceptions\InvalidTransactionException $e) {
            // handle invalid transaction exception
        } catch (\NetborgTeam\P24\Exceptions\P24ConnectionException $e) {
            // handle connection to P24 server exception
        }
}

支付成功后,Przelewy24 将向您的监听器发送通知。不用担心!除非您已用自定义URL覆盖了 p24_url_status,否则您的应用程序将为您处理所有必要的检查。默认情况下,您将在 https://[YOUR_DOMAIN]/p24/status URL上接收交易状态通知。

Przelewy24 网络服务调用

在您的应用程序中调用 Przelewy24 的任何网络服务方法,请使用 P24WebServicesManager 服务。您可以简单地通过直接从容器中调用它或通过使用 P24Manager 来间接调用它来获取此服务的实例。

// direct call
$wsManager = app()->make(\NetborgTeam\P24\Services\P24WebServicesManager::class);

// get service instance via $manager
$manager = app()->make(\NetborgTeam\P24\Services\P24Manager::class);
$wsManager = $manager->webServices();
测试对网络服务的访问
$result = $wsManager->testAccess();     // returns bool `true` if accessed successfully, `false` otherwise
获取可用支付方式列表
$list = $wsManager->getPaymentMethods()->result();  // returns an array of `PaymentMethod` instances.
通过 p24_session_id 获取交易详情
$transaction = $wsManager->getTransactionBySessionId('SESSION_ID')->result();  // where `SESSION_ID` is a `p24_session_id` parameter provided while transaction registration.
进行交易退款
// build an `ArrayOfRefunds`
$refunds = (new \NetborgTeam\P24\ArrayOfRefund())
    // add transaction refund details 
    // either by providing direct key values
    ->addByKeys('SESSION_ID', ORDER_ID, AMOUNT)
    
    // or by passing `SingleRefund` objects  
    ->add(new \NetborgTeam\P24\SingleRefund([
        'sessionId' => 'SESSION_ID',
        'orderId' => (int) ORDER_ID,
        'amount' => (int) AMOUNT,
    ]));
    
$results = $wsManager->refund(BATCH_ID, $refunds)->result();    // returns a list of refund results (see P24 Web Services docs)

... 更多即将推出