我已经使用PayPal
和SmartButtons
实现了定期付款系统。客户可以通过我的系统创建订阅,在结帐时,我将创建订阅:
{
"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));
}
});
}
问题出在我身上
响应:{ 名称:“ BUSINESS_VALIDATION_ERROR”, debug_id:'82426af46aee4', 消息:“验证错误”, information_link:“ https://developer.paypal.com/docs/api/payments.billing-agreements#errors”, 详细信息:[[Object]], httpStatusCode:400 }, httpStatusCode:400 }
我将{subscriptionId}发送给executeAgreement
,但是我想的问题是,在创建的订阅中,我只接收该订阅的ID,而不是paymentToken
,该如何解决?>
本质上:如果我只有以下方法返回的订阅ID,如何执行/激活订阅:
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'
}
});
}
上面的方法返回orderId - subscriptionId - facilitatorAccessToken
,似乎在用户通过智能付款按钮批准了定期付款之后,我无法激活订阅ID。
答案 0 :(得分:1)
实际上,I-J8CHJ9UKB8JU
已经是一个已创建且有效的订阅,您无需执行任何操作。
执行帐单协议的概念来自于Subscriptions API之前的旧文档。
在当前的Sbscriptions API中,您只需创建并激活订阅:
https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_create
随后是重定向到批准URL或使用“智能付款”按钮(这样做会更好,因为它打开了“上下文”批准-无需任何重定向)
因此,无论如何,您都有有效的订阅ID:I-J8CHJ9UKB8JU
现在只需保存该对象并将其与您的客户对象相关联。