【初心者向け】Pythonでfincodeの決済APIを実行する実装例(決済URL作成編)
fincodeマーケティング担当です。 この記事では、fincodeのテスト環境を使って、たった数十行のPythonコードでカード決済を開始できる「決済URL作成API」の実装について説明します。 ※本記事の実装例は、非エンジニアが記述しているので、決済導入が初めてのエンジニアの方や、ビジネスサイドの方でも概要をイメージできる内容になっています。 本実装例で実現できること 本記事で紹介する「決済URL作成API」の実装を行うと、以下を実現できます。 fincodeが提供するリダイレクト型決済ページを発行し、その決済ページへのURLを出力 リダイレクト型決済ページから決済のテストを実行 リダイレクト型決済とは リダイレクト型決済は、fincodeが提供する決済画面を使用して購入者が決済を行う方法です。 ショップ自身で決済画面を構築することなく、fincodeの決済URLに購入者を誘導するだけで決済を行うことができます。 「オンライン決済接続方式比較ガイド」資料ダウンロード > コード全文:最小構成で動くPythonサンプル Python import os, requests, json API_KEY = os.getenv("FINCODE_TEST_SECRET_KEY") BASE_URL = "https://api.test.fincode.jp" ENDPOINT = "/v1/sessions" SUCCESS_URL = "http://localhost:8000/success" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } data = { "success_url": SUCCESS_URL, "transaction": { "pay_type": ["Card"], "amount": "1500" }, "card": { "job_code": "CAPTURE", "tds_type": "2", "tds2_type": "2" } } try: resp = requests.post(f"{BASE_URL}{ENDPOINT}", headers=headers, json=data, timeout=20) resp.raise_for_status() print("OK:\n" + json.dumps(resp.json(), ensure_ascii=False, indent=2)) except requests.exceptions.HTTPError: try: print(json.dumps(resp.json(), ensure_ascii=False, indent=2)) except Exception: print(resp.text) コードの流れを分解して理解する ①認証キーの設定 Python API_KEY = os.getenv("FINCODE_TEST_SECRET_KEY") テスト用シークレットキーを環境変数(※1)から取得します。 fincodeのテスト用シークレットキーは「m_test_**********************」という形式です。 fincodeのテスト環境管理画面にログイン後、「API・Webhook」タブからAPIキーを確認できます。 テスト環境のアカウントを作成する > テスト環境管理画面にログインする > セキュリティ上、APIキーをコード内に直接書くことは推奨されません。 ②リクエストヘッダーとリクエストボディ Python headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } Authorizationヘッダーは "Bearer <キー>" の形式で送信します。 fincodeではBearer認証(※2)またはBasic認証が使用できます。本記事ではBearer認証で実装しています。 ヘッダーでは認証とJSON形式の指定を行い、ボディには以下の内容を指定します。 項目 内容 補足 success_url 決済完了後の戻り先 ローカル開発時はlocalhostでもOK pay_type 利用する決済手段 今回は「Card」のみ amount 決済金額 文字列で送信(例: "1500") job_code 売上確定方法 「CAPTURE」=即時売上、「AUTH」=仮売上 tds_type / tds2_type 3Dセキュア設定 「2」は3Dセキュア2.0対応 ※カード決済以外の決済手段を追加する方法はAPIリファレンスをご参照ください。 APIリファレンス > ③APIを実行 Python resp = requests.post(f"{BASE_URL}{ENDPOINT}", headers=headers, json=data, timeout=20) requests.post()で決済URL作成APIを呼び出します。 成功すると、以下のようなJSONレスポンスが返ってきます。 json { "id": "lk_**********************", "link_url": "https://secure.test.fincode.jp/v1/links/lk_**********************", } この link_url をブラウザで開くと、テスト用のリダイレクト型決済ページが表示されます。 ④エラー時の挙動 Python rexcept requests.exceptions.HTTPError: try: print(json.dumps(resp.json(), ensure_ascii=False, indent=2)) except Exception: print(resp.text) APIキーが誤っているなどの理由でエラーが発生した場合、APIが返したエラーメッセージを整形して表示します。 決済のテストを行う リダイレクト型決済ページにおいて、テストカードの番号を用いることで、カード決済のテストを行うことができます。 テストカードの番号はこちらからご確認いただけます。 カードの「有効期限、CVC、名前」は適当な内容で問題ないです。 (※1)プログラムが動く環境(パソコンやサーバー)にあらかじめ登録しておく設定情報のことです。APIキーなどの秘密情報をコードに書かず、安全に管理するために使われます。 (※2)APIキー(アクセストークン)をAPIリクエスト時に送ることで認証する方式です。認証に成功した場合のみリソースを参照・操作できます。 想定質問(FAQ) Q1. timeout は削除しても動きますか?→ 動作はしますが、サーバー応答が途絶えた際にプログラムが止まるリスクがあります。実運用では必須です。 Q2. CAPTURE と AUTH の違いは?→ CAPTUREは即時売上、AUTHは仮売上(後から確定)。 Q3. Bearerを付け忘れると?→ 認証エラー(401)が返ります。ヘッダーの形式 "Authorization": "Bearer <キー>" を必ず確認しましょう。 Q4. 本番環境では何を変える?→ BASE_URL を https://api.fincode.jp に変更し、本番用APIキーを設定します。 おわりに 本記事では、fincodeのテスト環境を使って、たった数十行のPythonコードでカード決済を開始できる「決済URL作成API」の実装について説明しました。 非エンジニアであるマーケティング担当者でも数十行の簡単なコードで実装ができたので、fincodeが開発しやすいことを実感しました。 運営会社 会社名 GMOイプシロン株式会社(英文表記:GMO Epsilon, Inc.) 設立年月日 2002年9月26日 所在地 〒150-0043 東京都渋谷区道玄坂1丁目14番6号 ヒューマックス渋谷ビル7F 資本金 1億5百万円 事業内容 オンライン販売の決済代行、代金回収代行及びそれらに付帯する業務 主要株主 GMOペイメントゲートウェイ株式会社 (東証プライム上場:3769) グループ会社 GMOインターネットグループ 東証プライム上場企業のGMOペイメントゲートウェイの連結会社として、プライバシーマーク認証やPCI DSS、ISMS準拠のセキュリティ基準で安心してご利用いただける環境を提供しています。 事業規模によって決済手数料のご提案が可能です。 見積依頼 > fincodeサービス概要の資料ダウンロードはこちらから 資料請求 >