では、中小企業のオーナーは何をすべきか?そこには、Braintree Payment Solutionsが登場します。PCIコンプライアンスの負担を最小限に抑えるための2つのソリューションを提供しています:透明リダイレクトとBraintree.js。 Braintreeも他のPCI DSS準拠のサービスプロバイダーも、どのSAQに記入するか、またはシステムが準拠しているかどうかを伝えることはできないことに言及する必要があります。しかし、彼らは業界をリードするQSAであるセキュリティメトリックと組み合わせて、すべての顧客がPCIコンプライアンスを達成および維持するのに役立つコストフリーソリューションを提供しています。そして、彼らの経験では、透明なリダイレクトまたはbraintree.jsを使用している顧客は通常、SAQ Aよりもはるかに関与していない(したがって費用がかかる)SAQ Aに記入することができました。詳細はこちらをご覧ください。
しかし、十分な背景。いくつかのコードを書きましょう。
この記事は、透明なリダイレクト方法に焦点を当てます。最初にしなければならないことは、サーバー側のAPIキーを取得するためにBraintreeに向かうことです。制作アカウントのない人のために、ブラウザをBraintree Sandboxに向けて、テストアカウントにサインアップしてください。ログインして、「アカウント - > APIキー」をクリックします。次に、[新しい生成]ボタンをクリックし、最後に、新しく生成されたAPIキーの秘密キー列の[表示]をクリックします。 Braintreeクライアントライブラリを構成するために必要なすべての情報が含まれる次の画面に表示されます。
さまざまな言語で構成コードを生成するツールもあることがわかります。
今度は、実際のBraintree PHPクライアントライブラリをインストールする時が来ました。次のコマンドを実行することで作曲家とそれを行うことができます:
composer require braintree/braintree:*
SAQ DまたはSAQ Aに記入する必要があるかどうかを判断するのに役立つ主な要因の1つは、クレジットカードデータがシステムを介して送信されるかどうかです。また、典型的なサーバーからサーバー(S2S)モデルの最初に、Webサーバーはお客様のブラウザに支払いフォームを送信します。フォームに記入した後、顧客は送信を押します。これはデータをWebサーバーに投稿します。これにより、そのデータの一部が検証と処理のためにBraintreeに転送されます。それは次のようになります:
私たちのベルトの下に理論があるので、先に進んでコードを書きましょう。完全なバージョンを見たい人は、githubでそれを見つけることができます。
最初にやろうとしていることは、非常に基本的なHTMLフォームを作成して、処理のためにBraintreeに送信できるようにすることです。機能に焦点を合わせることができるように、これを可能な限りシンプルにします。
composer require braintree/braintree:*
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
それを行う方法を説明する前に、明確にするために、サンプルコードのすべてのPHPとHTMLを同じファイルに入れたことに言及します。セットアップコードが私のプロジェクトのブートストラップファイルに入ること、およびフォーム処理コードがコントローラーアクションまたは他の個別のファイルに移動することを言うことは言うまでもありません。わかりました、十分に謝罪します - このことをセットアップしましょう!
最初の行では、追加のファイルを明示的に含めることなく、ComposerのAutoloaderを利用してBraintreeのライブラリを使用することができます。うまくいけば、次の4行が馴染みのあるように見えることを願っています。なぜなら、前のセクションで紹介したサンドボックスコントロールパネルAPIキーツールから逐語的にコピーされたからです。明らかに、これを独自のコントロールパネルアカウントのコードに置き換えます。
<span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
composer require braintree/braintree:*
私たちがしなければならない他の唯一のことは、Braintreeがフォームを送信した後に顧客をリダイレクトするURLのハッシュされた表現を含む隠された入力を作成することです。それらを指定できるようにします。たとえば、これはトランザクション額を入力する可能性があります。スタイルの問題として、私はユーザーにエラーを表示して再提出する機会を与えることができるように、支払いフォーム自体に戻るURLを設定するのが好きです。これがどのように見えるかということです:
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
明らかに私はここで量を強くコードしていますが、本番アプリでは、サーバー側のロジックを使用してこれを生成するか、不特定の合計で寄付フォームの場合、フォームフィールドを作成しますユーザーが提供できるようにします。また、通常、「決済のために送信」オプションをtrueに設定します。それ以外の場合は、このトランザクションは単に
になります今、私はこれを私のフォームに隠しフィールドとして追加する必要があります:
<span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
データをBraintreeに提出する準備ができたので、実際の透過リダイレクト応答を処理するためのコードを追加する必要があります。
<span><span><?php </span></span><span> <span>require('vendor/autoload.php'); </span></span><span> </span><span> <span>Braintree_Configuration<span>::</span>environment('sandbox'); </span></span><span> <span>Braintree_Configuration<span>::</span>merchantId('YOUR_MERCHANT_ID'); </span></span><span> <span>Braintree_Configuration<span>::</span>publicKey('YOUR_PUBLIC_KEY'); </span></span><span> <span>Braintree_Configuration<span>::</span>privateKey('YOUR_PRIVATE_KEY'); </span></span><span> </span><span> <span>?></span></span>
今、私たちがやったことを把握しましょう。ユーザーが送信ボタンを押すと、フォームがBraintreeに直接投稿され、すべての顧客の機密情報がPCI CSS準拠のサーバーに安全に保存されます。次に、HTTP 303リダイレクトがブラウザに送信され、ユーザーは$ TR_DATA変数を生成するときに指定したURLにユーザーを送信し、URLのクエリ文字列にいくつかのパラメーターを追加します。
データが正常に送信されると、これらのパラメーターの1つはhttp_statusであり、すべてがBraintreeのサーバーでスムーズに実行されている場合、200に設定されます。しかし今のところ、支払い情報をシステムに正常に送信した場合、このIFステートメント内のコードのみを実行するようにしています。次に起こることは、透明なリダイレクトからクエリ文字列を取得し、それをBraintreeに送り返してトランザクションを完了する必要があることです。そのため、別のライブラリ関数(braintree_transparentRedirect ::確認)を実行し、Braintreeに先に進んで支払いを処理するように指示するために、URLクエリ文字列を提供します。それが起こると、Braintreeはスクリプトを結果のオブジェクトに送信します。内部的には、そのオブジェクトはbraintree_result_errorまたはbraintree_result_successfulのいずれかにすることができますが、両方のオブジェクトにはブール成功プロパティがあるため、トランザクションが成功したかどうかを確認できます。
おそらく、トライ/キャッチブロックで確認全体をラップしたことにも気付きました。同じページを使用してフォームを表示して処理することの1つの欠点は、結果を1回しか確認できないことです。つまり、トランザクションに失敗した後に誰かがリロードボタンにぶつかった場合、コードは期限切れのクエリ文字列を再構成しようとし、Braintreeは例外をスローします。
必要なものがすべて揃っているので、先に進んでテストトランザクションを実行できます。サンドボックスの使用に関する完全なドキュメントはこちらにありますが、本当に興奮してすぐにトランザクションを成功させたい場合は、「カードの名前」41111111111111(15枚の後に411111111111)に名前を入力してください。 「カード番号」として、CVVボックスの123、および将来の日付は有効期限として。すべてがうまくいった場合は、サンドボックスに戻り、「Advanced Search」の下で「トランザクション」をクリックし、「検索」ボタンをクリックした後、最初の成功したトランザクションを参照してください。派手になる
API名は、フォーム入力の名前属性で参照するものです。ディスプレイ名は参照用です。トランザクションでBraintreeにカスタムフィールドの値を保存するか、単にサーバーに渡すかどうかを指定できます。
それを収集することは、単に次のフィールドをフォームに追加する問題です。
Braintreeコントロールパネルにカスタムフィールドを追加せずにそれを試みた場合、検証エラーがトリガーされます。
検証といえば、TRは支払いフォームのサーバー側の検証を複雑にすることができます。顧客のメールアドレスが要求したかったとしましょう。トランザクションがすでに確認されるまで、ユーザーが空白のままにしていたことはわかりません。私が見つけた解決策は、TRスクリプトの成功ブロックで検証を実行し、検証が渡されない場合にトランザクションを無効にすることです。そのため、次のようにコードが変更されます
ご覧のとおり、ローカル検証が渡されない場合、BrainTree_Result_SuccessオブジェクトからのトランザクションIDを使用して、クライアントライブラリを使用してトランザクションを無効にします。最後に、基本的な例では、すべてのフィールドには、Braintreeがサーバーから隠している機密性の高いクレジットカードデータが含まれているため、ユーザーのフォームフィールドの再埋設を気にしませんでした。しかし、いくつかの顧客データを追加したので、Braintree結果オブジェクトからのデータを使用して、これらのあまり感度の低いフィールドを事前に埋めることができます。私のgithubサンプルに完全なコードを見ることができますが、何が起こっているのかを理解するための秘trickは、braintree_result_successオブジェクトがトランザクションプロパティにユーザーがサビされたフォームデータを保存しているのに対し、braintree_result_errorはそれをparamsプロパティに保存していることを知ることです。たとえば、最初の名前変数は$ result-> transaction-> customer ['firstName']で見つかりますが、トランザクションが成功したときに、失敗したトランザクションは$ result-> params ['transaction'] ['に保存されます。 customer '] [' firstName ']。
Braintreeの透明なリダイレクトは、アプリケーションの機密性の高い顧客データへの露出を最小限に抑える方法の1つです。お客様のクレジットカード情報と同じフォームに関する支払い関連情報。
次回は、他の巧妙なソリューションをご覧ください:braintree.js。
トランザクションのセキュリティを強化するために、支払い処理に透明なリダイレクトが使用されます。顧客の機密データを、商人のサーバーをバイパスして、支払いゲートウェイに直接送信できます。これにより、データ侵害のリスクが軽減され、商人が支払いカード業界のデータセキュリティ基準(PCI DSS)に準拠するのに役立ちます。透明なリダイレクトである最適化は、HTTP要求の数を減らすのに役立ち、それによりサイトの負荷速度が向上します。ユーザーがWebページにアクセスすると、サーバーはステータスコードを使用してHTTP応答を送信します。ステータスコードがリダイレクトを示している場合、ブラウザは追加のHTTP要求を行う必要があります。これにより、読み込み時間が遅くなる可能性があります。透明なリダイレクトは、この余分なステップを排除し、ウェブサイトをより速く、より効率的にすることができます。 透明なリダイレクトを実装するには、技術的な知識が必要です。 WebサイトをPayment GatewayのAPIと統合する必要があります。これには、顧客の支払い情報をゲートウェイに直接投稿するフォームをWebサイトに設定することが含まれます。次に、ゲートウェイはトランザクションを処理し、ウェブサイトへの応答を送り返します。 透明リダイレクトを使用することの主な利点はセキュリティの強化と改善されていますウェブサイトのパフォーマンス。マーチャントのサーバーをバイパスすることにより、透明なリダイレクトがデータ侵害のリスクを減らします。また、HTTPリクエストの数を減らすことにより、ウェブサイトの読み込み速度を改善するのにも役立ちます。透明なリダイレクトを使用することの利点は何ですか?
以上が透明なリダイレクトをブレインツリーとともにリダイレクトしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。