Подписка Paypal: Ошибка получения кода ответа Http 400 при доступе к https://api.sandbox.paypal.com/v1/payments/billing-agreements/ - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь интегрировать подписку PayPal с помощью PHP SDK.По сути, пользователи могут подписаться на моем веб-сайте на 18/18/24 месяца или на сколько месяцев они хотят, и платеж будет производиться с регулярным интервалом, в моем случае каждый месяц.

Но когда я запускаю свойзакодировать скрипт, выдать следующую ошибку:

Получил Http код ответа 400 при доступе к https://api.sandbox.paypal.com/v1/payments/billing-agreements/.

Мой код:

$startDate = gmdate("Y-m-d\TH:i:s\Z");
$monthlyAmmount = 10;
$setupFees = $monthlyAmmount;

$plan = new \PayPal\Api\Plan();

$plan->setName('Monthly membership at ipconnect')
        ->setDescription('You will be charged ' . $monthlyAmmount .' BRL per Month')
        ->setType('fixed');

$paymentDefinition = new \PayPal\Api\PaymentDefinition();
$paymentDefinition->setName('Regular Payments')
        ->setType('REGULAR')
        ->setFrequency('Month')
        ->setFrequencyInterval("1")
        ->setCycles($totalMonth)
        ->setAmount(new \PayPal\Api\Currency(array('value' => $monthlyAmmount, 'currency' => 'BRL')));

$merchantPreferences = new \PayPal\Api\MerchantPreferences();

$merchantPreferences->setReturnUrl($returnUrl)
        ->setCancelUrl($cancelUrl)
        ->setAutoBillAmount("yes")
        ->setInitialFailAmountAction("CONTINUE")
        ->setMaxFailAttempts("0")
        ->setSetupFee(new \PayPal\Api\Currency(array('value' => $setupFees, 'currency' => 'BRL')));

$plan->setPaymentDefinitions(array($paymentDefinition));
$plan->setMerchantPreferences($merchantPreferences);

try {
    $createdPlan = $plan->create($apiContext);
} catch (Exception $ex) {
    echo $ex->getMessage();
    die();
}

try {
    $patch = new \PayPal\Api\Patch();

    $value = new \PayPal\Common\PayPalModel('{
       "state":"ACTIVE"
     }');

    $patch->setOp('replace')
        ->setPath('/')
        ->setValue($value);
    $patchRequest = new \PayPal\Api\PatchRequest();
    $patchRequest->addPatch($patch);

    $createdPlan->update($patchRequest, $apiContext);

    $createdPlan = \PayPal\Api\Plan::get($createdPlan->getId(), $apiContext);
} catch (Exception $ex) {
        debug($ex->getMessage());
    die();
}


$agreement = new \PayPal\Api\Agreement();

$agreement->setName('Ipconnect subscription agrement')
    ->setDescription('Monthly Basic Agrement')
    // set the start date to 1 month from now as we take our first payment via the setup fee
    ->setStartDate($startDate);

// Link the plan up with the agreement
$plan = new \PayPal\Api\Plan();
$plan->setId($createdPlan->getId());
$agreement->setPlan($plan);


// Add Payer
$payer = new \PayPal\Api\Payer();
$payer->setPaymentMethod('paypal');
$agreement->setPayer($payer);

try {
    // Please note that as the agreement has not yet activated, we wont be receiving the ID just yet.
    $agreement = $agreement->create($apiContext);

    // Get redirect url
    $approvalUrl = $agreement->getApprovalLink();
} catch (Exception $ex) {
    echo $ex->getMessage(); //***** The error is coming here
    die();
}

header("Location: {$approvalUrl}");

Iтакже попытался, добавив shippingAddress (это необходимо?)

Я следую этой документации-> https://paypal.github.io/PayPal-PHP-SDK/sample/#billing

...