nodeJS Paypal REST API 修改计划给破损但工作 link
nodeJS Paypal REST API to revise plan give broken but working link
我正在尝试将 Paypal 集成到我的 NodeJS 应用程序中。我正在使用 REST API,因为官方的 npm 数据包已被弃用。
假设我有一个产品有两个计划,planA
和 planB
,这是订阅等定期付款所必需的。假设客户订阅 planA,费用为 10 美元。一段时间后,他想切换到花费 20 美元的 planB,以解锁平台中的高级内容。
我找到了API:POST/v1/billing/subscriptions/{id}/revise
使用哪一个应该能够发送 planID planB
以切换到它。您还可以发送 effective_time
字段来指定更改何时生效。调用此 API 后,Paypal 回复了 6 个链接,我使用第一个 (approve
) 将客户重定向到 Paypal 域以确认其是否愿意切换计划。用户登录后,确认并点击“接受并订阅”新计划,页面总是给我以下错误:Things don't appear to be working at the moment. Please try again later.
,尽管计划变更顺利(我可以通过仪表板验证)。
我想知道如何避免该错误。
我想澄清一下,在设置中,通过仪表板,在 Account settings
-> Website payments
-> Website preferences
下,我暂时可以选择 Block non-encrypted website payment
到 Off
.
提前谢谢大家!
设置“阻止non-encrypted网站支付”与此问题无关,不会有任何效果。它仅适用于 legacy HTML-only payments,您不必担心。
编辑:是的,重定向集成需要 application_context 和 return_url。对于 SDK 的使用,没有使用 redirect_url,因此 API.
不需要该字段
之前的回答如下:
您描述的问题似乎是 PayPal 站点的问题,并且可能仅在沙盒模式或某些 browsers/cookies 中出现。您可以根据需要进行测试,如有需要请联系 PayPal 支持。
也可以使用 JS SDK 进行修改而不是重定向。对于 client-side-only 集成(没有 API),可以使用 actions.subscription.revise
完成。在 the SDK reference.
中搜索该文本
要将 JS SDK 与您正在使用的 API 调用相结合,请让您的按钮代码从您的服务器获取修改后的订阅 ID。这是一个创建示例,您可以将其改编为修订版,因为它本质上是相同的(您可能只是使用 /revise
端点 /path/on/your/server)
<script src="https://www.paypal.com/sdk/js?client-id=..........&vault=true&intent=subscription"></script>
<div id="paypal-button-container"></div>
<script>
paypal.Buttons({
style: {
label:'subscribe' //Optional text in button
},
createSubscription: function(data, actions) {
return fetch('/path/on/your/server/paypal/subscription/create/', {
method: 'post'
}).then(function(res) {
return res.json();
}).then(function(serverData) {
console.log(serverData);
return serverData.id;
});
},
onApprove: function(data, actions) {
/* Optional: At this point, notify your server of the activated subscription...
fetch('/path/on/your/server/paypal/subscription/activated/' + data.subscriptionID , {
method: 'post'
}).then(function(res) {
return res.json();
}).then(function(serverData) {
//
});
*/
//You could additionally subscribe to a webhook for the BILLING.SUBSCRIPTION.ACTIVATED event (just in case), as well as other future subscription events
//Ref: https://developer.paypal.com/docs/api-basics/notifications/webhooks/event-names/#subscriptions
// Show a message to the buyer, or redirect to a success page
alert('You successfully subscribed! ' + data.subscriptionID);
}
}).render('#paypal-button-container');
</script>
我正在尝试将 Paypal 集成到我的 NodeJS 应用程序中。我正在使用 REST API,因为官方的 npm 数据包已被弃用。
假设我有一个产品有两个计划,planA
和 planB
,这是订阅等定期付款所必需的。假设客户订阅 planA,费用为 10 美元。一段时间后,他想切换到花费 20 美元的 planB,以解锁平台中的高级内容。
我找到了API:POST/v1/billing/subscriptions/{id}/revise
使用哪一个应该能够发送 planID planB
以切换到它。您还可以发送 effective_time
字段来指定更改何时生效。调用此 API 后,Paypal 回复了 6 个链接,我使用第一个 (approve
) 将客户重定向到 Paypal 域以确认其是否愿意切换计划。用户登录后,确认并点击“接受并订阅”新计划,页面总是给我以下错误:Things don't appear to be working at the moment. Please try again later.
,尽管计划变更顺利(我可以通过仪表板验证)。
我想知道如何避免该错误。
我想澄清一下,在设置中,通过仪表板,在 Account settings
-> Website payments
-> Website preferences
下,我暂时可以选择 Block non-encrypted website payment
到 Off
.
提前谢谢大家!
设置“阻止non-encrypted网站支付”与此问题无关,不会有任何效果。它仅适用于 legacy HTML-only payments,您不必担心。
编辑:是的,重定向集成需要 application_context 和 return_url。对于 SDK 的使用,没有使用 redirect_url,因此 API.
不需要该字段之前的回答如下:
您描述的问题似乎是 PayPal 站点的问题,并且可能仅在沙盒模式或某些 browsers/cookies 中出现。您可以根据需要进行测试,如有需要请联系 PayPal 支持。
也可以使用 JS SDK 进行修改而不是重定向。对于 client-side-only 集成(没有 API),可以使用 actions.subscription.revise
完成。在 the SDK reference.
要将 JS SDK 与您正在使用的 API 调用相结合,请让您的按钮代码从您的服务器获取修改后的订阅 ID。这是一个创建示例,您可以将其改编为修订版,因为它本质上是相同的(您可能只是使用 /revise
端点 /path/on/your/server)
<script src="https://www.paypal.com/sdk/js?client-id=..........&vault=true&intent=subscription"></script>
<div id="paypal-button-container"></div>
<script>
paypal.Buttons({
style: {
label:'subscribe' //Optional text in button
},
createSubscription: function(data, actions) {
return fetch('/path/on/your/server/paypal/subscription/create/', {
method: 'post'
}).then(function(res) {
return res.json();
}).then(function(serverData) {
console.log(serverData);
return serverData.id;
});
},
onApprove: function(data, actions) {
/* Optional: At this point, notify your server of the activated subscription...
fetch('/path/on/your/server/paypal/subscription/activated/' + data.subscriptionID , {
method: 'post'
}).then(function(res) {
return res.json();
}).then(function(serverData) {
//
});
*/
//You could additionally subscribe to a webhook for the BILLING.SUBSCRIPTION.ACTIVATED event (just in case), as well as other future subscription events
//Ref: https://developer.paypal.com/docs/api-basics/notifications/webhooks/event-names/#subscriptions
// Show a message to the buyer, or redirect to a success page
alert('You successfully subscribed! ' + data.subscriptionID);
}
}).render('#paypal-button-container');
</script>