Stripe電子決済サービスを扱う人は、開発者向けに完全に調整されていることを知っています。 そのドキュメントは、人々のために人々によって書かれています。 優れたテストモードがあります。実際のテストモードの完全なコピーであり、ライブモードに切り替えるには、APIに触れずにサプライズを受け取らずにキーを交換するだけです。 管理者テストモード-戦闘の完全なコピー。 一般に、Stripeは優れているので、この記事では、サービスをeコマースプロジェクトに統合する基本的な問題に専念し、具体的かつ抽象的な例を使用してプロセスを説明します。 私の経験が、彼らのプロジェクトでStripeを試してみたいすべての人に役立つことを願っています。
ただし、Stripeを使用する前に、「そして、私たちがサービスを提供するビジネスはどこですか?」 たとえば、ビジネスがロシアの場合、Stripeは役に立ちません。どの国からでも支払いを受け取ることができますが、Stripeのアカウント所有者のビジネスは利用可能な国のいずれかで法的に登録されている必要があります。 そうでない場合、アカウントの作成と承認はできません。 国のリストはここで見つけることができます 。 サプライヤなどの他の口座にお金を引き出したい場合(これを行う方法、以下に説明します)、法的にサプライヤもStripeが機能する国にいる必要があります。 私が働いていたクライアントのビジネスはアメリカで登録されていたため、Stripeで支払いを行うことができました。
また、Stripeは3-D-secure xmlプロトコルをサポートしていないため、クライアントがSMSメッセージで受信した検証コードを入力する必要があることに注意する必要があります。 Stripeはこのオプションなしで支払いを試みますが、銀行が3-Dセキュアなしで支払いを受け入れると(そうでない場合は)、すべてが失敗し、このカードで支払いができなくなります。
お支払い
お客様のカードからStripeアカウントに送金するには、以下を行う必要があります。 Stripe.jsスクリプトを使用して、フロントエンドでStripeトークンを取得します。 さらに、サーバー側からのトークンを使用して、支払い自体を実行します。
Stripe.jsを接続し、公開キーを指定します。
<script type="text/javascript" src="https://js.stripe.com/v2/"></script> <script type="text/javascript"> Stripe.setPublishableKey('your_public_key'); </script>
通常のHTMLフォームを作成し、入力で、スクリプトが機能するためのデータストライプ属性を指定します。 顧客のカード番号、カードの有効期限とCVCの年と月が必要になります。 Stripeの所有者の名前と姓は必要ありません。
<form action="" method="POST" id="payment-form"> <span class="payment-errors"></span> <label>Card Number</label> <input type="text" size="20" data-stripe="number"> <label>Expiration (MM/YY)</label> <input type="text" size="2" data-stripe="exp_month"> <input type="text" size="2" data-stripe="exp_year"> <label>CVC</label> <input type="text" size="4" data-stripe="cvc"> <input type="submit" class="submit" value="Submit"> </form>
トークンを取得:
$(function() { var $form = $('#payment-form'); $form.submit(function(event) { // , $form.find('.submit').prop('disabled', true); // token Stripe Stripe.card.createToken($form, stripeResponseHandler); // submit return false; }); }); function stripeResponseHandler(status, response) { // : var $form = $('#payment-form'); if (response.error) { // Problem! // : $form.find('.payment-errors').text(response.error.message); $form.find('.submit').prop('disabled', false); // submit } else { // Token // token id: var token = response.id; // token , submit : $form.append($('<input type="hidden" name="stripeToken">').val(token)); // : $form.get(0).submit(); } };
これで、サーバーを介してクライアントからお金を相殺することができます。 PHPコードの例。
// \Stripe\Stripe::setApiKey("your_secret_key"); // token $token = $_POST['stripeToken']; // try { $charge = \Stripe\Charge::create(array( "amount" => 1000, // "currency" => "usd", "source" => $token, "description" => "Example charge" )); } catch(\Stripe\Error\Card $e) { // }
クライアントのカードからStripeアカウントに送金するために必要なことはそれだけです。
サプライヤーへの自動送金
次に、実際の例を使用して翻訳を検討します。 世界中の小さな出版社から珍しい本を販売するプラットフォームを書いていると想像してください。 サプライヤや出版社に送金して、クライアントに本を送付し、各販売から10ドルの手数料を受け取る必要があります。 毎月のレポートや支払いで入浴するのではなく、クライアントが支払うたびに送金するだけです。 ストライプはそれを許可します。
以前と同様に、自動転送を設定するための前提条件は、Stripeがサポートしている国の1つでサプライヤーを見つけることです。
StripeはManaged Acountsについて素晴らしいところがあります。 このオプションを使用して、プロバイダーのStripeアカウントを作成しますが、パブリッシャー自体がStripeに登録する必要がないように、すべてのアカウント管理を処理します。
まず、既におなじみのStripe.jsスクリプトを使用して、サイト運営者の銀行口座に関する情報を取得します。 顧客のカードからお金を引き落とす場合のように、銀行口座での操作にはストライプトークンも必要です。
Stripe.bankAccount.createToken({ country: $('.country').val(), // 2- (US) currency: $('.currency').val(), // 3- (USD) routing_number: $('.routing-number').val(), // account_number: $('.account-number').val(), // account_holder_name: $('.name').val(), // ( — ) account_holder_type: $('.account-holder-type').val() // — (individual, company) }, stripeResponseHandler);
備考 国ごとに、銀行データ(routing_number、account_number)の入力方法が異なることに留意してください。 たとえば、ヨーロッパの国では、IBAN番号を取得する必要があります。 account_numberフィールドに配置され、routing_numberはまったく送信されません。 また、一部の国では、内部アカウント番号が1行に接着されてフィールドに記録されます。 たとえば、カナダの正しいrouting_number銀行識別番号を取得するには、トランジット番号と機関番号(トランジット番号+機関番号)を接着する必要があります。 通過番号:02345、機関番号:987の場合、routing_numberは '02345987'になります。 口座番号は銀行によって異なります。 また、ドイツの場合、IBAN番号のみが必要になります。これはrouting_numberフィールドに入力されます。 たとえば、IBAN:DE89370400440532013000(22文字)。 他の国のこれらのフィールドに入力する方法については、 こちらをご覧ください 。
そのため、今ではトークンの銀行口座があり、そこでサプライヤにお金を引き出すことができます。 管理アカウントを作成しましょう。 私たちの出版社をアメリカに置き、IPではなく会社にし、彼にアメリカドルで支払いましょう。
\Stripe\Stripe::setApiKey("your_secret_key"); $account = Account::create([ "country" => 'US', "managed" => true, ]); if (isset($account->id)) { try { $account->external_accounts->create( ["external_account" => $token] // token ); } catch (InvalidRequest $error) { // } }
これで管理アカウントが作成され、送金できますが、いいえ:アカウントを確認する必要があります。 これを行うには、Stripeに会社に関する特定の法的情報を提供します。 どの情報が必要であり、どの国でここで説明されています 。
そのため、アメリカでの出版には、以下を提供する必要があります。
役職 | 説明 |
---|---|
legal_entity.address.city | 会社が所在する市 |
legal_entity.address.line1 | 会社の住所 |
legal_entity.address.postal_code | 郵便番号 |
legal_entity.address.state | 都道府県 |
legal_entity.business_name | 会社名 |
legal_entity.business_tax_id | 納税者番号 |
legal_entity.dob.day | 会社の所有者の誕生日 |
legal_entity.dob.month | 会社所有者の生月 |
legal_entity.dob.year | 会社の所有者の生年 |
legal_entity.first_name | 会社の所有者名 |
legal_entity.last_name | 会社の所有者の姓 |
legal_entity.ssn_last_4 | 会社所有者の社会保障番号の下4桁 |
legal_entity.type | 個人/会社 |
tos_acceptance.date | ストライプ利用規約の承認日 |
tos_acceptance.ip | Stripeの使用条件の受け入れ元のIPアドレス |
Stripeの使用条件はこちらです。 管理アカウントを作成する代理人は、それらを受け入れる必要があります。
ストライプには追加情報が必要な場合もあります。 アメリカの場合、これは次のとおりです。
役職 | 説明 |
---|---|
legal_entity.personal_id_number | 個人識別番号 |
legal_entity.verification.document | 身分証明書スキャン |
必要な情報を収集し、アカウントを編集します。
\Stripe\Stripe::setApiKey("your_secret_key"); $account = Account::retrieve($accountId); $account->legal_entity->address->city = 'New-York'; $account->legal_entity->address->state = 'New-York'; $account->legal_entity->address->postal_code = '00501'; $account->legal_entity->address->line1 = 'Some address'; $account->legal_entity->business_name = 'US TEST'; $account->legal_entity->business_tax_id = '00000001'; $account->legal_entity->dob->day = 1; $account->legal_entity->dob->month = 1; $account->legal_entity->dob->year = 1980; $account->legal_entity->first_name = 'Bob'; $account->legal_entity->last_name = 'Smith'; $account->legal_entity->type = 'company'; $account->legal_entity->ssn_last_4 = '0000'; $account->tos_acceptance->date = 1466074123; // timestamp $account->tos_acceptance->ip = 123.123.123.123; try { $account->save(); } catch (InvalidRequest $error) { // }
これで、Stripeチームがすべてを確認し、管理パネルに確認済みステータスが表示されます。
https://dashboard.stripe.com/test/applications/users/overview
しかし、これでは十分ではありません。 また、Stripeコマンドはデータエラーを示したり、personal_id_numberなどの追加情報を必要とする場合があります。
チームがデータを確認すると、アカウントが更新されます。 このイベントのwebhookを構成できます。
必須フィールドは、アカウントオブジェクトで説明されます。
$account->verification->fields_needed
Stripeは、データを提供する期限を設定することもできます。 日付がある場合は、プロパティ$ account-> validation-> due_byにあります。
テスト検証のために、Stripeは優れたテスト環境を提供します。 特定のテストカードからの転送を使用して、アカウントの検証の動作に関するさまざまなシナリオをシミュレートできます。 そのようなシナリオの例:
- データは記入されておらず、転送は一切できません。
- 支払いのサイズの制限が機能しました。 これは、翻訳が大きすぎて提供された情報が十分でないとStripeが判断した場合に発生します。 この場合、管理アカウントを無効にします。
- 特定の日付までにデータを入力する必要があるアカウントを切断する。
- アカウント所有者の身元を確認するドキュメントのスキャンをダウンロードします。
- このスキャンの受け入れと拒否。
これらのケースを具体的にシミュレートする方法については、 ここで説明します 。
とにかくすべての状況を処理する必要があります。 私の経験では、アカウントの切断による不意打ちを避けるため、できるだけ多くの情報をすぐにStripeに提供することが最善です。
すべてが正常で、Stripeが管理アカウントを確認したら、APIを使用して転送を有効にするか、自動アカウントを無効にする必要があります-これは同じことです。
https://dashboard.stripe.com/account/transfers
そのため、確認アカウントがあり、送金が含まれており、サプライヤに直接送金できるようになりました。
本があるとしましょう。 サプライヤは50ドルを望んでおり、10ドルのコミッションを自分で求めており、さらに、価格に転送のストライプコミッションを含める必要があります。 現在、Stripeは各転送につき 2.9%+ 30¢ を請求しています。 ユニットから手数料を支払うことにしました。 次に、ユーザーは本に60ドルを支払う必要があります。 私たちの側からは、Stripe委員会に2.04ドルを提供します。
Stripe.jsを使用してトークンを取得し、サーバーから支払いを行います。
$charge = Charge::create([ "amount" => 6000, // "currency" => 'USD', "source" => $token, "application_fee" => 1000, "destination" => $managedAccountId ]);
application_feeプロパティを使用すると、口座から送金する金額を指定できます。 ストライプコミッションは、サプライヤーへの完全な振替を行った場合でも、いずれの場合も口座から引き落とされます。
お金はすぐにサプライヤーの銀行口座に入金されるのではなく、7日に1回引き出されます。 つまり サプライヤーのStripeアカウントに送金し、7日後にリンクされた銀行口座のアカウントに送金します。
追加機能
さらに、Stripeを使用すると、顧客を保存し、支払いを作成するときに任意のメタデータを追加できるため、行われた支払いをナビゲートしやすくなり、より有益な説明のために支払いを行うときに説明を指定できます。 これらはすべて、支払いAPIのドキュメントに記載されています 。
Stripeの統合がお役に立てば幸いです! 記事を補足するのに役立つコメント、質問、説明を喜んでお送りします。
便利なリンク:
Stripeをサポートしている国
トークンを取得するカスタムHTMLフォーム
マネージドアカウント
銀行口座のトークンを取得する
国ごとに必要な銀行情報
国ごとの管理アカウントに必要な法的情報
ストライプの利用規約
精度検証テスト
Webhook
ストライプ価格
Stripe APIリファレンス