Penyelesaian kepada kegagalan pengesahan Token akaun awam PHP
Dalam proses membangunkan akaun awam WeChat, kami sering menghadapi kegagalan pengesahan Token Keadaan ini biasanya kerana konfigurasi Token salah atau Pelayan WeChat tidak boleh mengakses pelayan. Artikel ini akan memperkenalkan beberapa kegagalan pengesahan Token biasa dan penyelesaiannya.
Apabila menyediakan Token, kami perlu menulis Token ke dalam kod kami dan mengkonfigurasinya pada platform awam WeChat. Jika Token yang kami isi tidak konsisten dengan Token dalam kod, pengesahan Token akan gagal.
Penyelesaian kepada ralat konfigurasi Token:
Pertama, kami perlu mengesahkan sama ada Token yang kami isi pada platform awam adalah sama dengan Token dalam kod. Jika ia berbeza, anda perlu mengubah suainya kepada Token yang sama.
Kedua, kita perlu menyemak sama ada Token dalam kod ditetapkan dengan betul. Anda boleh menyemak dengan mencetak Token dalam kod, seperti yang ditunjukkan di bawah:
define("TOKEN", "XXXXXXXXXXXXXX"); echo TOKEN;
Hasil cetakan hendaklah sama dengan set Token dalam platform awam. Jika ia berbeza, anda perlu mengubah suai Token dalam kod.
Semasa pengesahan Token, pelayan WeChat akan memulakan permintaan HTTP GET ke pelayan kami Permintaan itu mengandungi semua maklumat yang kami ada pada orang awam WeChat Isikan tiga parameter Token, cap waktu dan nonce. Pelayan kami perlu melakukan pemprosesan penyulitan berdasarkan tiga parameter ini dan mengembalikannya kepada pelayan WeChat.
Jika pelayan kami tidak boleh diakses oleh pelayan WeChat atau respons pelayan tidak betul, pengesahan Token akan gagal.
Penyelesaian kepada ralat konfigurasi pelayan:
Pertama, kami perlu mengesahkan sama ada pelayan kami telah membuka port 80 dan tembok api tidak menyekat akses kepada pelayan WeChat.
Kedua, kita perlu menyemak sama ada kod sebelah pelayan disediakan dengan betul. Anda boleh menyemak dengan mencetak data yang dikembalikan oleh pelayan dalam kod, seperti yang ditunjukkan di bawah:
$echostr = $_GET["echostr"]; echo $echostr;
Jika pelayan tidak mengembalikan data dengan betul, anda perlu menyemak sama ada terdapat ralat atau masalah logik dalam kod.
Jika akaun rasmi kami mempunyai mod selamat dihidupkan dalam tetapan, maka kami perlu melakukan pemprosesan khas pada token. Dalam mod selamat, pelayan WeChat akan memulakan permintaan HTTP POST kepada pelayan kami. Permintaan itu mengandungi empat parameter Token, cap waktu, nonce dan msg_signature yang kami isikan pada platform awam WeChat.
Penyelesaian kepada ralat pengesahan Token dalam mod selamat:
Pertama, kami perlu mengesahkan bahawa pelayan kami boleh mengendalikan permintaan HTTP POST seperti biasa. Kedua, kita perlu melakukan pemprosesan khas pada Token Contoh kod adalah seperti berikut:
$token = "XXXXXXXXXXXXXX"; // Token和公众平台上设置一致 $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $msg_signature = $_GET["msg_signature"]; $encrypt_type = (isset($_GET['encrypt_type']) && ($_GET['encrypt_type'] == "aes")) ? "aes" : "raw"; // 兼容明文模式与安全模式 if ($msg_signature) { $signature = $_GET["signature"]; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = $encrypt_type == 'aes' ? $tmpStr . $_GET["encrypted"] : $tmpStr; $signatureLocal = sha1($tmpStr); if ($signature == $signatureLocal) { if ($encrypt_type == 'aes') { // 对密文进行解密 } $echostr = $_GET["echostr"]; echo $echostr; } }
Token mempunyai masa tamat akaun rasmi melebihi masa tamat tempoh Token, maka Token kami akan menjadi tidak sah, menyebabkan pengesahan Token gagal.
Penyelesaian kepada tamat masa Token:
Kita boleh menetapkan masa tamat tempoh Token dalam kod, contohnya, tetapkannya kepada 7200 saat (2 jam Contoh kod adalah seperti berikut:
define("TOKEN", "XXXXXXXXXXXXXX"); define("EXPIRE_TIME", 7200); $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $signature = $_GET['signature']; if (time() - $timestamp > EXPIRE_TIME) { die('Token expired'); } $tmpArr = array(TOKEN, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if ($tmpStr == $signature) { $echostr = $_GET['echostr']; echo $echostr; }
Atas ialah kandungan terperinci Apa yang perlu dilakukan jika pengesahan token akaun rasmi PHP gagal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!