[英]Toggle between PayPal Order and PayPal subscription
我一直在使用 paypal 结账,但遇到了困难,我的公司提供可以一次性购买或重复购买的服务,我设计了结账页面并使用下拉菜单,他们可以选择服务级别和频率,好吧,我现在在实施贝宝时注意到,我必须使用“intent=subscription”来进行订阅,但是如果我有这个,那么就无法下正常的订单,如果我同时包含了两个脚本,那么我会得到一个结帐时出现 500 错误。 无论如何我可以卸载/重新加载按钮更改时需要的脚本,这就是我必须更改按钮的内容
$(".product-info :input").change(function () {
if($( ".productselect" ).val() == "basic"){
$( "#basic" ).show();
$( "#plus" ).hide();
$( "#premier" ).hide();
}else if ($( ".productselect" ).val() == "plus"){
$( "#basic" ).hide();
$( "#plus" ).show();
$( "#premier" ).hide();
}else if ($( ".productselect" ).val() == "premier"){
$( "#basic" ).hide();
$( "#plus" ).hide();
$( "#premier" ).show();
}
if($( ".timingselect" ).val() == "Single"){
paypalsingle();
$(".totamount").html("$" + $(".productselect").find(':selected').data('cost'));
}else if ($( ".timingselect" ).val() == "Bi"){
paypalmulti($(".productselect").find(':selected').data('ppbi'));
$(".totamount").html("$" + $(".productselect").find(':selected').data('costbi'));
}else if ($( ".timingselect" ).val() == "Week"){
paypalmulti($(".productselect").find(':selected').data('ppweek'));
$(".totamount").html("$" + $(".productselect").find(':selected').data('costweek'));
}
});
function paypalsingle(){
document.getElementById('paypal-button-container').innerHTML = null;
document.getElementById('paypal-payment-button').innerHTML = null;
paypal.Buttons({
style:{
color:'blue',
shape:'pill'
},
createOrder: function (data, actions) {
var cost = parseFloat(document.getElementsByClassName('totamount')[0].innerText.replace('$',''));
var address = document.getElementsByClassName('basictitle')[0].innerText;
return actions.order.create({
purchase_units : [{
amount: {
name: '######### Services',
description: "Lawn mowing at: " + address,
value: cost
}
}]
});
},
onApprove: function (data, actions) {
return actions.order.capture().then(function (details) {
console.log(details);
var prod, timing;
if($( ".productselect" ).val() == "basic"){
prod ="basic";
}else if ($( ".productselect" ).val() == "plus"){
prod ="plus";
}else if ($( ".productselect" ).val() == "premier"){
prod ="premier";
}
if($( ".timingselect" ).val() == "Single"){
timing ="single";
}else if ($( ".timingselect" ).val() == "Bi"){
timing ="bi";
}else if ($( ".timingselect" ).val() == "Week"){
timing ="weekly";
}
window.location = "paymentmade.php?UserID=<?php echo $userid ?>&orderID="+data.orderID+"&multi=true&timing="+timing+"&prod="+prod;
})
},
onCancel: function (data) {
window.location.replace("quote.php?fname=<?php echo $fname ?> &lname=<?php echo $lname ?>&email=<?php echo $email ?>&tel=<?php echo $tel ?>&lot=<?php echo $lot ?>&building=<?php echo $building ?>&lotID=<?php echo $lotid ?>")
}
}).render('#paypal-payment-button');
}
function paypalmulti(ppid){
document.getElementById('paypal-button-container').innerHTML = null;
document.getElementById('paypal-payment-button').innerHTML = null;
paypal.Buttons({
style: {
shape: 'pill',
color:'blue',
layout: 'vertical',
label: 'paypal'
},
createSubscription: function(data, actions) {
return actions.subscription.create({
/* Creates the subscription */
plan_id: ppid
});
},
onApprove: function (data, actions) {
return actions.order.capture().then(function (details) {
console.log(details);
var prod, timing;
if($( ".productselect" ).val() == "basic"){
prod ="basic";
}else if ($( ".productselect" ).val() == "plus"){
prod ="plus";
}else if ($( ".productselect" ).val() == "premier"){
prod ="premier";
}
if($( ".timingselect" ).val() == "Single"){
timing ="single";
}else if ($( ".timingselect" ).val() == "Bi"){
timing ="bi";
}else if ($( ".timingselect" ).val() == "Week"){
timing ="weekly";
}
window.location = "paymentmade.php?UserID=<?php echo $userid ?>&orderID="+data.orderID+"&multi=true&timing="+timing+"&prod="+prod;
})
},
onCancel: function (data) {
window.location.replace("quote.php?fname=<?php echo $fname ?> &lname=<?php echo $lname ?>&email=<?php echo $email ?>&tel=<?php echo $tel ?>&lot=<?php echo $lot ?>&building=<?php echo $building ?>&lotID=<?php echo $lotid ?>")
}
}).render('#paypal-button-container'); // Renders the PayPal button
}
您可以使用如下所示的辅助函数来动态加载/重新加载 SDK:
function loadAsync(url, callback) {
var s = document.createElement('script');
s.setAttribute('src', url); s.onload = callback;
document.head.insertBefore(s, document.head.firstElementChild);
}
// Usage Example:
loadAsync('https://www.paypal.com/sdk/js?client-id=test¤cy=USD', function() {
paypal.Buttons({
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '0.01'
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
// Show a success message to the buyer
alert('Transaction completed by ' + details.payer.name.given_name);
});
}
}).render('body'); // Replace with selector of desired container to render in
});
(您的回调当然可以是一个命名函数,例如您的paypalsingle
而不是上面使用示例中的匿名函数)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.