ホームページ >バックエンド開発 >PHPの問題 >PHPの非同期通知とはどういう意味ですか?

PHPの非同期通知とはどういう意味ですか?

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2023-06-20 10:44:331320ブラウズ

php の非同期通知は、簡単にメカニズムとして理解できます。このメカニズムは、システム間のデータのやり取りやインターフェースのドッキングを実現するために使用されます。これにより、双方のデータの同期と正確性を確保し、データの更新時期を回避できます。双方の時間間隔が一致しない、支払いは成功しても結果が失敗するなどの問題。

PHPの非同期通知とはどういう意味ですか?

このチュートリアルのオペレーティング システム: Windows 10 システム、php8.1.3 バージョン、Dell G3 コンピューター。

1. PHP 非同期通知とは何ですか?

PHP の非同期通知は、システム間のデータ対話やインターフェースのドッキングを実現するために使用されるメカニズムとして単純に理解できます。もちろん、実際の開発では、どの言語やフレームワークであっても、それぞれ独自の実装方法や特徴があります。

PHP 非同期通知について具体的に言うと、通常、支払いやサードパーティ API などのトランザクションを実行するときに受信者 (つまりサーバー) によって実装されるコールバック メソッド、つまり非同期通知コールバックを指します。

2. PHP 非同期通知の役割

ほとんどのトランザクションでは、多くの場合、両方の当事者を同時に操作する必要があり、両方でデータ更新シーケンスを実行する必要があります。一貫性がなければ、データのセキュリティ上の問題が発生しやすくなります。したがって、システム設計者は、トランザクションの完了後に非同期通知を使用して、双方のデータの同期と正確性を確保する必要があります。

これを視覚化するには、たとえばオンライン ショッピングのトランザクション シナリオを考えてみましょう。ユーザーがオンラインで支払いを行うと、対応する支払い用 QR コードがフロント デスクに表示され、その QR コードがフロント デスクに転送されます。サーバー転送による支払いページ。ユーザーの支払いツールがスキャンして支払いを完了すると、QR コードは確認情報を返し、データベースを更新します。次に、データベースは、トランザクションが成功したかどうかに基づいて、対応するステータス フィードバックをフロント エンドに返し、表示します。

非同期通知機能がない場合、すべての注文ステータスを同期的に更新する必要があり、双方のデータ更新間隔が一致しない場合、決済は成功しても結果が表示されないなどの問題を回避できません。 。

3. PHP 非同期通知の実装方法

PHP 非同期通知の実装方法は、通常、curl ライブラリまたは fsockopen 関数を使用します。具体的な実装方法は次のとおりです。 :

curl ライブラリを使用して非同期通知を実装します:

$url = "https://example.com/notify_url.php"; // 异步通知接口地址
$data = array(
    'order_id' => 001, // 订单号
    'amount' => 100, // 金额
    'status' => 1, // 状态码
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // post请求数据
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时时间
curl_exec($ch);
curl_close($ch);

fsockopen 関数を使用して非同期通知を実装します:

$url = "example.com"; // 服务器域名
$port = 80; // 服务器端口
$path = "/notify_url.php"; // 异步通知接口地址
$data = array(
    'order_id' => 001, // 订单号
    'amount' => 100, // 金额
    'status' => 1, // 状态码
);
$requestBody = http_build_query($data); // 构造post请求数据
$contentLength = strlen($requestBody); // 请求主体长度
$header = "POST {$path} HTTP/1.1\r\n";
$header .= "Host: {$url}\r\n";
$header .= "Content-type: application/x-www-form-urlencoded\r\n";
$header .= "Content-length: {$contentLength}\r\n";
$header .= "Connection: close\r\n\r\n";
$header .= $requestBody; // 拼接http头和请求主体
$fp = fsockopen($url, $port, $errno, $errstr, 30); // 建立socket连接
if ($fp) { // 发送请求并获取返回结果
    fwrite($fp, $header);
    stream_set_timeout($fp, 30);
    $response = stream_get_meta_data($fp);
    fclose($fp);
}

以上がPHPの非同期通知とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。