Stripe手数料:3.6%
-> smartHR, Booking.com, slack, shopify, freee, cookpad
-> Ruby, Java, Scala and Javascript
### Stripeの特徴
– 初期費用がかからず、事前審査不要
– 少額の場合は他社より料率・振込手数料が安価
– 決済画面への遷移がなくて決済フォームもシンプル
– 顧客へ返金時に返金手数料はかからないものの、元の決済手数料は一切返金なし
### 実装方法
自前でサーバを用意するパターン(custom payment flow)と、ドロップインソリューション(prebuild checkout page)といって Stripeが用意した決済画面を利用する方法がある。
docs: https://stripe.com/docs/payments/accept-a-payment?integration=elements
$ python3 –version
Python 3.8.5
$ pip3 install stripe
$ pip3 install flask
server.py
import os from flask import Flask, jsonify, request import stripe stripe.api_key = 'sk_test_***' app = Flask(__name__, static_url_path='', static_folder='.') YOUR_DOMAIN = '192.168.33.10:5000' @app.route('/create-session', methods=['POST']) def create_checkout_session(): try: checkout_session = stripe.checkout.Session.create( payment_method_types=['card'], line_items=[ { 'price_data': { 'currency': 'usd', 'unit_amount': 2000, 'product_data': { 'name': 'Stubborn Attachments', 'images': ['https://i.imgur.com/EHyR2nP.png'], }, }, 'quantity': 1, }, ], mode='payment', success_url=YOUR_DOMAIN + '/success.html', cancel_url=YOUR_DOMAIN + '/cancel.html', ) return jsonify({'id': checkout_session.id}) except Exception as e: return jsonify(error=str(e)), 403 if __name__ == '__main__': app.run(host='0.0.0.0')
success.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Thanks for your order!</title> <link rel="stylesheet" href=""> </head> <body> <section> <p> We appreciate your business! If you have any questions, please email <a href="mailto:info@hpscript.com">info@hpscript.com</a>. </p> </section> </body> </html>
cancel.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Checkout canceled</title> <link rel="stylesheet" href=""> </head> <body> <section> <p> Forgot to add something to your car? Shop around then come back to pay! </p> </section> </body> </html>
checkout.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Buy cool new product</title> <link rel="stylesheet" href=""> <script src="https://polyfill.io/v3/polyfill.min.js?version=3.52.1&features=fetch"></script> <script src="https://js.stripe.com/v3/"></script> </head> <body> <section> <div class="product"> <img src="https://i.imgur.com/EHyR2nP.png" alt="The cover of Stubborn Attachments"> <div class="description"> <h3>Stubborn Attachments</h3> <h5>$20.00</h5> </div> </div> <button id="checkout-button">Checkout</button> </section> </body> <script type="text/javascript"> var stripe = Stripe("pk_test_***"); var checkoutButton = document.getElementById("checkout-button"); checkoutButton.addEventListener("click", function(){ fetch("/create-session", { method: "POST", }) .then(function (response){ return response.json(); }) .then(function (session){ return stripe.redirectToCheckout({ sessionId: session.id }); }) .then(function(result){ if(result.error){ alert(result.error.message); } }) .catch(function(error){ console.error("Error:", error); }); }); </script> </html>
$ ls
cancel.html checkout.html other server.py style.css success.html
$ python3 server.py
ん? strip.jsはhttpsでないとダメっぽい。。