Stripeで過去に作成したインボイスの一覧を取得して、無効にする

Stripeのインボイスを検索して、ひとつずつ無効にするスクリプトを作りました。
2023.07.28

Stripeでいろいろと試していると、過去に作成したインボイス(Open)が邪魔になることがあります。 そのため、Openになっているインボイスの一覧を取得して、無効にしてみました。

おすすめの方

  • Stripeのインボイスを検索したい方
  • Stripeの複数のインボイスをまとめて無効にしたい方

StripeのAPIキーを取得する

Stripeのダッシュボードにアクセスし、APIキーを取得します。

StripeのAPIキーを取得する

用意されているAPIキーを利用する場合は、シークレットキーを利用します。取り扱いには注意しましょう。

インボイスを検索して、個別に無効化するスクリプトを作成する(Python)

StripeでOpenになっているインボイスの一覧を取得して、ひとつずつ無効にするスクリプトです。 今回は、「2023-07-10T11:00:00(JST) : 1688954400」より古いインボイスを対象にしてみます。

app.py

import stripe

STRIPE_API_KEY = 'xxx'


def main():
    stripe.api_key = STRIPE_API_KEY

    invoices = search_invoices(stripe)

    for item in invoices:
        print(item['id'])

        stripe.Invoice.void_invoice(item['id'])


def search_invoices(stripe):
    invoices = []
    options = {
        "query": "status:'open' AND created<1688954400",
        "limit": 10,
    }

    while True:
        resp = stripe.Invoice.search(**options)

        if 'data' in resp:
            invoices += resp['data']

        if resp['has_more']:
            options['page'] = resp['next_page']
        else:
            return invoices


if __name__=='__main__':
    main()

スクリプトを実行する

スクリプト実行前のインボイスの様子

5つのインボイスがあります。

Stripeのインボイスの様子(5個)

このうち、「2023-07-10T11:00:00(JST) : 1688954400」より古いインボイスは、下の2つです。

スクリプトを実行する

$ python app.py

in_1NS9HGHkjjhQpTMONx24Ovik
in_1NJEpbHkjjhQpTMOs7rzfcjc

スクリプト実行後のインボイスの様子

2つのインボイスが無効になり、3つのインボイスが残りました。期待どおりです。

Stripeのインボイスの様子(3個)

さいごに

Stripeのインボイスを検索して無効にするスクリプトを作成し、複数のインボイスを無効にしてみました。 どなたかの参考になれば幸いです。

参考