如何使用 Laravel 中的详细信息通过 Paypal 支付用户的提款金额?

问题描述 投票:0回答:1

我有多个 PayPal 用户帐户,我希望使用这些帐户通过 PayPal 支付这些用户的提款金额。

我有多个用户详细信息。我也有他们的贝宝详细信息。

通过使用他们的贝宝 ID,我想将提款金额转给他们。

现在我已将 PayPal 集成到我的 Laravel 应用程序中。但是,他们的第一步是“结账”。 我只想输入他们的 PayPal ID 并发送他们的提款金额。

laravel paypal paypal-sandbox
1个回答
0
投票

安装 PayPal SDK:

使用 Composer 在 Laravel 项目中安装 PayPal SDK:composer require paypal/rest-api-sdk-php。 配置 PayPal 设置:

将 PayPal 凭证添加到 Laravel 项目的 .env 文件中:

PAYPAL_CLIENT_ID=your_paypal_client_id
PAYPAL_SECRET=your_paypal_secret

您可以通过创建 PayPal 开发者帐户并在仪表板中创建应用程序来获取客户端 ID 和密钥。

创建支付服务: 使用以下命令在 Laravel 中生成一个新服务:“php artisan make:service PayoutService”。 实现支付功能: 打开 app/Services/PayoutService.php 文件并使用以下代码更新它:

<?php

namespace App\Services;

use PayPal\Auth\OAuthTokenCredential;
use PayPal\Rest\ApiContext;
use PayPal\Api\Payout;
use PayPal\Api\PayoutSenderBatchHeader;
use PayPal\Api\Currency;

class PayoutService
{
    protected $apiContext;

    public function __construct()
    {
        $this->apiContext = new ApiContext(
            new OAuthTokenCredential(
                config('paypal.client_id'),
                config('paypal.secret')
            )
        );
    }

    public function payout($paypalEmail, $amount, $currency = 'USD')
    {
        $payouts = new Payout();

        $senderBatchHeader = new PayoutSenderBatchHeader();

        $senderBatchHeader->setSenderBatchId(uniqid())
            ->setEmailSubject('Withdrawal Amount')
            ->setRecipientType('Email');

        $item = new Currency();
        $item->setValue($amount)->setCurrency($currency);

        $payouts->setSenderBatchHeader($senderBatchHeader)
            ->addItem($item)
            ->setRecipientType('Email')
            ->setEmailSubject('Withdrawal Amount')
            ->setItems([
                [
                    'recipient_type' => 'EMAIL',
                    'amount' => [
                        'value' => $amount,
                        'currency' => $currency
                    ],
                    'receiver' => $paypalEmail,
                    'note' => 'Withdrawal Amount'
                ]
            ]);

        $payout = $payouts->create(null, $this->apiContext);

        return $payout;
    }

}

此代码使用您的 PayPal 凭据初始化 ApiContext。支付方法创建一个新的支付对象,以将指定金额的款项发送到指定的 PayPal 电子邮件地址。

使用付款服务: 在您的控制器中或您想要启动付款的任何地方,导入 PayoutService:

use App\Services\PayoutService;

在控制器的方法中注入 PayoutService:

public function payWithdrawal(PayoutService $payoutService)
{
    $paypalEmail = '[email protected]';
    $amount = '10.00'; // withdrawal amount
    $currency = 'USD';

    $payout = $payoutService->payout($paypalEmail, $amount, $currency);

    // Handle the payout response
    // You can check $payout->getBatchHeader()->getBatchStatus() to verify if the payout was successful
    // You can also obtain the payout details using $payout->getLinks()

    return response()->json(['message' => 'Payout initiated'], 200);
}

提供用户的 PayPal 电子邮件地址以及控制器中付款方式的提款金额。然后您可以相应地处理付款响应。

路线及景观: 通过将以下内容添加到路线文件(routes/web.php 或routes/api.php)中,创建一条处理付款启动的路线:

use App\Http\Controllers\PaymentController;
Route::post('/payout', [PaymentController::class, 'payWithdrawal']);

您可以在您的视图中创建一个表单来收集提款金额和 PayPal 电子邮件地址。提交表单后,向 /payout 端点发出 POST 请求。确保处理过程中可能出现的任何异常或错误,以获得更好的用户体验。

© www.soinside.com 2019 - 2024. All rights reserved.