API подписок PayPal с PHP и JS SDK - ошибка RESOURCE_NOT_FOUND - PullRequest
1 голос
/ 22 января 2020

Я работал в процессе подписки PayPal с JS SDK. Прежде всего, я успешно создал план с помощью PHP SDK и активировал его. Затем я пытался реализовать процесс подписки с помощью JS SDK по этому идентификатору плана. Но кое-как это не работает. Если кто-нибудь может мне помочь, это будет здорово.

Это мой код:

<div id="paypal-button-container"></div>

<script>
    paypal.Buttons({
        env: 'sandbox',
        createSubscription: function (data, actions) {

            return actions.subscription.create({

                'plan_id': 'P-15T61220BN038602UZQLZ2UI',

            });
        }
        ,
        onApprove: function (data, actions) {

            alert('You have successfully created subscription ' + data.subscriptionID);
        }
    }).render('#paypal-button-container');
</script>

Это ошибка:

Uncaught Ошибка: Ошибка создания API подписки:

{
    "name": "RESOURCE_NOT_FOUND",
    "message": "The specified resource does not exist.",
    "debug_id": "f2628efbed424",
    "details": [
        {
            "issue": "INVALID_RESOURCE_ID",
            "description": "Requested resource ID was not found."
        }
    ],
    "links": [
        {
            "href": "https://developer.paypal.com/docs/api/v1/billing/subscriptions#RESOURCE_NOT_FOUND",
            "rel": "information_link",
            "method": "GET"
        }
    ]
}

enter image description here

КОД API моего плана:

use PayPal\Api\ChargeModel;
use PayPal\Api\Currency;
use PayPal\Api\MerchantPreferences;
use PayPal\Api\PaymentDefinition;
use PayPal\Api\Plan;
use PayPal\Api\Patch;
use PayPal\Api\PatchRequest;
use PayPal\Common\PayPalModel;

require __DIR__ . '/vendor/autoload.php';
require "app/config.php";

$apiContext = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential(
        'AbMJNJRtMOefeVPE9UM50...........', // ClientID
        'EN8kxO-TjQb_Lr..........'     // ClientSecret
        )
);


//$apiContext = new \PayPal\Rest\ApiContext(new \PayPal\Auth\OAuthTokenCredential('AbMJNJRtMOefeV........', 'EN8kxO-TjQb_LrcpSdYGRoXz5LX6HmJyQ4lC---------'));
//if (! empty($_POST["subscribe"])) {
//    require_once "./Service/createPHPTutorialSubscriptionPlan.php";
//}
// Create a new billing plan
$plan = new Plan();
$plan->setName('Family plan monthly fathomreads')
        ->setDescription('Famaliy plan monthly')
        ->setType('INFINITE');

// Set billing plan definitions
$paymentDefinition = new PaymentDefinition();
$paymentDefinition->setName('Regular Payments')
        ->setType('REGULAR')
        ->setFrequency('Month')
        ->setFrequencyInterval('2')
        ->setCycles('0')
        ->setAmount(new Currency(array('value' => 6.60, 'currency' => 'USD')));

//// Set charge models
//$chargeModel = new ChargeModel();
//$chargeModel->setType('SHIPPING')
//  ->setAmount(new Currency(array('value' => 10, 'currency' => 'USD')));
//$paymentDefinition->setChargeModels(array($chargeModel));
// Set merchant preferences
$merchantPreferences = new MerchantPreferences();
$merchantPreferences->setReturnUrl('http://localhost/fathomreads/paypalsuccess.php')
        ->setCancelUrl('http://localhost/fathomreads/paypalcancel.php')
        ->setAutoBillAmount('yes')
        ->setInitialFailAmountAction('CONTINUE')
        ->setMaxFailAttempts('0')
        ->setSetupFee(new Currency(array('value' => 0, 'currency' => 'USD')));

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

try {
    $createdPlan = $plan->create($apiContext);

    try {
        $patch = new Patch();
        $value = new PayPalModel('{"state":"ACTIVE"}');
        $patch->setOp('replace')
                ->setPath('/')
                ->setValue($value);
        $patchRequest = new PatchRequest();
        $patchRequest->addPatch($patch);
        $createdPlan->update($patchRequest, $apiContext);
        $plan = Plan::get($createdPlan->getId(), $apiContext);

        //Output plan id

        dbQuery("UPDATE general_settings SET paypal_subscription_planid = '" . $plan->getId() . "' WHERE id = 1 ");



        echo "Plan created Successfuly. Plan Id : " . $plan->getId();
    } catch (PayPal\Exception\PayPalConnectionException $ex) {
        echo $ex->getCode();
        echo $ex->getData();
        die($ex);
    } catch (Exception $ex) {
        die($ex);
    }
} catch (PayPal\Exception\PayPalConnectionException $ex) {
    echo $ex->getCode();
    echo $ex->getData();
    die($ex);
} catch (Exception $ex) {
    die($ex);
}

ОТВЕТ:

План создан успешно. Идентификатор плана: P-15T61220BN038602UZQLZ2UI

PayPal\Api\Plan Object
(
    [_propMap:PayPal\Common\PayPalModel:private] => Array
        (
            [id] => P-15T61220BN038602UZQLZ2UI
            [state] => ACTIVE
            [name] => Family plan monthly fathomreads
            [description] => Famaliy plan monthly
            [type] => INFINITE
            [payment_definitions] => Array
                (
                    [0] => PayPal\Api\PaymentDefinition Object
                        (
                            [_propMap:PayPal\Common\PayPalModel:private] => Array
                                (
                                    [id] => PD-6S8510199C217192C2GF6Z7A
                                    [name] => Regular Payments
                                    [type] => REGULAR
                                    [frequency] => Month
                                    [amount] => PayPal\Api\Currency Object
                                        (
                                            [_propMap:PayPal\Common\PayPalModel:private] => Array
                                                (
                                                    [currency] => USD
                                                    [value] => 6.60
                                                )

                                        )

                                    [cycles] => 0
                                    [frequency_interval] => 1
                                )

                        )

                )

            [merchant_preferences] => PayPal\Api\MerchantPreferences Object
                (
                    [_propMap:PayPal\Common\PayPalModel:private] => Array
                        (
                            [setup_fee] => PayPal\Api\Currency Object
                                (
                                    [_propMap:PayPal\Common\PayPalModel:private] => Array
                                        (
                                            [currency] => USD
                                            [value] => 0
                                        )

                                )

                            [max_fail_attempts] => 0
                            [return_url] => http://localhost/fathomreads/paypalsuccess.php
                            [cancel_url] => http://localhost/fathomreads/paypalcancel.php
                            [auto_bill_amount] => YES
                            [initial_fail_amount_action] => CONTINUE
                        )

                )

            [create_time] => 2020-01-23T08:36:45.948Z
            [update_time] => 2020-01-23T08:36:47.640Z
            [links] => Array
                (
                    [0] => PayPal\Api\Links Object
                        (
                            [_propMap:PayPal\Common\PayPalModel:private] => Array
                                (
                                    [href] => https://api.sandbox.paypal.com/v1/payments/billing-plans/P-15T61220BN038602UZQLZ2UI
                                    [rel] => self
                                    [method] => GET
                                )

                        )

                )

        )

)

1 Ответ

0 голосов
/ 23 января 2020

Старый PayPal / PayPal- PHP -SDK не поддерживает новый API подписок. Он использует тарифные планы для чего-то более старого, что несовместимо с тем, что вы пытаетесь сделать.

Новый PayPal / Checkout- PHP -SDK также еще не поддерживает новый API подписок.

Таким образом, в основном, чтобы использовать API подписок из PHP, в настоящее время вам нужно реализовать прямые вызовы HTTPS REST API (без SDK) для создания плана.

Вы можете проверить с помощью командной строки curl или сначала звоните почтальону, чтобы подтвердить, что он работает, а затем напишите необходимую PHP функцию для выполнения ваших собственных HTTPS-звонков в PayPal с токеном oauth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...