カテゴリー:
documentation
閲覧数:692 配信日:2019-04-25 09:17
docs
Payments > PREPARING FOR SCA > Payment Intents > Usage > Saving Payment Methods
・Saving Payment Methods
・支払い方法を保存する
・あとで顧客に請求できるようにPayment Methods APIを使用してStripeアカウントに支払い方法の詳細を保存する方法を学ぼう
Stripeを使用すると
・後で使用するために支払い情報を簡単に保存できるようにするCustomerオブジェクトを作成できる
・顧客オブジェクトを使用して、 subscriptions またはセッション外支払いを作成できる
・以前に収集された支払い情報を使用して、顧客の直接の関与なしに支払いが発生した場合、その支払いはセッション外と説明される
顧客の支払い情報を収集すると
・PaymentMethodが作成される
・このPaymentMethodは、最初に顧客に添付された場合を除き、1回しか使用できない
支払い中にクライアント側でPaymentMethodを保存する
PaymentMethodを顧客に保存
・支払い処理中に、save_payment_methodフラグを使用して、PaymentMethodをPaymentIntentに関連付けられた顧客に保存できる
・これは、チェックアウトプロセス中に顧客の支払い情報を保存するかどうかを選択するオプションを顧客に提供したい場合に役立つ
・支払いが成功したかどうかにかかわらず、PaymentMethodは顧客に添付される
PaymentIntentデモ10-1、10-2、10-3
・「関連付けられた顧客」という点が重要
・「関連付けられていない顧客」へ対して実行すると「message: "A valid `customer` must be provided when `save_payment_method=true`."」エラーが発生する
const stripe = Stripe('pk_test_xxxx');
const {paymentIntent, error} = await stripe.handleCardPayment(
'{{PAYMENT_INTENT_CLIENT_SECRET}}',
cardElement,
{
save_payment_method: true,
}
);
save_payment_methodパラメータ
・指定された時点で現在のPaymentMethodとCustomerにのみ適用される
・顧客が支払い方法を変更した場合は、新しい支払い方法を保存するためにsave_payment_methodをもう一度渡す必要がある
・PaymentIntentで支払を実装する場合の選択肢
サーバー側でPaymentMethodを保存する
支払い情報は顧客に関連付けることが出来る
・収集された支払い情報は保存され、後で再利用するために顧客に関連付けることが出来る
・PaymentIntentを作成するときに、save_payment_methodの値をtrueに設定し、希望の顧客とpayment_methodを指定する
次の例は、顧客の支払い情報を保存するPaymentIntentを作成する方法を示している
・PaymentIntentデモ11-1
・Customerオブジェクト作成。PaymentMethodオブジェクト作成。PaymentIntentオブジェクト作成する際、両者を関連付け。支払いは実行していない
・PaymentMethodをサーバで作成しているため、使用場面は限られると思われ
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");
// Create a Customer:
$customer = \Stripe\Customer::create([
'email' => 'paying.user@example.com',
]);
$paymentMethod = \Stripe\PaymentMethod::create([
'type' => 'card',
'card' => [
'number' => '4000003920000003',
'exp_month' => 4,
'exp_year' => 2020,
'cvc' => '314'
]
]);
$paymentintent = \Stripe\PaymentIntent::create([
"amount" => 1099,
"currency" => "jpy",
"payment_method_types" => ["card"],
"save_payment_method" => true,
"customer" => $customer->id,
"payment_method" => $paymentMethod['id'],
]);
支払いの外でPaymentMethodを保存する
PaymentIntentのコンテキスト外で(例えばcreatePaymentMethodを使用して )支払い情報を収集している場合は
・サーバーからPaymentMethodを顧客に添付できる
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");
$payment_method = StripePaymentMethod::retrieve('{{PAYMENT_METHOD_ID}}');
$payment_method->attach(['customer' => '{{CUSTOMER_ID}}']);
・後でこの顧客のPaymentIntentを作成するときに、顧客とPaymentMethodの両方を指定する
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");
StripePaymentIntent::create([
"payment_method_types" => ["card"],
"amount" => 1099,
"currency" => "jpy",
"customer" => "{{CUSTOMER_ID}}",
"payment_method" => "{{PAYMENT_METHOD_ID}}",
]);
ストライプは、保存時にカード情報を検証する
・このプロセスの結果として、顧客は彼らの明細書に1ドルの一時的な承認を見るかもしれない
・これは、将来の請求が成功することを保証するものではない(例えば、カードに十分な資金がなくなった、紛失または盗難にあった、またはアカウントが閉鎖された場合など)
・このプロセスでは、実行された可能性がある、レーダーによる従来の銀行小切手(CVCや郵便番号など)を含むすべての小切手の結果も更新される
保存した支払い方法にアクセスする
顧客の以前に保存されたCards、Sources、およびPaymentMethodsを表示するには
・customerオブジェクトのsourcesプロパティを読み取る代わりに支払い方法を一覧表示する
・顧客に追加された新しいPaymentMethodsが顧客オブジェクトのsourcesプロパティに重複しないため、これが必要だ
BEFORE
customer->sources
AFTER
\Stripe\PaymentMethod::all(['customer' => '{{CUSTOMER_ID}}', 'type' => 'card']);
関連デモ
・PaymentMethod デモ「all-1」「all-2」「retrieve-1」
・Customer デモ 「src-6」「retrieve-1」
・「PaymentMethodオブジェクト」と「Customerオブジェクト」の関係