我有多个 PayPal 用户帐户,我希望使用这些帐户通过 PayPal 支付这些用户的提款金额。
我有多个用户详细信息。我也有他们的贝宝详细信息。
通过使用他们的贝宝 ID,我想将提款金额转给他们。
现在我已将 PayPal 集成到我的 Laravel 应用程序中。但是,他们的第一步是“结账”。 我只想输入他们的 PayPal ID 并发送他们的提款金额。
安装 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 请求。确保处理过程中可能出现的任何异常或错误,以获得更好的用户体验。