Stripe Checkout セッション後に請求書に顧客情報を記載するにはどうすればよいですか

okwaves2024-01-25  9

チェックアウト セッションを作成しており、正常に機能していますが、顧客がアプリにリダイレクトされると、請求書にはチェックアウト プロセス全体で収集された住所が記載されません。私には意味がわかりませんが、Stripe はそのように動作します...

それを修正するために何をすべきか考えてください (請求書を変更するのではなく、チェックアウト時に顧客が記入した請求先住所を顧客から取得します)。

セッションの作成方法は次のとおりです:

return stripe.checkout.Session.create(
            customer_email=userEmail,
            billing_address_collection='required',   =>>> REQUIRED !
            payment_method_types=['card'],
            subscription_data=subscription_data,
            line_items=[{
                'price': priceId,
                'quantity': 1,
            }],
            metadata={
                'vatNumber': vatNumber,
                'accountId': accountData['accountId'],
            },
            mode='subscription',
            success_url='https://xxx/home/account',
            cancel_url='https://xxx/home/upgrade',
        )

そして、Webhook からの結果は次のとおりです:

    {
  "object": {
    "id": "cs_test_pNl9BXBCAtTEoXmTD1Ii2e8e34DK28MyUZSBZrqHjz6ZNPvft0",
    "object": "checkout.session",
    "allow_promotion_codes": null,
    "amount_subtotal": 19000,
    "amount_total": 22990,
    "billing_address_collection": "required",
    "cancel_url": "https://www.xxxxx/home/upgrade",
    "client_reference_id": null,
    "currency": "eur",
    "customer": "cus_xxxxxxhL00at",
    "customer_email": "xxxxxm",
    "livemode": false,
    "locale": null,
    "metadata": {
      "accountId": "f88e5bfc-3a2a-4103-bd3e-33d3ebbe2963"
    },
    "mode": "subscription",
    "payment_intent": null,
    "payment_method_types": [
      "card"
    ],
    "payment_status": "paid",
    "setup_intent": null,
    "shipping": null,
    "shipping_address_collection": null,
    "submit_type": null,
    "subscription": "sub_Hxxxx",
    "success_url": "https://www.xxxx/home/account",
    "total_details": {
      "amount_discount": 0,
      "amount_tax": 3990
    }
  }
}

応答のどこにも請求先住所がありません...少し迷っているので、請求先住所を収集するが使用しない、または簡単に利用できるようにする API の作成の背後にあるロジックを理解したいと思っています。

これについて何か進展はありますか?私も同じ問題に直面しています。顧客は請求情報を入力しますが、請求書 PDF には表示されません。

– フィリップ・ジャホダ

2021 年 2 月 15 日 14:20



------------------------

Stripe に連絡したところ、請求先住所は不正行為の検出にのみ使用されるとのことです。アドレスは支払い方法とともに保存されるため、customer.created Webhook をリッスンして、支払い方法から請求先住所を顧客自身に通知します。



------------------------

@kugel が指摘したように、私の最初の仮定は間違っていました。したがって、次の回答とその 2 つの編集はチェックアウト セッションには適用されないため、ほぼ無視してかまいません。

私は Stripe API の多くの部分を使用しましたが、チェックアウト API をまだ具体的に使用したことがないため、次の回答は推測に基づいています。したがって、私の推測が正しいかどうかは、自分で試してみる必要があります。私の推測: セッションを作成し、顧客データが収集されると、Stripe は新しい顧客オブジェクトをサーバーを削除したり、既存のサーバーを更新したりする場合があります。メールアドレスは一致します。

編集: API ドキュメントで説明されているのを見ました: https:// Stripe.com/docs/api/checkout/sessions/object#checkout_session_object-customer

このセッションの顧客の ID。のチェックアウト セッションの場合 支払いモードまたはサブスクリプション モードの場合、Checkout により新しい顧客が作成されます オブジェクトは、セッション中に提供された情報に基づいて作成されます。 既存の顧客はセッションの作成時に提供されました。

私の推測が正しければ、次のことがうまくいくかもしれません: Stripe によって返される Session オブジェクトには完全な顧客データは含まれず、顧客 ID (上記の cus_xxxxxxhL00at) のみが含まれます。 これは、応答オブジェクトをできるだけクリーンかつ小さく保つためです。 正しい AP を使用して顧客オブジェクトを取得できますこの ID を使用してメソッドを作成します (https:// Stripe.com/docs/api/customers/retrieve を参照)。 これを行う方法は、サーバーの設定方法 (使用されるプログラミング言語) によって異なります。私の理解が正しければ、Python を使用しているため、これは機能するはずです。

stripe.Customer.retrieve("cus_xxxxxxhL00at")

Session.create 呼び出しへの応答内で Stripe から顧客オブジェクトを直接取得したい場合は、顧客オブジェクトを展開することもできます。次に、顧客オブジェクト全体がロードされ、顧客 ID の代わりに応答に追加されます。 リクエストに展開パラメーターを追加するだけです (https://trips.com/docs/api/checkout/sessions/object で、「customer」の隣にある「expandable」ヒントにマウスを置くと、この説明が表示されます) #checkout_session_object-customer)。

リクエストは次のようになります。これ:

return stripe.checkout.Session.create(
            customer_email=userEmail,
            billing_address_collection='required',
            payment_method_types=['card'],
            subscription_data=subscription_data,
            line_items=[{
                'price': priceId,
                'quantity': 1,
            }],
            metadata={
                'vatNumber': vatNumber,
                'accountId': accountData['accountId'],
            },
            mode='subscription',
            success_url='https://xxx/home/account',
            cancel_url='https://xxx/home/upgrade',
            expand=['customer']
        )

いずれの場合も、返される顧客オブジェクトには、ユーザーが提供した住所データが含まれている必要があります。

編集 2: Session.create への応答には、更新された顧客ではなく、ユーザーが新しいデータを提供する前の顧客が含まれることに今気づきました (セッションが作成されたばかりで、ユーザーがまだ操作していないため) 。 この特定のリクエストで顧客オブジェクトを展開することはここではうまくいきませんが、同じメカニズムを使用できます。顧客がデータを提供した後にセッションを取得するとき(stripe.checkout.Session.retrieve を使用)、基本的な説明は依然として正しいため、これを回答に残しておきます。

別の質問に対するコメントも拝見しましたので、Webhook 処理メソッドで顧客データを取得したいと思われます。 Tとにかく、私が説明した最初の方法 (顧客 ID によって顧客オブジェクトを取得する) を使用することをお勧めします。

1

チェックアウト セッション (私の場合はサブスクリプション) を使用するとき、顧客の請求先住所はどこにも保存されません。この件についてはサポートに問い合わせてみます。

– クーゲル

2021 年 4 月 22 日 11:35

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。