Apa yang perlu dilakukan jika pengesahan token akaun rasmi PHP gagal

PHPz
Lepaskan: 2023-04-19 10:36:55
asal
5013 orang telah melayarinya

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.

  1. Ralat konfigurasi Token

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;
Salin selepas log masuk

Hasil cetakan hendaklah sama dengan set Token dalam platform awam. Jika ia berbeza, anda perlu mengubah suai Token dalam kod.

  1. Ralat konfigurasi pelayan

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;
Salin selepas log masuk

Jika pelayan tidak mengembalikan data dengan betul, anda perlu menyemak sama ada terdapat ralat atau masalah logik dalam kod.

  1. Ralat pengesahan token dalam mod selamat

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;
    }
}
Salin selepas log masuk
  1. Tamat masa Token

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;
}
Salin selepas log masuk
Di atas adalah ringkasan saya tentang penyelesaian kegagalan pengesahan Token akaun rasmi PHP. Saya harap ia akan membantu semua orang.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan