GASでStripeのAPIを使用して、顧客を取得する

2021年10月1日

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

GASでStripeのAPIを使用して、Stripeの顧客を取得する方法を紹介します。

StripeのAPIキーを取得する

Stripeダッシュボードにて、以下のページから取得できます。
https://dashboard.stripe.com/apikeys

StripeのAPIキーを取得する

シークレットキーを使用します。
キーの取り扱いは厳重に行ってください。

StripeのAPIを呼び出す処理を作成する

APIを呼び出す際に上記で取得したシークレットキーを使用します。

シークレットキーは、スクリプトプロパティに保存しています。
スクリプトプロパティは、以前は画面から入力して保存できたのですが、新しいエディタになってできなくなったので、以下のようにコードで保存する処理を書いています。

function setProperty() {
  let prop = PropertiesService.getScriptProperties();
  prop.setProperty("keySecretStripe", "XXXXXXXXX");
}

APIを呼び出す処理は、汎用性を持たせるため、以下のようにしました。

function fetchToStripe(url) {
  const keySecretStripe = PropertiesService.getScriptProperties().getProperty("keySecretStripe");
  let params = {
    "method": "get",
    "headers": {Authorization: "Basic " + Utilities.base64Encode(keySecretStripe + ":")},
  };
  let res = JSON.parse(UrlFetchApp.fetch(url, params).getContentText());
  return res;
}

2行目が、スクリプトプロパティからシークレットキーを取得する処理です。

APIを呼び出すには、指定のURLをgetで、シークレットキーを付けて呼び出すという形です。

顧客を取得する

顧客の一覧を取得する

まず、顧客の一覧を取得する処理です。
顧客の一覧を取得するエンドポイントは、/v1/customers です。

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

  for (let data of response["data"]) {
    Logger.log(`id:${data["id"]} email:${data["email"]} name:${data["name"]}`);
  }
}

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

  • id:ユニークなID
  • email:顧客のメールアドレス
  • name:顧客の名前

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

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

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

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

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

https://api.stripe.com/v1/customers?starting_after=cus_XXXXXX

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

また、検索条件にメールアドレスを使用することができます。
「email」というパラメータを付けると、取得する対象のメールアドレスを指定できます。

https://api.stripe.com/v1/customers?email=xxxxxx@gmail.com

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

指定したIDの顧客を取得する

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

let customer = getCustomer("cus_XXXXX");
Logger.log(`id:${customer["id"]} email:${customer["email"]} name:${customer["name"]}`);

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

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