La notification asynchrone de PHP peut être simplement comprise comme un mécanisme. Ce mécanisme est utilisé pour réaliser l'interaction des données ou l'amarrage d'interface entre les systèmes. Il peut garantir la synchronisation et l'exactitude des données des deux parties et éviter des problèmes tels que le paiement qui surviennent lors du paiement. les intervalles de temps de mise à jour des données des deux parties sont incohérents. Des problèmes tels que le succès, mais le résultat montre un échec.
Le système d'exploitation de ce tutoriel : système Windows 10, version php8.1.3, ordinateur Dell G3.
1. Qu'est-ce que la notification asynchrone PHP ?
La notification asynchrone PHP peut être simplement comprise comme un mécanisme utilisé pour réaliser une interaction de données ou un ancrage d'interface entre des systèmes. Bien entendu, dans le développement réel, quel que soit le langage ou le framework dont il s'agit, il a ses propres méthodes et caractéristiques de mise en œuvre.
En parlant spécifiquement de notification asynchrone PHP, elle fait généralement référence à une méthode de rappel mise en œuvre par le destinataire (c'est-à-dire le serveur) lors de la réalisation de transactions telles que le paiement et l'API tierce - rappel de notification asynchrone.
2. Le rôle de la notification asynchrone PHP
Pour la plupart des transactions, il est souvent nécessaire d'opérer les deux parties en même temps, et la séquence de mise à jour des données aux deux extrémités doit être cohérente, sinon elle sera facilement causer des problèmes de sécurité des données. Par conséquent, les concepteurs de systèmes doivent utiliser des notifications asynchrones une fois la transaction terminée pour garantir la synchronisation et l'exactitude des données des deux parties.
Représentez-le, par exemple, considérons un scénario de transaction d'achat en ligne. Lorsque l'utilisateur effectue un paiement en ligne, le code QR de paiement correspondant apparaîtra à la réception et le code QR sera transféré à la page de paiement via le serveur. , et l'utilisateur le fera. Une fois que l'outil de paiement aura scanné et terminé le paiement, le code QR renverra les informations de confirmation et mettra à jour la base de données. Ensuite, la base de données renverra le retour d'état correspondant au frontal pour affichage selon que la transaction a réussi ou non.
S'il n'y a pas de fonction de notification asynchrone, tous les statuts de commande doivent être mis à jour de manière synchrone, ce qui signifie que des problèmes tels qu'un paiement réussi mais un échec d'affichage des résultats ne peuvent être évités lorsque les intervalles de temps de mise à jour des données entre les deux parties sont incohérents.
3. Implémentation de la notification asynchrone PHP
L'implémentation de la notification asynchrone PHP peut généralement utiliser la bibliothèque curl ou la fonction fsockopen. L'implémentation spécifique est la suivante :
Utilisez la bibliothèque curl pour implémenter la notification asynchrone :
$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);
Utilisez la fonction fsockopen pour implémenter la notification asynchrone :
$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); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!