繁体   English   中英

带有 PHP 和 JS SDK 的 PayPal 订阅 API - RESOURCE_NOT_FOUND 错误

[英]PayPal Subscriptions API with PHP and JS SDKs - RESOURCE_NOT_FOUND Error

我在使用 JS SDK 的 paypal 订阅过程中工作。 首先,我已经通过 PHP SDK 成功创建了计划并激活了它。 然后我试图通过该计划 ID 使用 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>

这是错误:

未捕获的错误:创建订阅 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"
        }
    ]
}

在此处输入图像描述

我的计划 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
                                )

                        )

                )

        )

)

旧的 paypal/PayPal-PHP-SDK 不支持新的 Subscriptions API。 它使用较旧的计费计划,这与您尝试做的事情不兼容。

新的 paypal/Checkout-PHP-SDK 也不支持新的 Subscriptions API。

所以基本上,要从 PHP 使用订阅 API,目前您需要实施直接 HTTPS REST API 调用(无 SDK)来创建计划。

您可以先使用命令行curl或邮递员调用进行测试,以确认其有效,然后编写必要的 PHP 函数以使用 oauth 令牌对 PayPal 执行您自己的 HTTPS 调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM