Python Ver. Einführung in WebPay mit ein wenig Code

Update-Hinweis

Dieser Artikel basiert auf Webpay-Python Version 1 (frisch hergestellt). Danach haben wir ein größeres Versions-Upgrade durchgeführt.

Der größte Teil des Inhalts kann unverändert verwendet werden, einige Methodennamen wurden jedoch geändert. Die neuesten Informationen finden Sie in der Python-API-Dokumentation auf der offiziellen WebPay-Website.

Darüber hinaus wurde das Repository auf github gemäß dem Hauptversions-Upgrade nicht mehr aktualisiert. Informationen zur Bibliothek finden Sie unter Bibliotheksdokumente.


Der WebPay-Adventskalender hat auch die zweite Hälfte des Spiels erreicht. Wir arbeiten hart daran, die Anzahl der Aktien aller zu fördern, die allmählich zunehmen.

Heute ist die Serie "Introducing WebPay mit einem kleinen Code".

Bisher sind die Versionen Ruby und PHP erschienen. Es ist die Python-Version, die mitgeliefert wird. Außerdem habe ich versucht, Google App Engine als Umgebung zum Ausführen zu verwenden.

Heutzutage sind viele PaaS auf der Welt überfüllt, und es gibt viele praktische Programmierumgebungen. Ich denke, einige Leute haben GAE vergessen, aber GAE ist ein seit langem etabliertes PaaS. Bitte denken Sie ab und zu an GAE.

webpay-python

Die offizielle Python-Bibliothek von WebPay (webpay-python) wurde veröffentlicht!

** Feier ** Veröffentlichung

Verwenden wir nun diese Python-Bibliothek, um WebPay auf GAE mit explosiver Geschwindigkeit einzuführen.

webpay meets GAE

Beginnen wir sofort mit der Programmierung. Ein Hauptmerkmal von GAE ist, dass ein SDK für die lokale Entwicklung bereitgestellt wird und die GAE-Umgebung lokal reproduziert werden kann. Während die Umgebung voreingestellt ist, sind die von GAE bereitgestellten Bibliotheken und Versionen begrenzt, sodass Sie die Bibliotheken nicht frei laden und verwenden können. Hauptversionen werden unterstützt, wenn es sich um ein Basisframework handelt, aber natürlich die Zahlungsgateway-Bibliothek usw. nicht enthalten sind.

Die heutigen Programmierer glauben, dass die Welt, in der Räder neu erfunden werden und die Bibliothek nicht frei genutzt werden kann, eine unerträgliche Welt ist. Ich kann es auch nicht aushalten.

Daher werde ich die Punkte bei der Verwendung einer externen Bibliothek mit GAE erläutern. Bitte beziehen Sie sich darauf.

Dieses Mal werden wir "webapp2", das in GAE und "webpay-python" integriert ist, als externe Bibliothek verwenden.

Installieren Sie das SDK

Wenn Sie einen Merverics Mac zur Hand haben Laden Sie "GoogleAppEngineLauncher-1.8.8.dmg" von GAE SDK herunter und wenden Sie die geöffnete Datei (GoogleAppEngineLauncher.app) an. Legen Sie es einfach in einen Ordner und los geht's. Wenn Sie GoogleAppEngineLauncher.app starten, wird das Python-Skript für die lokale Entwicklungsumgebung von GAE in / usr / local / bin installiert.

Verwenden Sie WebPay von Python

Bereiten Sie ein geeignetes Verzeichnis für Ihr Projekt vor. Bereiten Sie dort app.yaml und appengine_config.py vor. Ich denke, es hat die folgende Verzeichnisstruktur.

webpay-sample
├── app.yaml
└── appengine_config.py

Der Inhalt von app.yaml

app.yaml


application: webpay-sample
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
  script: main.app

Stellen wir python27 so auf runtime. GAE bewegt sich auch in die Ära von 2.7. Geben Sie für die Anwendung die Anwendungs-ID an, die im [Dashboard] von GAE (https://appengine.google.com/) erstellt wurde. Wenn Sie es lokal ausprobieren möchten, müssen Sie keine Anwendung im GAE-Dashboard erstellen. Threadsafe-Parameter sind denjenigen, die GAE in der Vergangenheit verwendet haben, möglicherweise nicht bekannt. Seit Python27 verfügbar ist, wurden sie jedoch explizit angegeben. (Ich werde es nicht im Detail erklären, da es vom Hauptthema abweicht. Wenn Sie jedoch "threadsafe: true" festlegen, können Sie keine Daten mithilfe der Standardausgabe mit Druck usw. an den Client zurückgeben.)

Als nächstes kommt appengine_config.py.

appengine_config.py


import os
import sys
ROOTPATH = os.path.dirname(__file__)
LIBPATH = os.path.join(ROOTPATH, 'lib')
sys.path.append(LIBPATH)

appengine_config.py ist eine spezielle Datei, die für Einstellungen verwendet wird, die üblicherweise im Projekt verwendet werden, und zum Festlegen des Bibliothekspfads. Dieses Mal speichern wir die externe Bibliothek unter "lib". Fügen Sie also das Verzeichnis "lib" zum Bibliothekspfad hinzu.

Erstellen Sie abschließend den Hauptprogrammteil. Dieses Mal haben wir script: main.app in app.yaml angegeben, also erstellen wir es mit dem Dateinamen main.py. Bereiten Sie außerdem zwei Dateien vor, "index.html" und "success.html", als Vorlagen, die von "main.py" gelesen werden sollen.

webpay-sample
├── app.yaml
├── lib
├── main.py
├── index.html
├── succeeded.html
└── appengine_config.py

Werfen wir einen Blick auf jede Datei.

main.py


# -*- coding: utf-8 -*-
import os
import webapp2
from google.appengine.ext.webapp import template
from webpay import WebPay

SECRET_KEY = 'test_secret_eHn4TTgsGguBcW764a2KA8Yd'
PUBLIC_KEY = 'test_public_19DdUs78k2lV8PO8ZCaYX3JT'

class MainPage(webapp2.RequestHandler):
  def get(self):
      template_values = {
        'public_key': PUBLIC_KEY
      }
      path = os.path.join(os.path.dirname(__file__), 'index.html')
      self.response.out.write(template.render(path, template_values))

  def post(self):
    amount = self.request.POST.get('amount')
    token  = self.request.POST.get('webpay-token')
    webpay = WebPay(SECRET_KEY)
    try:
      # webpay-Zugriff auf WebPay über die Python-Bibliothek
      charge = webpay.charges.create(
        amount=amount,
        currency="jpy",
        card=token
      )
      template_values = {
        'charge': charge
      }
      path = os.path.join(os.path.dirname(__file__), 'succeeded.html')
      self.response.out.write(template.render(path, template_values))
    except webpay.errors.CardError, e:
      #Wenn die Karte abgelehnt wird
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.out.write("CardException")
      self.response.out.write("Status is: %d" % e.status)
      self.response.out.write("Type is: %s" % e.type)
      self.response.out.write("Code is: %s" % e.code)
      self.response.out.write("Param is: %s" % e.param)
      self.response.out.write("Message is: %s" % e)
    except webpay.errors.InvalidRequestError, e:
      #Wenn der in der Anforderung angegebene Parameter ungültig ist
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.out.write("InvalidRequestException")
    except webpay.errors.AuthenticationError, e:
      #Wenn die Authentifizierung fehlschlägt
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.out.write("AuthenticationException")
      pass
    except webpay.errors.ApiConnectionError, e:
      #Wenn ein Verbindungsfehler zur API auftritt
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.out.write("APIConnectionException")
      pass
    except webpay.errors.WebpayError, e:
      #Wenn auf dem WebPay-Server ein Fehler auftritt
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.out.write("APIException")
      pass
    except Exception, e:
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.out.write("Unexpected exception")

app = webapp2.WSGIApplication([('/', MainPage)],
                              debug=True)

main.py ist eine "webapp2" -App, die die Methoden "get" und "post" in der Klasse "MainPage" implementiert.

Die erste Methode "get" erstellt einen Vorlagenpfad mit "path = os.path.join (os.path.dirname (__ file __)," index.html ")" und "self.response.out". Ich rendere HTML mit write (template.render (path, template_values)) . Weisen Sie den in [CheckoutHelper](https://webpay.jp/docs/checkout) verwendeten public_key` als Vorlagenvariable zu.

      charge = webpay.charges.create(
        amount=amount,
        currency="jpy",
        card=token
      )

Die zweite "post" -Methode verwendet die oben gezeigte "webpay.charges.create ()", um die Abrechnung zu verarbeiten. Da das von CheckoutHelper erstellte Token vom Client gesendet wird, wird ein Code wie "token = self.request.POST.get (" webpay-token ")" gesendet Ruft den Wert POSTed in ab.

Lassen Sie uns abschließend den Inhalt der Vorlagen "index.html" und "success.html" überprüfen. In index.html ist es die Zeit des Adventskalenders von Ruby und PHP. In ähnlicher Weise verwenden wir eine Javascript-Bibliothek namens Checkout Helper, die einen Dialog zur Eingabe einer Kartennummer anzeigt.

index.html


<html>
  <head>
    <meta charset="utf-8">
    <title>WebPay Google App Engine Python sample</title>
  </head>
  <body>
    <h1>WebPay Google App Engine Python sample</h1>
    <form action="/" method="post">
      <input type="number" name="amount" value="300" />Ich werde den Yen bezahlen.<br />

<!--Das Senden von Kreditkarteninformationen an Ihren eigenen Server führt zu einer Verpflichtung, diese ordnungsgemäß zu behandeln.
Durch die Verwendung von JavaScript zum Generieren eines Webpay-Tokens müssen Sie nicht direkt mit Kreditkarteninformationen umgehen.
     webpay-Eine Eingabe mit dem Namenstoken wird automatisch hinzugefügt.-->
      <script src="https://checkout.webpay.jp/v1/" class="webpay-button"
              data-text="Karteninformationen eingeben und bezahlen"
              data-key="{{ public_key }}"></script>
    </form>
  </body>
</html>

erfolgreich.html ist eine einfache Vorlage, die nur die Ergebnisse anzeigt.

succeeded.html


<html>
  <head>
    <meta charset="utf-8">
    <title>WebPay PHP sample</title>
  </head>
  <body>
    <h1>Danke für deine Bezahlung</h1>
    <ul>
      <li>Der Geldbetrag für die Zahlung: {{charge.amount}}</li>
      <li>Kartenname: {{charge.card.name}}</li>
      <li>Kartennummer: ****-****-****-{{charge.card.last4}}</li>
    </ul>
  </body>
</html>

Dies ist das Ende der Programmierung.

Lassen Sie uns nun endlich die Bibliothek installieren.

Die Python-Bibliothek wird im Allgemeinen von pip oder easy_install verwaltet. Dies ist jedoch in der normalen Python-Umgebung und nicht in der GAE-Umgebung der Fall. Dieses Mal legen wir "webpay-python" und seine abhängigen Bibliotheken in das zuerst erstellte "lib" -Verzeichnis.

Zuerst "git clone" die Bibliothek. (Sie können die Bibliothek auch auf andere Weise zur Hand haben, z. B. mit Reißverschluss oder Ei.)

mkdir tmp && cd tmp
git clone [email protected]:webpay/webpay-python.git
git clone https://github.com/kennethreitz/requests.git

Erstellen Sie die Bibliothek, wenn der Klon abgeschlossen ist. Verschieben Sie die erstellten Dateien nach dem Erstellen wie unten gezeigt in das Verzeichnis "lib".

cd webpay-python
python setup.py build
cd ../requests
python setup.py build
cd ../../
mv tmp/webpay-python/build/lib/webpay lib/
mv tmp/requests/build/lib/requests lib/

Am Ende denke ich, dass die Verzeichnisstruktur wie folgt ist.

webpay-sample
├── app.yaml
├── lib
    ├── webpay
    └── requests
├── tmp
├── main.py
├── index.html
├── succeeded.html
└── appengine_config.py

Lassen Sie es uns in einer lokalen Entwicklungsumgebung ausführen. Führen Sie den folgenden Befehl im Verzeichnis "webpay-sample" aus.

dev_appserver.py .

Greifen wir auf http: // localhost: 8080 / zu.

Wie ist das? Wurde es angezeigt?

Wenn es gut aussieht, stellen Sie es in Google App Engine bereit.

appcfg.py update .

Einmal bereitgestellt

https://webpay-sample.appspot.com/

Ich denke, Sie können eine Seite wie diese sehen. Im Vergleich zu den Artikeln über Ruby und PHP ist die Menge etwas größer, aber Sie können feststellen, dass Sie WebPay mithilfe der offiziellen Bibliothek auch mit GAE einführen können. Dies ist ein typisches PaaS, das einfach ist und von jedem verwendet werden kann. Ist es nicht?

abschließend

Sie konnten WebPay sogar mit dem nostalgischen GAE ausführen, mit dem die Cloud-Ära begann.

Recommended Posts

Python Ver. Einführung in WebPay mit ein wenig Code
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
Vorgehensweise zum Erstellen einer virtuellen Python-Umgebung mit VS-Code unter Windows
Lesen einer CSV-Datei mit Python 2/3
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Ich möchte ein Spiel mit Python machen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Entscheide dich für einen Laborauftrag mit Python (Fiktion)
Schritte zum Erstellen eines Twitter-Bots mit Python
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Ich möchte mit Python in eine Datei schreiben
Zubu Amateur will Python starten
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Schreiben Sie Python2-Code in Python3 um (2to3)
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus (Python-Code) zu lösen.
Ein Hinweis, dem ich beim Ausführen von Python mit Visual Studio Code verfallen war
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Memo mit Python mit HiveServer2 von EMR verbunden
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Holen Sie sich Finanzdaten mit Python (dann ein wenig basteln)
Ich möchte mit einem Roboter in Python arbeiten.
Vom Kauf eines Computers bis zur Ausführung eines Programms auf Python
So erstellen Sie ein Python-Paket mit VS Code
[Python] Ein Memo zum vertikalen Schreiben von CSV mit Pandas
Hinweise zur Beschleunigung des Python-Codes mit Numba
Schreiben Sie Code in UnitTest, eine Python-Webanwendung
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
Ich möchte einen Quantencomputer mit Python betreiben
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
[Python] Weg zur Schlange (5) Spiele mit Matplotlib
Verwenden Sie tkinter, um den Ausgabecode in Python als "A und vorgeben, B zu sein" zu verschieben
Holen Sie sich den Ländercode mit Python
Python mit VSCode (Windows 10)
Stellen Sie mit Python eine Verbindung zu BigQuery her
Ein Weg zum mittleren Python
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Debuggen Sie Python mit VS-Code
Machen Sie eine Lotterie mit Python
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
Erstellen Sie ein Verzeichnis mit Python
Ein bisschen im Kettenschiff stecken
Konvertieren Sie Python 3.x-Code in Python 2.x.
Dokumentieren Sie Python-Code mit Doxygen
Richten Sie eine Python-Entwicklungsumgebung mit Visual Studio Code ein
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Eine Sammlung wettbewerbsfähiger Pro-Techniken, die mit Python gelöst werden können
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden