インターネットビジネスでは、支払い、チャージ、返金、現金引き出しなどの資金取引を伴うシナリオが不可欠です。これには、システムが非同期通知を実行して双方にトランザクション結果を通知できる必要があります。このようなシナリオでは、非常に人気のあるバックエンド開発言語として PHP が広く使用されています。この記事では、PHP を使用して非同期通知を実装する方法について説明します。
1. 非同期通知とは何ですか?
ユーザーが取引を実行すると、支払い側または受け取り側は取引成功の通知を受け取り、双方が取引結果をタイムリーに理解できるようになります。このシナリオで同期通知が使用されると、トランザクション時間が長くなり、ユーザー エクスペリエンスが低下し、トランザクションが失敗する可能性があり、トランザクションの信頼性に影響する可能性があります。したがって、非同期通知、つまりコールバック関数を使用してトランザクション結果を通知します。
2. PHP で非同期通知を実装する手順
支払いシナリオを例として、PHP を使用して非同期通知を実装する方法を紹介します。
ユーザーがアプリケーションで支払いリクエストを開始すると、バックエンドは支払いリクエストを支払いプラットフォームに送信し、支払いプラットフォームから応答を受け取ります。支払いプラットフォームにアクセスし、応答から支払い URL を取得します。
PHP サンプル コード:
$data = [ 'amount' => '10.00', 'body' => '测试订单', 'channel' => 'alipay_wap', 'currency' => 'cny', 'return_url' => 'http://example.com/return', 'notify_url' => 'http://example.com/notify', ]; $result = curl_post('https://api.payment.com/payments', $data); $payment_url = isset($result['payment_url']) ? $result['payment_url'] : '';
cURL 経由で POST リクエストを送信し、決済プラットフォーム インターフェイスを呼び出して送信します。支払いプラットフォーム 支払いリクエストを送信し、支払いプラットフォームから返される応答結果を取得します。
PHP サンプル コード:
function curl_post($url, $data = [], $header = []) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json', ) + $header); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); }
支払いが成功または失敗した場合のインターフェイスに戻り URL を設定します。 、バックグラウンドでの支払い結果がアプリケーションに通知され、取引ステータスの照会にも使用できます。
PHP サンプル コード:
$data = [ 'amount' => '10.00', 'body' => '测试订单', 'channel' => 'alipay_wap', 'currency' => 'cny', 'return_url' => 'http://example.com/return', 'notify_url' => 'http://example.com/notify', ];
notify_url パラメーターは、支払い結果を受信するためのアドレスと、支払いプラットフォームによる非同期通知を送信するためのアドレスを渡すために使用されます。
決済プラットフォームがユーザーの支払いリクエストを受信してトランザクションを完了すると、指定されたnotify_urlに非同期通知を送信して通知します。支払い結果。そのため、コールバック関数内で署名の検証やビジネスロジックの処理を行い、最後に確認情報を返す必要があります。
PHP サンプル コード:
function notify() { $data = $_POST; $time_now = time(); // 验证签名 if (!openssl_verify(json_encode($data), base64_decode($data['signature']), $public_key)) { return 'false'; } // 更新订单状态 update_order($data['order_id']); return 'success'; }
支払いプラットフォームから送信される結果は信頼性を保証する必要があるため、支払いプラットフォームによって返された結果 データは検証されています。署名検証プロセスでは、支払いプラットフォームによって提供された公開キーを使用して署名を検証し、それが支払いプラットフォームによって発行された正当な結果であることを確認する必要があります。
PHP サンプル コード:
if (!openssl_verify(json_encode($data), base64_decode($data['signature']), $public_key)) { return 'false'; }
支払いが成功した後、注文のステータス情報を更新する必要があります。アプリケーションは注文の実際の状況を把握できます。このステップでは、ビジネス ロジックを呼び出して更新できます。
PHP サンプル コード:
function update_order($order_id) { // 调用业务逻辑处理订单状态更新 }
処理が完了したら、確認情報を支払いプラットフォームに返して表示する必要があります。支払い結果が処理され、リターン コード (200 など) が処理が成功したことを示していることを確認します。
PHP サンプル コード:
return 'success';
3. 非同期通知の脆弱性を回避する
非同期通知を使用するプロセスでは、セキュリティを確保するために、次の脆弱性:
4. まとめ
この記事では、PHP を使用して非同期通知を実装する手順を紹介し、セキュリティ上の注意事項を提案します。非同期通知は金融取引のシナリオでは特に重要であり、セキュリティに特別な注意を払う必要があります。抜け穴やエラーを避けるために、署名、反復処理、セキュリティ リスクなどの問題を設計中に慎重に考慮する必要があります。
以上がPHP は非同期通知を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。