Cara memperoleh dan menyimpan kredensial panggilan antarmuka di WeChat, saya akan memperkenalkannya kepada Anda di bawah ini
1. Penjelasan
* Silakan merujuk ke dua artikel pertama untuk instruksi terperinci.
*Artikel ini dibagi menjadi tiga bagian:
Peran Antarmuka Panggilan Kredensial Access_Token dan jelaskan cara memperoleh kredensial panggilan antarmuka Access_Token
Cara mengimplementasikan implementasi "server kontrol pusat" yang disebutkan dalam dokumen weChat untuk menyimpan access_token
* Di akhir artikel ini, semua kode sumber demonstrasi termasuk tiga artikel pertama dalam artikel ini akan diberikan.
Mengapa Anda perlu memperoleh dan menyimpan kredensial panggilan antarmuka Access_Token
• Mulai Pengembangan - Dapatkan Kredensial Panggilan Antarmuka
◦Dokumen Alamat: http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html
• Dokumen situs web resmi memberikan penjelasan berikut:
◦Access_Token adalah tiket unik secara global dari akun resmi. Access_Token diperlukan saat memanggil setiap antarmuka akun resmi. Pengembang perlu menyimpannya dengan benar. Penyimpanan Access_Token harus mempertahankan setidaknya 512 ruang karakter. Periode validitas Access_Token saat ini 2 jam dan perlu disegarkan secara teratur. Akuisisi berulang akan menyebabkan akses_token yang Anda peroleh terakhir kali menjadi tidak valid.
•memahami:
◦ Kami dapat dengan mudah membaca dokumen dan menemukan bahwa banyak fungsi lanjutan, seperti: menu khusus, manajemen materi, manajemen pengguna, manajemen akun dan fungsi canggih lainnya, memiliki parameter "? Access_Token = token" di tautan untuk permintaan. Ini adalah parameter panggilan global. Backend WeChat perlu menentukan identitas berdasarkan parameter ini untuk memastikan keamanan akun resmi WeChat kami.
◦ Dalam perintah untuk mencegah pengecualian beban server WeChat disebabkan oleh kesalahan program di akun resmi, secara default, antarmuka panggilan dari setiap akun resmi tidak dapat melebihi batas tertentu. Di sini, WeChat dibatasi hingga 2.000 kali sehari. Jadi, jika kita ingin sering memanggil parameter ini, kita perlu menyimpannya secara manual oleh pengembang, dan setiap akses_token valid selama 2 jam.
Dapatkan Interface Call Credential Access_Token
• Dokumen situs web resmi memberikan penjelasan berikut:
◦Interface Deskripsi Permintaan Panggilan
Metode Permintaan HTTP: Dapatkan
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret
■ Kembali ke deskripsi
Dalam keadaan normal, WeChat akan mengembalikan paket JSON berikut ke akun resmi:
{"access_token": "access_token", "Expires_in": 7200}
Ketika kesalahan terjadi, WeChat akan mengembalikan kode kesalahan dan informasi lainnya. Contoh paket JSON adalah sebagai berikut (contoh ini adalah kesalahan appid yang tidak valid):
{"errcode": 40013, "errmsg": "appid tidak valid"}
•memahami:
◦SEPAT Permintaan, metode ini dapat diimplementasikan secara langsung secara lokal. Karena itu hanya permintaan Get normal, mirip dengan mengakses URL. Oleh karena itu, Anda tidak perlu mengunggah bagian kode ini ke server untuk beroperasi secara langsung.
Protokol Protokol Permintaan HTTP adalah permintaan GET, yang berarti bahwa kita perlu mendapatkan aliran pengembalian melalui permintaan GET, dan aliran pengembalian dalam bentuk JSON. Saat menelepon, kita perlu membawa tiga parameter: Grant_Type, Appid, dan Secret. Di antara mereka, Appid dan Secret adalah parameter utama dari akun resmi WeChat kami, yang telah dijelaskan dalam artikel sebelumnya. Hasil pengembalian dibagi menjadi dua jenis: hasil yang benar dan salah. 【Baidu: json】
◦ Dalam fakta, kita dapat secara langsung memasukkan contoh yang diberikan oleh dokumen di bilah alamat: https://api.weixin.qq.com/cgi-bin/token? grant_type = client_credential & appid = appid & secret = appsecret, kita akan melihat pesan seperti ini: "{" errcode ": 40013," errmsg ":" Petunjuk appid tidak valid: [pqkl0120ic11] "}", karena ini adalah permintaan yang tidak valid, hasilnya dikembalikan.
◦Ketika kami mengganti dua parameter di atas dengan nomor uji kami appid dan appsecret, kami akan melihat pesan berikut: "{" access_token ":" xrllr3fnf ... badamio "," kedaluwarsa_in ": 7200}", yang berarti akuisisi yang berhasil.
◦ Sekarang kami mendapatkan aliran kembali melalui kode Java dan mendapatkan access_token.
•menyelesaikan
private static final long MAX_TIME = 7200 * 1000;// WeChat allows maximum Access_token validity time (ms) private static final String TAG = "WeixinApiTest";// TAGprivate static final String APPID = "wx889b****b3666b0b8";// APPIDprivate static final String SECERT = "6DA7676 *** F0A9F15FBF06027856BB"; // Kunci Rahasia/**Kasus uji ini menunjukkan cara mendapatkan access_token. * Access_Token adalah tiket unik secara global dari akun resmi. Access_Token diperlukan saat memanggil setiap antarmuka akun resmi. */@Testpublic void getAccess_token () melempar ioException {// menjahit tautan httpsurl yang diperlukan oleh string API urlString = "https://api.weixin.qq.com/cgi--bin/token?grant_type=client_credential.cappid=" + " +" + " +" +prant_type. // Buat URL URL ReqUrl = URL baru (URLString); // Dapatkan tautan httpsurlConnection httpsconn = (httpsurlConnection) reqUrl .openconnection (); // Dapatkan aliran input koneksi untuk membaca respons konten inputStreamReader isr = new InputStreamReader (httpsconn.getInputStream ()); // Baca konten respons server dan tampilkan char [] chars = char baru [1024]; String reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut += string baru (chars, 0, len); } isr.close (); / * * Konversi JSON ke Javabean. Jar pihak ketiga diperkenalkan: GSON */ GSON GSON = GSON baru (); // Konversi JSON yang diperoleh menjadi kacang di Java // Catatan: Access_Token Access_Token adalah Javabean yang dibuat dengan sendirinya. Access_token access_token = gson.fromjson (reslut, access_token baru (). GetClass ()); if (access_token.getAccess_token ()! = null) {System.out.println ("Access_Token yang diperoleh adalah:" + access_token.getAccess_token ()); System.out.println ("Waktu yang valid dari Access_Token adalah:" + access_token.getExpires_in () + "s"); } else {System.out.println (tag + "Gagal mendapatkan access_token, silakan periksa"); }} Simpan antarmuka panggilan kredensial akses_token
•Pikiran
Simpan Access_Token yang diperoleh dan waktu saat ini dalam file. Saat mengekstraksi, tentukan perbedaan waktu antara waktu saat ini dan waktu yang dicatat dalam penyimpanan. Jika lebih besar dari max_time, peroleh kembali, dan ganti konten yang diakses yang diperoleh dalam file. Jika kurang dari max_time, langsung dapatkan.
•menyelesaikan
/ * * Metode ini mengimplementasikan akuisisi access_token, simpan dan hemat hanya 2 jam akses_token. Jika melebihi dua jam, peroleh kembali; Jika tidak melebihi dua jam, dapatkan secara langsung. Metode ini tergantung pada *: string statis publik getAccessToken (); * * Ide: Simpan akses_token yang diperoleh dan waktu saat ini dalam file, * Saat mengekstraksi, tentukan perbedaan waktu antara waktu saat ini dan waktu yang dicatat dalam penyimpanan. Jika lebih besar dari max_time, peroleh kembali, dan simpan akses yang diperoleh ke file untuk mengganti konten asli*, dan jika kurang dari max_time, dapatkan secara langsung. */ @Test public void getsavedAccess_token () melempar ioException {gson gson = new gson (); String maccess_token = null; // access_token akan diperoleh; File file = file baru ("temp_access_token.temp"); // lokasi tempat akses_token disimpan // jika file tidak ada, buat if (! File.exists ()) file.createNeWfile (); // Jika ukuran file sama dengan 0, itu berarti digunakan untuk pertama kalinya, dan masukkan access_token if (file.length () == 0) {maccess_token = getAccessToken (); FileOutputStream fos = new FileOutputStream (file, false); // append access_token at = new access_token (); at.setAccess_token (maccess_token); at.setexpires_in (System.CurrentTimeMillis () + ""); String json = gson.toJson (at); fos.write ((json) .getbytes ()); fos.close (); } else {// Baca file konten fileInputStream fis = new fileInputStream (file); byte [] b = byte baru [2048]; int len = fis.read (b); String mjsonaccess_token = string baru (b, 0, len); // Baca file konten access_token access_token = gson.fromjson (mjsonaccess_token, access_token baru (). GetClass ()); if (access_token.getExpires_in ()! = null) {long saveTime = long.parselong (access_token.getExpires_in ()); long nowtime = system.currentTimemillis (); Long RemianTime = Nowtime - Savetime; // System.out.println (Tag + "Perbedaan Waktu:" + RemianTime); if (remiantime <max_time) {access_token at = gson.fromjson (mjsonaccess_token, access_token baru (). getClass ()); maccess_token = at.getAccess_token (); } else {maccess_token = getAccessToken (); FileOutputStream fos = new FileOutputStream (file, false); // append access_token at = new access_token (); at.setAccess_token (maccess_token); at.setexpires_in (System.CurrentTimeMillis () + ""); String json = gson.toJson (at); fos.write ((json) .getbytes ()); fos.close (); }}} System.out.println ("Access_token diperoleh adalah:" + maccess_token); } / * * Dapatkan WeChat Server AccessToken. Bagian ini konsisten dengan getAccess_token (), tidak ada komentar yang ditambahkan*/public static string getAccessToken () {string urlstring = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "& Secret =") String reslut = null; coba {url requrl = URL baru (urlString); HttpsurlConnection httpsconn = (httpsurlconnection) reqUrl .openconnection (); InputStreamReader isr = inputStreamReader baru (httpsconn.getInputStream ()); char [] chars = char baru [1024]; reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut += string baru (chars, 0, len); } isr.close (); } catch (ioException e) {e.printstacktrace (); } Gson gson = GSON baru (); Access_token access_token = gson.fromjson (reslut, access_token baru (). GetClass ()); if (access_token.getAccess_token ()! = null) {return access_token.getAccess_token (); } else {return null; }} Tiga artikel pertama menunjukkan kode sumber: http://xiazai.vevb.com/201606/yuanma/weixinapidemo(vevb.com).rar
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.