如何激活 PayPal 订阅?

How to activate a PayPal subscription?

我已经使用 PayPalSmartButtons 实现了一个循环支付系统。客户可以通过我的系统创建订阅,在结帐结束时我创建了订阅:

{
    "orderID": "3JR7411152833961C",
    "subscriptionID": "I-J8CHJ9UKB8JU",
    "facilitatorAccessToken": "A21AAElq71jrRrKHzaxxOeA4o7cOie83F_N-LKMZoAe2mhmaANy-a784yj9DUbSlQPIxtu_O-7XyzHWab23gKVgwhqK9Hjaow"
} 

为了激活订阅并获得付款我需要执行它,所以我写了这个方法:

let executeAgreement = (paymentToken) => {

    paypal.billingAgreement.execute(paymentToken, {}, function (error, billingAgreement) {
        if (error) {
            console.log(error);
            throw error;
        }
        else {
            console.log('Billing Agreement Execute Response');
            console.log(JSON.stringify(billingAgreement));
        }
    });
}

我遇到的问题是:

response: { name: 'BUSINESS_VALIDATION_ERROR', debug_id: '82426af46aee4', message: 'Validation Error.', information_link: 'https://developer.paypal.com/docs/api/payments.billing-agreements#errors', details: [ [Object] ], httpStatusCode: 400 }, httpStatusCode: 400 }

我向 executeAgreement 发送了 subscriptionId,但我想问题在于,在创建的订阅中我只收到订阅的 id 而不是 paymentToken,我该如何解决?

本质上:如果我只有通过以下方法编辑的订阅 ID return,我如何 execute/activate 订阅:

 opts.createSubscription = function (data, actions) {
     that.step = that.steps.PAYPAL_EXTERNAL_WINDOW;
          return actions.subscription.create({
              plan_id: that.paymentData.plan.id,
              application_context: {
              user_action: "CONTINUE",
              shipping_preference: 'NO_SHIPPING'
          }
     });
}

上面的方法returnorderId - subscriptionId - facilitatorAccessToken,似乎我无法在用户通过智能支付按钮批准定期付款后激活订阅ID。

实际上,I-J8CHJ9UKB8JU 已经是一个已创建且有效的订阅,您不需要执行任何操作。

执行计费协议的概念来自早于订阅的旧文档API。

在当前的 Sbscriptions API 中,您只需创建并激活订阅:

https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_create

然后重定向到批准 URL,或使用智能支付按钮(这要好得多,因为它会打开 "in context" 批准 -- 不需要任何重定向)

所以不管怎样,您有有效的订阅 ID:I-J8CHJ9UKB8JU

现在只需保存此对象并将其与您的客户对象相关联。