Laravel PayPal协议在返回url时执行错误



我有两个问题,第一个是关于错误,Laravel 8.20.1+Paypal SDK v1。

应用程序路线:

Route::get('/agreement/execute', [PaymentController::class, 'agreementExecute']);
Route::post('/agreement/create', [PaymentController::class, 'subscribeMonthly']);

管理路线:

Route::prefix('paypal')->name('plan.')->group(function () {
Route::get('/monthly/create', [PrivatePaypal::class, 'createMonthly'])
Route::get('/list', [PrivatePaypal::class, 'showPlans'])
Route::get('/plan/{plan}', [PrivatePaypal::class, 'plan'])
Route::get('/delete', [PrivatePaypal::class, 'deletePlan'])
});

创建的计划:

创建的计划图像

计划代码:

public function createMonthly() {
$plan = new PayPalApiPlan();
$plan->setName('Monthly')
->setDescription('Activate partnership for one month.')
->setType('INFINITE'); // or FIXED: The plan has a fixed number of payment cycles
$paymentDefinition = new PayPalApiPaymentDefinition();
$paymentDefinition->setName('Monthly Payments')
->setType('REGULAR') // or TRIAL
->setFrequency('Month') // or WEEK, DAY, YEAR, MONTH
->setFrequencyInterval("1") // The interval at which the customer is charged. Value cannot be greater than 12 months
->setAmount(new PayPalApiCurrency(array('value' => 20, 'currency' => 'USD')));
// ->setCycles("12")
$merchantPreferences = new PayPalApiMerchantPreferences();
$merchantPreferences->setReturnUrl(route('account.agreement',['success'=>'true'])) 
->setCancelUrl(route('account.agreement',['success'=>'false'])) 
->setAutoBillAmount("yes") 
->setInitialFailAmountAction("CONTINUE") 
->setMaxFailAttempts("0")
->setSetupFee(new PayPalApiCurrency(array('value' => config('settings.price_monthly'), 'currency' => 'USD'))) 
;
$plan->setPaymentDefinitions(array($paymentDefinition));
$plan->setMerchantPreferences($merchantPreferences);
try {
$createdPlan = $plan->create($this->apiContext);
} catch(Exception $ex) {
print_r($ex->getMessage());
die();
}
// dd($createdPlan);
$this->activatePlan($createdPlan);
}

在我用表格发送数据之后

<form action="https://site.test/agreement/create" method="post">
<input type="hidden" name="_token" value="XSM2gxx0Cqs5dlloYScQfl2GdeGqrz4lkWLfm42a">             
<input type="hidden" name="_method" value="POST">
<input type="hidden" name="id" value="P-0UV961714R317531UT5H72WI">
<button class="button compact">Activate</button>
</form>

在成功重定向到所有数据的贝宝后,我点击接受(沙盒(,然后我成功返回,重定向功能:

if (!empty($request->input('success')))
{
$success = $request->input('success');
if ($success && !empty($request->input('token')))
{
$token = $request->input('token');
$agreement = new PayPalApiAgreement();

try {
// Execute agreement
$agreement->execute($token, $this->apiContext);
} catch (PayPalExceptionPayPalConnectionException $ex) {
print_r($ex->getMessage());  
echo $ex->getCode();
echo $ex->getData();
print_r($ex->getData());
die($ex);
} catch (Exception $ex) {
// die($ex);
}

$agreement->execute运行时,我会得到没有详细信息的错误。

表单订阅功能:

public function subscribeMonthly(Request $request) {
$id = $request->id;
$agreement = new PayPalApiAgreement();
$agreement->setName('Monthly subscription')
->setDescription('Activate partnership for one month.') 
->setStartDate(Carbon::now()->addMonth()->toIso8601String());
$plan = new PayPalApiPlan();
$plan->setId($id);
$agreement->setPlan($plan);
$payer = new PayPalApiPayer();
$payer->setPaymentMethod('paypal');
$agreement->setPayer($payer);
try {
$agreement = $agreement->create($this->apiContext);
$approvalUrl = $agreement->getApprovalLink();
} catch(Exception $ex) {
print_r($ex->getMessage());
die();
}
return redirect($approvalUrl);

}

错误为:PayPal\Exception\PayPalConnectionException访问时得到Http响应代码400https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-1LE052463N345662M/agreement-execute.https://am.test/account/agreement?ba_token=BA-9X735270PX851462W;成功=真&令牌=EC-1LE052463N345662M

我复习了很多教程,重读了PayPal指南中的代码好几次。我是新手,不知道原因是什么,这对我来说不起作用。我做每件事都是一对一的。买方帐户或管理员未创建任何订阅,所有内容都为空。

第二个问题,贝宝写道,v1已被弃用。我如何使用第二个版本的结账v2订阅,以及在哪里可以找到Laravel关于这个问题的详细指南。我很难完全理解API和不是我自己创建的代码,我自己创建了一个大项目,但由于PayPal的错误,我坚持了几天。谢谢你读了这么多我写的东西,我希望你的支持。

PayPal PHP SDK已被弃用,并且与当前版本的PayPal订阅不兼容。你不应该用它做任何事情。

相反,直接与订阅文档中描述的必要产品、计划和订阅管理API调用集成。(如果需要,还可以加上webhook——将收到未来订阅事件的通知(

您还可以在接收者帐户中手动管理产品和计划:

  • 沙盒:https://www.sandbox.paypal.com/billing/plans
  • Live:https://www.paypal.com/billing/plans

最新更新