Не могу получить Payum PayPal Express Checkout Периодические платежи работают с налогом

В моем приложении symfony2 я использую Payum PayPal Express Checkout для выполнения регулярных платежей.

Я следую инструкциям здесь: https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/

Я хочу добавить детали товара, но не могу заставить его работать, когда я размещаю налоговую информацию. Я получаю ошибку Payum:

L_SHORTMESSAGE0 =>  Transaction refused because of an invalid argument. See additional error messages for details.
L_LONGMESSAGE0  =>  The totals of the cart item amounts do not match order amounts.

Я играл с суммами налогов, но я не мог заставить это работать.
Если я удаляю всю налоговую информацию, все идет хорошо, и я перенаправлен на PayPal с правильными суммами. Как я могу настроить мой платеж, чтобы он работал?

Пожалуйста, смотрите ниже параметры детали, отправленные в PayPal:

array(14
L_PAYMENTREQUEST_0_NAME0    =>  Compte utilisateur
L_PAYMENTREQUEST_0_NUMBER0  =>  46
L_PAYMENTREQUEST_0_DESC0    =>  Abonnement pour 1 Compte utilisateur(s) pour 19.00€ / mois
L_PAYMENTREQUEST_0_AMT0 =>  19
L_PAYMENTREQUEST_0_TAXAMT0  =>  3.8
L_PAYMENTREQUEST_0_QTY0 =>  1
PAYMENTREQUEST_0_TAXAMT =>  3.8
PAYMENTREQUEST_0_CURRENCYCODE   =>  EUR
NOSHIPPING  =>  1
PAYMENTREQUEST_n_ITEMAMT    =>  22.8
PAYMENTREQUEST_0_AMT    =>  22.8
subscription_type   =>  mensual
L_BILLINGTYPE0  =>  RecurringPayments
L_BILLINGAGREEMENTDESCRIPTION0  =>  Abonnement mensuel FoodMeUp
)

и дамп ответа пума:

array(28
L_PAYMENTREQUEST_0_NAME0    =>  Compte utilisateur
L_PAYMENTREQUEST_0_NUMBER0  =>  46
L_PAYMENTREQUEST_0_DESC0    =>  Abonnement pour 1 Compte utilisateur(s) pour 19.00€ / mois
L_PAYMENTREQUEST_0_AMT0 =>  19
L_PAYMENTREQUEST_0_TAXAMT0  =>  3.8
L_PAYMENTREQUEST_0_QTY0 =>  1
PAYMENTREQUEST_0_TAXAMT =>  3.8
PAYMENTREQUEST_0_CURRENCYCODE   =>  EUR
NOSHIPPING  =>  1
PAYMENTREQUEST_n_ITEMAMT    =>  22.8
PAYMENTREQUEST_0_AMT    =>  22.8
subscription_type   =>  mensual
L_BILLINGTYPE0  =>  RecurringPayments
L_BILLINGAGREEMENTDESCRIPTION0  =>  Abonnement mensuel FoodMeUp
INVNUM  =>  55004be1633b4
PAYMENTREQUEST_0_PAYMENTACTION  =>  Sale
RETURNURL   =>  http://foodmeup.dev/app_dev.php/payment/capture/NRil21P5mhVC93qman2D_k4al_xeFd-MfnHHYyqVxYQ
CANCELURL   =>  http://foodmeup.dev/app_dev.php/payment/capture/NRil21P5mhVC93qman2D_k4al_xeFd-MfnHHYyqVxYQ
PAYMENTREQUEST_0_NOTIFYURL  =>  http://foodmeup.dev/app_dev.php/payment/notify/rRD65dqHU-TSgXyBdW8eJkGdMx6CiCFVOq8BZ8PTBt4
TIMESTAMP   =>  2015-03-11T14:06:29Z
CORRELATIONID   =>  193dfdd411684
ACK =>  Failure
VERSION =>  65.1
BUILD   =>  15735246
L_ERRORCODE0    =>  10413
L_SHORTMESSAGE0 =>  Transaction refused because of an invalid argument. See additional error messages for details.
L_LONGMESSAGE0  =>  The totals of the cart item amounts do not match order amounts.
L_SEVERITYCODE0 =>  Error
)

-1

Решение

В одном из моих проектов я использую следующий код для отправки запроса на оплату через PayPal (я использую https://github.com/paypal/merchant-sdk-php):

    $paymentDetails = new EBLBaseComponents\PaymentDetailsType();

foreach ($paymentData['items'] as $key => $item) {
$itemDetails = new EBLBaseComponents\PaymentDetailsItemType();
$itemDetails->Name = $item['name'];
$itemDetails->Amount =  new CoreComponentTypes\BasicAmountType($paymentData['currency'], $item['amount']);Order item price
$itemDetails->Quantity = $item['quantity'];
$itemDetails->ItemCategory = $item['category'];

if ($item['tax']) {
$itemDetails->Tax = new CoreComponentTypes\BasicAmountType($paymentData['currency'], $item['tax']); //Order item tax
}
$paymentDetails->PaymentDetailsItem[$key] = $itemDetails;
}

$paymentDetails->OrderTotal = new CoreComponentTypes\BasicAmountType($paymentData['currency'],  $paymentData['total']);//Order total
$paymentDetails->PaymentAction = 'Sale';
$paymentDetails->ItemTotal = new CoreComponentTypes\BasicAmountType($paymentData['currency'],  $paymentData['subtotal']); //Order subtotal

$paymentDetails->TaxTotal = new CoreComponentTypes\BasicAmountType($paymentData['currency'], $paymentData['tax']);//Order total tax$setECReqDetails = new EBLBaseComponents\SetExpressCheckoutRequestDetailsType();
$setECReqDetails->PaymentDetails[0] = $paymentDetails;
$setECReqDetails->CancelURL = $paymentData['cancelUrl'];
$setECReqDetails->ReturnURL = $paymentData['returnUrl'];
$setECReqDetails->ReqConfirmShipping = 0;
$setECReqDetails->NoShipping = 1;

$setECReqType = new PayPalAPI\SetExpressCheckoutRequestType();
$setECReqType->SetExpressCheckoutRequestDetails = $setECReqDetails;

$setECReq = new PayPalAPI\SetExpressCheckoutReq();
$setECReq->SetExpressCheckoutRequest = $setECReqType;

try {
/** @var PayPalAPI\SetExpressCheckoutResponseType $setECResponse */
$setECResponse = $this->paypal->SetExpressCheckout(
$setECReq
);
} catch (\Exception $ex) {
$data = array('result' => 'failed');
$data['errors'] = $this->processConnectionException($ex);

return $data;
}

Надеюсь, это поможет вам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]