GASでStripeのAPIを使用して、支払い結果を取得する

決済プラットフォームである「Stripe」は使いやすくて良いサービスだと思います。
StripeにはAPIが用意されているので、APIを用いて、外部からデータを取得したりすると便利です。

GASでStripeのAPIを使用して、Stripeの支払い結果を取得する方法を紹介します。

APIの実行に必要なAPIキーの取得や、APIの呼び出しについては以下の記事で書いていますので、ご覧ください。

支払い結果の一覧を取得する

まず、支払い結果の一覧を取得する処理です。
支払い結果の一覧を取得するエンドポイントは、/v1/payment_intents です。

function getPayments() {
  const url = "https://api.stripe.com/v1/payment_intents";
  let response = fetchToStripe(url);

  for (let data of response["data"]) {
    Logger.log(`id:${data["id"]} amount:${data["amount"]} customer:${data["customer"]} created:${data["created"]} invoice:${data["invoice"]}`);
  }
}

取得できる項目は、代表的なものだと以下です。

  • id:ユニークなID
  • amount:金額
  • customer:顧客のID
  • created:作成日時(支払い日時として使える)
  • invoice:インボイスのID(請求書を発行した場合)

取得できるオブジェクトについては以下をご覧ください。
https://stripe.com/docs/api/payment_intents/object

一覧を取得する場合は、件数の上限が決まっていて、デフォルトの取得件数は10件です。
10件を超えて取得する場合は、「limit」パラメータを付けます。
指定できる上限は100件です。

https://api.stripe.com/v1/payment_intents?limit=100

100件を超えて取得したい場合は、ページネーションのような仕組みを利用することになります。
ただし、ページネーションを件数で指定できるようなパラメータがなく、取得する位置を示す「starting_after」というパラメータを使用します。

例えば、101件目以降を取得する場合、100件目の支払いIDを保存しておいて、パラメータで指定します。
以下のような形式です。
以下の例だと、「pi_XXXXXX」が最後の支払いIDで、「pi_XXXXXX」の次の支払い結果から取得することになります。

https://api.stripe.com/v1/payment_intents?starting_after=pi_XXXXXX

この形式は、Stripeダッシュボードも同様のパラメータを使用しているので、ダッシュボードで見てもらうと分かりやすいと思います。

また、検索条件に顧客を使用することができます。
「customer」というパラメータを付けると、取得する対象の顧客IDを指定できます。

https://api.stripe.com/v1/payment_intents?customer=cus_XXXXXX

その他、使用できるパラメータや取得できる項目は公式ドキュメントをご覧ください。
https://stripe.com/docs/api/payment_intents/list

指定したIDの支払い結果を取得する

続いて、指定したIDの支払い結果を取得する処理です。
支払い結果を1件取得するエンドポイントは、/v1/payment_intents/:id です。

let payment = getPayment("pi_XXXXX");
Logger.log(`id:${payment["id"]} amount:${payment["amount"]} customer:${payment["customer"]} created:${payment["created"]} invoice:${payment["invoice"]}`);

function getPayment(id) {
  const url = "https://api.stripe.com/v1/payment_intents/" + id;
  return fetchToStripe(url);
}

取得できる項目は公式ドキュメントをご覧ください。
https://stripe.com/docs/api/payment_intents/retrieve