Cet article est basé sur la version 1 de webpay-python (fraîchement préparée). Après cela, nous avons effectué une mise à jour majeure de la version.
La plupart du contenu peut être utilisé tel quel, mais certains noms de méthodes ont été modifiés. Pour les dernières informations, reportez-vous à la documentation de l'API Python sur le site Web officiel de WebPay.
De plus, le référentiel sur github a cessé de se mettre à jour conformément à la mise à jour majeure de la version. Pour plus d'informations sur la bibliothèque, voir Documents de la bibliothèque.
Le calendrier de l'Avent WebPay est également entré dans la seconde moitié du jeu. Nous travaillons dur pour encourager le nombre de stocks de tout le monde qui augmente progressivement.
Aujourd'hui, c'est la série "Présentation de WebPay avec un peu de code".
Jusqu'à présent, les versions Ruby et PHP sont apparues. C'est la version Python qui l'accompagne. De plus, j'ai essayé d'utiliser Google App Engine comme environnement pour l'exécuter.
De nos jours, de nombreux PaaS sont encombrés dans le monde et il existe de nombreux environnements de programmation pratiques, donc je pense que certaines personnes ont oublié GAE, mais GAE est un PaaS établi depuis longtemps. N'oubliez pas GAE de temps en temps.
webpay-python
La bibliothèque officielle Python de WebPay (webpay-python) a été publiée!
** Célébration ** Sortie
Maintenant, utilisons cette bibliothèque Python pour introduire WebPay sur GAE à une vitesse explosive.
webpay meets GAE
Commençons tout de suite à programmer. Une caractéristique majeure de GAE est qu'un SDK pour le développement local est fourni et que l'environnement GAE peut être reproduit localement. Cependant, alors que l'environnement est prédéfini, les bibliothèques et les versions fournies par GAE sont limitées, vous ne pouvez donc pas charger et utiliser librement les bibliothèques. Les versions principales sont prises en charge s'il s'agit d'un cadre de base, mais bien sûr, la bibliothèque de passerelle de paiement, etc.
Les programmeurs d'aujourd'hui pensent que le monde qui consiste à réinventer les roues et à ne pas pouvoir utiliser la bibliothèque librement est un monde intolérable. Je ne peux pas le supporter non plus.
Par conséquent, je vais expliquer les points lors de l'utilisation d'une bibliothèque externe avec GAE, veuillez donc vous y référer.
Cette fois, nous utiliserons webapp2
intégré à GAE et webpay-python
comme bibliothèque externe.
Si vous avez un Mac Merverics à portée de main
Téléchargez GoogleAppEngineLauncher-1.8.8.dmg
à partir du GAE SDK et appliquez le fichier ouvert (GoogleAppEngineLauncher.app). Placez-le simplement dans un dossier et vous êtes prêt à partir. Lorsque vous démarrez GoogleAppEngineLauncher.app, il installera le script python pour l'environnement de développement local de GAE dans / usr / local / bin
.
Préparez un répertoire adapté à votre projet. Préparez-y app.yaml et appengine_config.py. Je pense qu'il a la structure de répertoires suivante.
webpay-sample
├── app.yaml
└── appengine_config.py
Le contenu de app.yaml
app.yaml
application: webpay-sample
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: main.app
Définissons python27
sur runtime
comme ceci. GAE passe également à l'ère du 2.7. Pour l'application, spécifiez l'application_id créé dans le [Dashboard] de GAE (https://appengine.google.com/). Si vous souhaitez l'essayer localement, vous n'avez pas besoin de créer une application sur le tableau de bord GAE. Les paramètres Threadsafe peuvent ne pas être familiers à ceux qui utilisaient GAE dans le passé, mais depuis que python27 est devenu disponible, ils ont été explicitement spécifiés. (Je n'expliquerai pas en détail car cela s'écarte du sujet principal, mais si vous définissez threadsafe: true
, vous ne pourrez pas renvoyer les données au client en utilisant la sortie standard avec impression, etc.)
Vient ensuite ʻ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 est un fichier spécial utilisé pour les paramètres couramment utilisés dans le projet et pour définir le chemin de la bibliothèque. Cette fois, nous allons enregistrer la bibliothèque externe sous lib
, donc ajoutez le répertoire lib
au chemin de la bibliothèque.
Enfin, créez la partie principale du programme. Cette fois, j'ai spécifié script: main.app
dans ʻapp.yaml, donc créons-le avec le nom de fichier
main.py. De plus, préparez deux fichiers, ʻindex.html
et successed.html
, comme modèles à lire par main.py
.
webpay-sample
├── app.yaml
├── lib
├── main.py
├── index.html
├── succeeded.html
└── appengine_config.py
Jetons un œil à chaque fichier.
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-Accès à WebPay à l'aide de la bibliothèque python
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:
#Si la carte est rejetée
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:
#Lorsque le paramètre spécifié dans la demande n'est pas valide
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write("InvalidRequestException")
except webpay.errors.AuthenticationError, e:
#Si l'authentification échoue
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write("AuthenticationException")
pass
except webpay.errors.ApiConnectionError, e:
#Lorsqu'une erreur de connexion à l'API se produit
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write("APIConnectionException")
pass
except webpay.errors.WebpayError, e:
#Si une erreur se produit sur le serveur WebPay
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 est une application webapp2
qui implémente les méthodes get
et post
dans la classe MainPage
.
La première méthode get
crée un chemin de modèle avec path = os.path.join (os.path.dirname (__ file __), 'index.html') ʻet
self.response.out. Je rende html avec write (template.render (path, template_values)) `. Attribuez la clé publique utilisée dans CheckoutHelper comme variable de modèle.
charge = webpay.charges.create(
amount=amount,
currency="jpy",
card=token
)
La deuxième méthode post
utilise la méthode webpay.charges.create ()
ci-dessus pour effectuer le processus de facturation. Puisque le jeton créé par CheckoutHelper est envoyé par le client, un code comme token = self.request.POST.get ('webpay-token')
Obtient la valeur POSTed dans.
Enfin, vérifions le contenu des modèles de ʻindex.htmlet de
successed.html. Dans ʻindex.html
, quand il s'agit du calendrier de l'avent de Ruby et PHP De même, nous utilisons une bibliothèque Javascript appelée Checkout Helper qui affiche une boîte de dialogue pour saisir un numéro de carte.
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" />Je paierai le yen.<br />
<!--L'envoi d'informations de carte de crédit à votre propre serveur crée une obligation de les gérer correctement.
En utilisant JavaScript pour générer un jeton de paiement Web, vous n'avez pas à traiter directement les informations de carte de crédit.
webpay-Une entrée avec le jeton de nom est automatiquement ajoutée.-->
<script src="https://checkout.webpay.jp/v1/" class="webpay-button"
data-text="Entrez les informations de la carte et payez"
data-key="{{ public_key }}"></script>
</form>
</body>
</html>
reused.html
est un modèle simple qui affiche simplement les résultats.
succeeded.html
<html>
<head>
<meta charset="utf-8">
<title>WebPay PHP sample</title>
</head>
<body>
<h1>Merci pour votre paiement</h1>
<ul>
<li>Le montant d'argent à payer: {{charge.amount}}</li>
<li>Nom de la carte: {{charge.card.name}}</li>
<li>numéro de carte: ****-****-****-{{charge.card.last4}}</li>
</ul>
</body>
</html>
C'est la fin de la programmation.
Maintenant, installons enfin la bibliothèque.
La bibliothèque python est généralement gérée par pip ou easy_install. Cependant, c'est le cas dans l'environnement Python normal et non dans l'environnement GAE. Cette fois, mettons webpay-python
et ses bibliothèques dépendantes dans le répertoire lib
créé en premier.
Tout d'abord, git clone
la bibliothèque. (Vous pouvez préparer la bibliothèque par une autre méthode, telle que zip ou egg.)
mkdir tmp && cd tmp
git clone [email protected]:webpay/webpay-python.git
git clone https://github.com/kennethreitz/requests.git
Construisez la bibliothèque une fois le clonage terminé. Après la construction, déplacez les fichiers construits dans le répertoire lib
comme indiqué ci-dessous.
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/
En fin de compte, je pense que la structure des répertoires est la suivante.
webpay-sample
├── app.yaml
├── lib
├── webpay
└── requests
├── tmp
├── main.py
├── index.html
├── succeeded.html
└── appengine_config.py
Exécutons-le dans un environnement de développement local. Exécutez la commande suivante dans le répertoire webpay-sample
.
dev_appserver.py .
Accédons à http: // localhost: 8080 /.
comment c'est? At-il été affiché?
S'il semble bon, déployez-le sur Google App Engine.
appcfg.py update .
Une fois déployé
https://webpay-sample.appspot.com/
Je pense que vous pouvez voir une page comme celle-ci. Par rapport aux articles sur ruby et php, le montant est un peu plus important, mais vous pouvez constater que vous pouvez introduire WebPay en utilisant la bibliothèque officielle même avec GAE, qui est un PaaS typique qui est facile et que tout le monde peut utiliser. N'est-ce pas?
Vous avez pu exécuter WebPay même avec le GAE nostalgique qui a lancé l'ère du cloud.
Recommended Posts