【问题标题】:Intergrate PayPal checkout with Kivy app?将 PayPal 结帐与 Kivy 应用程序集成?
【发布时间】: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&currency=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


    【解决方案1】:

    PayPal 和类似服务有一个 API,您应该能够使用 kivy.network.urlrequest 模块与之通信。或者其他选项是使用 Checkout-Python-SDK 参考链接https://github.com/paypal/Checkout-Python-SDK

    【讨论】:

    • 谢谢!我会看看我能用这个做什么
    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 2012-05-04
    • 2013-08-18
    • 2010-09-21
    • 2013-09-09
    • 1970-01-01
    • 2016-03-23
    • 2016-12-06
    相关资源
    最近更新 更多