我正在使用PayPal javascript SDK为我的网页创建一个PayPal订阅按钮,问题在于使用沙箱帐户测试按钮时,在执行所有订阅付款后出现以下错误:
Error: Use intent=capture to use client-side capture ...
这是我的HTML脚本用于显示我的支付PayPal按钮
<script src="https://www.paypal.com/sdk/js?client-id=MY_CLIENT_ID&vault=true&intent=subscription&components=buttons"></script>
<div id="paypal-button-container"></div>
下面是我的js文件,它根据支付的动作和状态执行相应的处理程序:
paypal.Buttons({
style: {
shape: 'rect',
color: 'black',
layout: 'vertical',
label: 'subscribe'
},
createSubscription: function(data, actions) {
if (discordUser.value === "") {
alert("Introduce tu usuario de discord");
return;
}
slotDecremented = true;
alterSlots();
return actions.subscription.create({
'plan_id': 'P-ID' // here is my plan id
});
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
sendEmailToken(details.payer.email_address, discordUser.value, data.subscriptionID);
});
},
onCancel: function(data) {
alterSlots(true);
slotDecremented = false;
},
onError: function(data) {
if (!slotDecremented) {
return;
}
alterSlots(true);
slotDecremented = false;
}
}).render('#paypal-button-container');
alterSlot()函数使用AJAX对我的特定端点进行API调用,如果需要,只需提供额外的信息
编辑:
sendEmailToken()
函数向服务器上托管的API发出AJAX请求,以便服务器执行正确的操作并且是安全的(只是了解该部分发生的事情的元数据)
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
sendEmailToken(details.payer.email_address, discordUser.value, data.subscriptionID);
});
},
actions.order.capture()
用于客户端一次性支付按钮。它不属于订阅按钮,因为没有要捕获的顺序。
参见PayPal订阅文档,其中只有一个基本的成功警报在其onApprove
的例子:https://developer.paypal.com/docs/subscriptions/integrate/#create-the-subscription
由于您的意图是执行服务器端操作,例如在订阅批准后发送电子邮件,因此您应该从服务器激活该订阅,以确保在没有正确通知服务器此事实的情况下订阅不会激活。以下是一些信息:https://stackoverflow.com/a/65139331/2069605