【发布时间】:2021-03-26 10:44:51
【问题描述】:
我想知道是否可以将 PayPal 结账功能集成到我的 kivy 应用程序中?我希望根据我的 python kivy 代码中名为cart 的变量来确定总数。到目前为止,我还没有在网上看到任何关于这个主题的东西。任何帮助将不胜感激!
我有这个简单的代码可以描述更多我想要实现的目标
.py
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen, ScreenManager ,SlideTransition
from kivy.properties import NumericProperty
import webbrowser
y = 0.20
class MenuScreen(Screen):
def item1(self):
global y
y -= 0.02
App.get_running_app().cart += 7
App.get_running_app().root.get_screen("cart").add_widget(Label(text="Item 1", font_size=20, pos_hint={"x": 0, "y": y}))
class CartScreen(Screen):
def PayPal(self):
webbrowser.open_new_tab("PayPal.html")
def menu(self,button):
self.manager.transition = SlideTransition(direction="right")
self.manager.current = "menu"
class WindowManager(ScreenManager):
pass
class ExampleApp(App):
cart = NumericProperty()
def build(self):
return WindowManager()
if __name__ == "__main__":
ExampleApp().run()
.kv
#:import SlideTransition kivy.uix.screenmanager.SlideTransition
<WindowManager>:
MenuScreen:
CartScreen:
<MenuScreen>:
name: "menu"
FloatLayout:
Label:
text: "MENU"
font_size: 40
pos_hint: {"x": 0, "y": 0.3}
Label:
text: "$ " + str(app.cart)
font_size: 20
Button:
text: "Add to cart"
size_hint: 0.3,0.08
pos_hint: {"x": 0.5, "y": 0.3}
on_release:
root.item1()
Button:
text: "Cart"
size_hint: 0.3,0.08
pos_hint: {"x": 0.5, "y": 0.2}
on_release:
app.root.transition = SlideTransition(direction = "right")
app.root.current = "cart"
<CartScreen>:
name: "cart"
FloatLayout:
Label:
text: "CART"
font_size: 40
pos_hint: {"x": 0, "y": 0.3}
Label:
text: "$ " + str(app.cart)
font_size: 20
Button:
text: "PayPal Checkout"
size_hint: 0.3,0.08
pos_hint: {"x": 0.5, "y": 0.3}
on_release:
root.PayPal()
Button:
text: "Back"
size_hint: 0.3,0.08
pos_hint: {"x": 0.5, "y": 0.2}
on_release:
app.root.transition = SlideTransition(direction = "left")
app.root.current = "menu"
贝宝 HTML 文件
<div id="smart-button-container">
<div style="text-align: center"><label for="description"> </label><input type="text" name="descriptionInput" id="description" maxlength="127" value=""></div>
<p id="descriptionError" style="visibility: hidden; color:red; text-align: center;">Please enter a description</p>
<div style="text-align: center"><label for="amount"> </label><input name="amountInput" type="number" id="amount" value="" ><span> CAD</span></div>
<p id="priceLabelError" style="visibility: hidden; color:red; text-align: center;">Please enter a price</p>
<div id="invoiceidDiv" style="text-align: center; display: none;"><label for="invoiceid"> </label><input name="invoiceid" maxlength="127" type="text" id="invoiceid" value="" ></div>
<p id="invoiceidError" style="visibility: hidden; color:red; text-align: center;">Please enter an Invoice ID</p>
<div style="text-align: center; margin-top: 0.625rem;" id="paypal-button-container"></div>
</div>
<script src="https://www.paypal.com/sdk/js?client-id=sb¤cy=CAD" data-sdk-integration-source="button-factory"></script>
<script>
function initPayPalButton() {
var description = document.querySelector('#smart-button-container #description');
var amount = document.querySelector('#smart-button-container #amount');
var descriptionError = document.querySelector('#smart-button-container #descriptionError');
var priceError = document.querySelector('#smart-button-container #priceLabelError');
var invoiceid = document.querySelector('#smart-button-container #invoiceid');
var invoiceidError = document.querySelector('#smart-button-container #invoiceidError');
var invoiceidDiv = document.querySelector('#smart-button-container #invoiceidDiv');
var elArr = [description, amount];
if (invoiceidDiv.firstChild.innerHTML.length > 1) {
invoiceidDiv.style.display = "block";
}
var purchase_units = [];
purchase_units[0] = {};
purchase_units[0].amount = {};
function validate(event) {
return event.value.length > 0;
}
paypal.Buttons({
style: {
color: 'black',
shape: 'rect',
label: 'checkout',
layout: 'vertical',
},
onInit: function (data, actions) {
actions.disable();
if(invoiceidDiv.style.display === "block") {
elArr.push(invoiceid);
}
elArr.forEach(function (item) {
item.addEventListener('keyup', function (event) {
var result = elArr.every(validate);
if (result) {
actions.enable();
} else {
actions.disable();
}
});
});
},
onClick: function () {
if (description.value.length < 1) {
descriptionError.style.visibility = "visible";
} else {
descriptionError.style.visibility = "hidden";
}
if (amount.value.length < 1) {
priceError.style.visibility = "visible";
} else {
priceError.style.visibility = "hidden";
}
if (invoiceid.value.length < 1 && invoiceidDiv.style.display === "block") {
invoiceidError.style.visibility = "visible";
} else {
invoiceidError.style.visibility = "hidden";
}
purchase_units[0].description = description.value;
purchase_units[0].amount.value = amount.value;
if(invoiceid.value !== '') {
purchase_units[0].invoice_id = invoiceid.value;
}
},
createOrder: function (data, actions) {
return actions.order.create({
purchase_units: purchase_units,
});
},
onApprove: function (data, actions) {
return actions.order.capture().then(function (details) {
alert('Transaction completed by ' + details.payer.name.given_name + '!');
});
},
onError: function (err) {
console.log(err);
}
}).render('#paypal-button-container');
}
initPayPalButton();
</script>
【问题讨论】:
标签: python html paypal kivy checkout