Creating PaymentIntents / PaymentIntentsを作成する

「決済」及び「開発」関連用語集

カテゴリー: documentation  閲覧数:492 配信日:2019-04-20 08:35


docs


Payments > PREPARING FOR SCA > Payment Intents > Usage > Creating PaymentIntents
Creating PaymentIntents
PaymentIntentsを作成する
・支払いの受け取りを開始するには、サーバー側でPaymentIntentを作成する

Payment Intents APIとのシステムを構築するには
・2つのアクションがある
・それは、支払いの作成と確認だ
・各PaymentIntentは通常、アプリケーション内の単一のショッピングカートまたは顧客セッションと相関している
・PaymentIntentは、サポートされている支払い方法、回収金額、目的の通貨など、取引に関する詳細をカプセル化する

自動確認を使用する場合は
・チェックアウトプロセスの最初にPaymentIntentを作成してくれ

手動確認を使用する場合は
・ElementsまたはStripe社のiOSおよびAndroid SDKを使用して顧客から支払い情報を収集した後にPaymentIntentを作成してくれ

自動確認用のPaymentIntentの作成


自動確認を使用するシステムでは
・サーバー上にPaymentIntentを作成し、そのクライアントシークレットをクライアントに渡す
・支払いはクライアント上で確認され、サーバーはWebフックを監視して、それが正常に完了したか失敗したかを検出する

PaymentIntentを作成するときに、金額や通貨などのオプションを指定できる
▼PaymentIntentデモ1-1
・payment_method_typesパラメータを明示的に指定。このパラメータのデフォルト値は ['card']なので、指定しなくても結果は同じ
// 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_xxxx");

\Stripe\PaymentIntent::create([
 'amount' => 1099,
 'currency' => 'jpy',
 'payment_method_types' => ['card'],
]);


まだ持っていない場合は、今すぐお気に入りの言語用のAPIライブラリをインストールしてくれ
・便宜上、このページを読みながらログインしている場合は、テスト用の秘密のAPIキーを使用して例を事前に入力している
・あなただけがこの値を見ることができる
・これはあなたをStripeに認証するので、それを秘密にし、安全に保つ
・本番環境ではテストキーを実際のライブキーに置き換えてくれ
・ダッシュボードからすべての鍵を入手できる

PaymentIntentを作成したら
・PaymentIntentクライアントシークレットをクライアント側に渡して、ElementsまたはStripe社のiOSおよびAndroid SDKを使用して顧客のカードを安全に収集してトークン化できる

ベストプラクティス


顧客がチェックアウトプロセスを開始したときなど、金額が判明したら
・すぐにPaymentIntentを作成することをお勧めする
・金額が変わった場合は、金額を更新できる
・例えば、顧客がチェックアウトプロセスを取り消して新しい商品をカートに追加した場合、彼らがチェックアウトプロセスを再開したときにそれに応じて金額を更新する必要がある

チェックアウトプロセスが中断され、後で再開した場合
・新しいPaymentIntentを作成するのではなく、同じPaymentIntentを再利用するようにしてくれ
・各PaymentIntentには一意のIDがあり、必要に応じてそれを取得することができる
・アプリケーションのデータモデルでは、検索を容易にするために、PaymentIntentのIDを顧客のショッピングカートまたはセッションに保存できる
・PaymentIntentを再利用することの利点は、このオブジェクトによって、特定のカートまたはセッションで失敗した支払いの試行を追跡できるようになることだ

同じ購入に対して重複したPaymentIntentsが誤って作成されないようにするために
・PaymentIntentを作成するときにも、通常はアプリケーションのカートまたは顧客セッションに関連付けるIDに基づいて、べき等性キーを指定する必要がある

PaymentIntentを同時に作成して確認する


すでに支払い情報を収集している場合
・サーバー上にPaymentIntentを作成し、confirmパラメーターの値としてtrueを渡すことによってすぐにそれを確認できる
・手動確認でPaymentIntentを使用するには、confirmation_methodをmanualに設定することもできる
// 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");

\Stripe\PaymentIntent::create([
 "amount" => 1099,
 "currency" => "jpy",
 "payment_method_types" => ["card"],
 "payment_method" => "{{PAYMENT_METHOD_ID}}",
 "confirm" => true,
]);



クライアント側に「クライアントシークレット」を渡す


PaymentIntentには、client secretプロパティ 、個々のPaymentIntentに固有のキーが含まれている
・アプリケーションのクライアント側では、支払いを完了するためにStripe.js関数(stripe.handleCardPaymentstripe.handleCardActioなど)を呼び出すときに、クライアントシークレットがパラメータとして使用される

クライアントシークレットを使用するには
・サーバー上のPaymentIntentから取得してクライアントサイドに渡す必要がある

クライアント側にclient secretをクライアント側に届けるために、さまざまな方法がある
・アプリケーションのアーキテクチャに最も適した方法を選択してくれ

サーバーサイドレンダリング
・アプリケーションでサーバーサイドレンダリングを使用している場合は、レンダリング中にチェックアウトページのHTML出力にクライアントシークレットを埋め込むためにテンプレートフレームワークを使用することをお勧めする
・それをデータ属性または隠しHTML要素に埋め込んでから、それをJavaScriptで抽出して支払いを完了することができる
▼PaymentIntentデモ2
checkout.php
// 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");

//$intent = # ... Fetch or create the PaymentIntent;
$intent1 = \Stripe\PaymentIntent::create([
 'amount' => 1099,
 'currency' => 'jpy',
]);

$intent2 = \Stripe\PaymentIntent::update(
 $intent1['id'],
 [
   'amount' => 1499,
 ]
);
?>

<input id="cardholder-name" type="text">
<!-- placeholder for Elements -->
<div id="card-element"></div>
<button id="card-button" data-secret="<?php echo $intent2->client_secret; ?>">
 Submit Payment
</button>


シングルページアプリケーション


クライアントサイドのブラウザのfetch関数を使用
・あるいは、クライアントサイドのブラウザのfetch関数を使用して、サーバー上のエンドポイントからクライアントシークレットを取得することもできる
・このアプローチは、クライアント側が単一ページのアプリケーション、特にReactやVueなどの最新のフロントエンドフレームワークで構築されているアプリケーションである場合に一般的に最も適している

PaymentIntentsデモ6
・次の例では、クライアントシークレットを処理するサーバエンドポイントを作成する方法を示す
▼secret.php
// 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");

$intent = \Stripe\PaymentIntent::create([
 'amount' => 1099,
 'currency' => 'jpy',
]);

$intentResult = \Stripe\PaymentIntent::update(
 $intent['id'],
 [
   'amount' => 1499,
 ]
);
echo json_encode(array('client_secret' => $intentResult->client_secret));

・この例では、クライアントサイドでJavaScriptを使用してクライアントシークレットを取得する方法を示す
▼index.html
<script>
//JavaScript
var response = fetch('/demo/settlement/stripe/paymentintent/6/secret.php').then(function(response) {
 return response.json();
}).then(function(responseJson) {
 var clientSecret = responseJson.client_secret;
 console.log(clientSecret);
 //Call stripe.handleCardPayment() with the client secret.
});

//JavaScript (ESNext)
(async () => {
 const response = await fetch('/demo/settlement/stripe/paymentintent/6/secret.php');
 const {client_secret: clientSecret} = await response.json();
 console.log(clientSecret);
 // Call stripe.handleCardPayment() with the client secret.
})();
</script>

非同期処理が分からない

iOSおよびAndroidアプリケーションの場合も同様に
・サーバーからクライアントシークレットを取得できる

クライアントシークレットを使用して、PaymentIntentに指定された金額で支払い処理を完了することができる
・ログに記録したり、URLに埋め込んだり、顧客以外に公開したりしないでくれ
・クライアントシークレットを含むページでTLSが有効になっていることを確認してくれ

動的ステートメント記述子


デフォルトでは
・あなたが彼らのカードに課金するときはいつでも、あなたのStripeアカウントの公開ビジネス情報は顧客の明細書に表示される
・支払いごとに異なる説明を入力するには、statement_descriptorパラメータを含める

PaymentIntentsデモ7
// 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");

\Stripe\PaymentIntent::create([
 'amount' => 1099,
 'currency' => 'jpy',
 'payment_method_types' => ['card'],
 'statement_descriptor' => 'Custom descriptor',
]);


ステートメント記述子
・22文字以内で、特殊文字<、>、 '、 "、または*は使用できない
・数字だけで構成してはいけない
・動的ステートメント記述子を使用する場合、動的テキストはStripe Dashboardで設定されたステートメント記述子の接頭部に追加される
・動的ステートメントからデフォルトステートメント記述子を分離するために、*と空のスペースも追加される
・これら2文字は22文字の制限にカウントされる

22文字を超えるとエラーが発生し(、PaymentIntent作成処理自体が)失敗する
・上記エラーとなる設定例
'statement_descriptor' => '2019/4/22 日本語 Custom descriptor',

( ! ) Fatal error: Uncaught Stripe\Error\InvalidRequest: The statement descriptor must be at most 22 characters.
 
ステートメント記述子には少なくとも1つの英字が含まれていなければならない
・上記エラーとなる設定例
'statement_descriptor' => '2019/4/22 日本語',

( ! ) Fatal error: Uncaught Stripe\Error\InvalidRequest: The statement descriptor must contain at least one alphabetic character.

メタデータに情報を保存する


メタデータの追加をサポート
・Stripeは、支払い処理など、最も一般的なリクエストへのメタデータの追加をサポートしている
・メタデータは、顧客には表示されず、支払いが拒否されたのか、Stripeの詐欺防止システムによってブロックされたのかどうかについても考慮されない

メタデータを介して、自分にとって意味のある他の情報をStripeアクティビティに関連付けることができる
・あなたが含むどんなメタデータもダッシュボードで見ることができ(例えば、個々の支払いのためにページを見るとき)、そしてまた一般的なレポートとエクスポートで利用可能だ
・例えば、店舗の注文IDは、その注文の支払いに使用されるPaymentIntentに添付できる
・そうすることで、あなた、あなたの会計士、またはあなたの財務チームは、Stripeでの支払いとあなたのシステムでの注文を簡単に調整することができる

Radarを使用している場合
・追加の顧客情報と注文情報をメタデータとして渡すことを検討してくれ
・こうすることで、メタデータ属性を使用してレーダールールを作成し、ダッシュボード内で利用可能な支払いに関する詳細情報を入手できるため、レビュープロセスを促進できる

PaymentIntentが請求を作成すると
・PaymentIntentはそのメタデータを請求にコピーする
・後でPaymentIntentのメタデータを更新しても、以前にPaymentIntentによって作成された請求のメタデータは変更されない

PaymentIntentsデモ8
// 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");

\Stripe\PaymentIntent::create([
 'amount' => 1099,
 'currency' => 'jpy',
 'payment_method_types' => ['card'],
 'metadata' => ['order_id' => 6735],
]);


・機密情報(個人を特定できる情報、カードの詳細など)をメタデータとして、またはPaymentIntentの説明パラメータに保存しないでくれ

















































※以下は、(2019年4月前半)以前に掲載されていた内容の日本語訳

Payment Intents APIを使用して支払いを受け取るための最初のステップ


サーバー側でPaymentIntentを作成することだ
・各PaymentIntentは通常、アプリケーション内の単一のショッピングカートまたは顧客セッションと相関している
・顧客がチェックアウトプロセスを開始したときにPaymentIntentを作成することをお勧めする
・これにより、1つのオブジェクトに対するすべての支払い試行を追跡できる

PaymentIntentは、サポートされている支払い方法、回収金額、目的の通貨など、取引に関する詳細をカプセル化する
・PaymentIntentを作成するときにこれらのオプションを指定できる

週間人気ページランキング / 3-22 → 3-28
順位 ページタイトル抜粋 アクセス数
1 YouTube | 動画サービス(課金販売できるプラットフォーム) 7
2 その他エントリー(Stripe) カテゴリー 4
2 EMVレベル1 / EMVレベル2 / EMVCo とは? 4
2 Off-session Payments with Payment Intents / Payment Intents を使用したオフセッション支払 4
3 支払い 3
3 クレジットカード決済 | 課金 3
3 QA(Stripe) カテゴリー 3
3 Stripe Q15。PaymentIntent でエラー。カード番号に不備があります。 | QA(Stripe) 3
4 EMVCo | クレジットカード仕様(仕様) 2
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 2
4 Stripe エラー(Stripe) カテゴリー 2
4 資金決済に関する法律(資金決済法)とは?/(1)前払式支払手段 /(2)資金移動業 2
4 プリペイドカード | カード 2
4 Stripe Q60. Checkout\SessionオブジェクトとPaymentIntentオブジェクトの関係性は1対1ですか? | QA(Stripe) 2
4 QRコード決済 | 課金 2
4 Stripe Q48。「Checkout\Session - server」「Charge」「PaymentIntent」の使い分け方 | QA(Stripe) 2
4 振込 | 送金 2
5 Stripe Q11。テストAPIで、実際のカード番号を入力したらどうなりますか? | QA(Stripe) 1
5 Vプリカとは?/ 特徴 1
5 ICクレジットカード | クレジットカード仕様(仕様) 1
2024/3/29 1:01 更新
指定期間人気ページランキング / 2020-5-28 → 2024-3-28
順位 ページタイトル抜粋 アクセス数
1 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2006
2 EMVCo | クレジットカード仕様(仕様) 1252
3 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 938
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 898
5 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 876
6 クレジットカード決済 | 課金 875
7 決済用語 853
8 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? | QA(Stripe) 822
9 Omise | 「支払」機能を有する決済系サービス(決済サービス) 762
10 Stripe Q1。Stripeにおける個人事業主の定義 | QA(Stripe) 755
11 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) 736
12 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 733
13 EMVレベル1 / EMVレベル2 / EMVCo とは? 710
14 YouTube | 動画サービス(課金販売できるプラットフォーム) 646
15 プリペイドカード | カード 636
16 EPUB | ファイルフォーマット(電子書籍) 585
17 サブスクリプション | 課金 563
18 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) 542
19 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 536
20 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 482
2024/3/29 1:01 更新