Rumah > Soal Jawab > teks badan
在授权成功的页面刷新一次就会出报错
{"errmsg":"code been used, hints: [ req_id: Rwakxa0262th10 ]","errcode":40163}
PHP中文网2017-04-18 10:57:04
Saya akan menyelesaikan masalah ini.
Ia mungkin berlaku dalam beberapa ketika.
Apabila membenarkan WeChat, WeChat secara rasmi membenarkan anda menggunakan alamat panduan (A.action) untuk mengubah hala ke alamat lain (B.action Anda boleh mendapatkan kod di alamat kedua (B.action). tukar untuk access_token, refresh_token, dsb. Dalam kebanyakan kes, maklumat pengguna boleh diperoleh buat kali pertama, tetapi apabila memuat semula untuk kali kedua, ia menggesa errcode":40163,"errmsg":"kod telah digunakan. Ini bermakna bahawa kod telah digunakan sekali. Dokumentasi rasmi menjelaskan bahawa kod itu hanya boleh digunakan sekali. Sudah tentu, tidak kira sama ada anda telah memuat semula atau tidak, selagi anda menggunakan kod yang sama dan ia bukan kali pertama anda menggunakannya, ralat di atas akan dilaporkan.
Beginilah cara saya menyelesaikannya dalam B.action, tentukan dahulu sama ada access_token dan refresh_token yang diperolehi oleh kod itu wujud dalam sesi (sebaik-baiknya merangkumkannya ke dalam objek entiti, yang lebih mudah untuk dinilai tidak wujud, ini bermakna kod itu digunakan buat kali pertama (halaman telah ditutup sebelum ini), jika wujud, pergi ke sesi untuk mendapatkan akses_token atau refresh_token secara terus. Gunakan access_token dan refresh_token yang diperoleh untuk mendapatkan maklumat pengguna.
Saya harap apa yang saya katakan dapat membantu anda!
PHP中文网2017-04-18 10:57:04
Gesaan sangat jelas bahawa code
telah digunakan dan code
hanya boleh digunakan sekali.
PHPz2017-04-18 10:57:04
Terdapat masalah dengan bahagian pemprosesan kebenaran anda Selepas kebenaran diperoleh, maklumat pengguna disimpan dalam sesi
Anda tidak disimpan dalam sesi selepas kebenaran halaman, tiada maklumat pengguna dalam sesi, tetapi alamatnya masih ada di sana Ia mempunyai parameter kod, jadi saya mengambil kod untuk mendapatkan kebenaran, tetapi kod itu telah digunakan, dan kod itu hanya boleh digunakan sekali <. 🎜>
天蓬老师2017-04-18 10:57:04
Itu sahaja parameter yang ditentukan oleh URI untuk OAuth2.0 termasuk jenis respons, kod kebenaran, keadaan, dll. Anda memanggil antara muka keizinan WeChat OAuth2.0 dan memasukkan pelbagai aplikasi rahsia untuk mendapatkan kod kebenaran , untuk apa kod ini? Ia digunakan oleh pihak ketiga (iaitu, anda, pengguna membenarkan anda mengakses sumbernya di WeChat) untuk menukar AccessToken dengan pelayan kebenaran OAuth Ia juga digunakan untuk memanggil parameter yang digunakan oleh URI kebenaran yang saya nyatakan pada mulanya , dalam spesifikasi OAuth2.0, parameter yang dikembalikan oleh URI termasuk AccessToken, RefreshToken, dll. Dengan AccessToken ini, anda boleh menggunakannya untuk mengesahkan dengan pelayan sumber untuk mendapatkan sumber pengguna OAuth2.0 menetapkan bahawa untuk Safe, kod kebenaran ini hanya boleh ditukar dengan AccessToken sekali.
Jadi, bagaimanakah WeChat melaksanakannya? pengguna mengesahkan kebenaran, antara muka kebenaran WeChat masih dipanggil pada masa ini Selepas pelayan kebenaran WeChat mengesahkan keizinan, ia akan mengubah hala permintaan ke uri ubah hala yang anda tetapkan, dan menambah kod parameter URL dan menyatakan ini kod Ia adalah kod keizinan, jadi pelayan anda akan menerima kod keizinan melalui ubah hala ini, dan anda boleh menggunakan kod ini untuk menukar AccessToken, dan kemudian mendapatkan pelbagai sumber pengguna dalam WeChat (seperti id terbuka).
Jadi mengapa anda mengatakan bahawa anda melaporkan ralat semasa memuat semula, saya benar-benar mengesyaki bahawa anda memuat semula URL pelayan anda sendiri, dan kemudian kod anda memperoleh kod yang sama sekali lagi, dan sudah tentu, kod ralat itu telah digunakan semula.
阿神2017-04-18 10:57:04
Beri perhatian sama ada dua permintaan berturut-turut (menggunakan kod yang sama sebagai pertukaran untuk maklumat pengguna) mengakibatkan ralat ini berlaku pada kali kedua kod digunakan
ringa_lee2017-04-18 10:57:04
Adakah anda telah mengklik WeChat Pay? Butang Bayar hanya boleh diklik sekali selepas membuat pembayaran, jika anda membatalkan pembayaran dan klik Bayar sekali lagi, anda hanya boleh keluar dari halaman semasa dan masuk semula.