Cómo obtener y guardar las credenciales de llamadas de interfaz en WeChat, se lo presentaré a continuación
1. Explicación
* Consulte los dos primeros artículos para obtener instrucciones detalladas.
*Este artículo se divide en tres partes:
El papel de la credencial de llamadas de interfaz access_token y explique cómo obtener la credencial de llamadas de interfaz access_token
Cómo implementar la implementación del "servidor de control central" mencionado en el documento WeChat para guardar access_token
* Al final de este artículo, se darán todos los códigos fuente de demostración, incluidos los tres primeros artículos en este artículo.
¿Por qué necesita obtener y guardar credenciales de llamadas de interfaz Access_Token?
• Comienza el desarrollo: obtenga credenciales de llamadas de interfaz
◦ Dirección del documento: http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html
• El documento oficial del sitio web da la siguiente explicación:
◦Ccess_Token es el boleto único globalmente único de la cuenta oficial. Access_Token es necesario al llamar a cada interfaz de la cuenta oficial. Los desarrolladores deben guardarlo correctamente. El almacenamiento de Access_Token debe retener al menos 512 espacio de caracteres. El período de validez de Access_Token es actualmente 2 horas y debe actualizarse regularmente. La adquisición repetida hará que el Access_Token que haya obtenido la última vez no sea válida.
•entender:
◦ Podemos leer el documento y encontrar que muchas funciones avanzadas, como: menú personalizado, gestión de materiales, administración de usuarios, administración de cuentas y otras funciones avanzadas, tienen el parámetro "? Access_token = token" en los enlaces para las solicitudes. Este es un parámetro de llamada global. El backend de WeChat debe determinar la identidad basada en este parámetro para garantizar la seguridad de nuestra cuenta oficial de WeChat.
◦ En el para evitar que la excepción de carga del servidor WeChat sea causada por errores del programa en la cuenta oficial, por defecto, la interfaz de llamada de cada cuenta oficial no puede exceder un cierto límite. Aquí, WeChat está limitado a 2,000 veces al día. Entonces, si queremos llamar a este parámetro con frecuencia, necesitamos guardarlo manualmente por el desarrollador, y cada Access_Token es válido por 2 horas.
Obtener la credencial de llamada de interfaz Access_token
• El documento oficial del sitio web da la siguiente explicación:
◦ Descripción de la solicitud de llamada de interfaz
Método de solicitud HTTP: Obtener
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret
■ Volver a la descripción
En circunstancias normales, WeChat devolverá el siguiente paquete JSON a la cuenta oficial:
{"access_token": "access_token", "expires_in": 7200}
Cuando se produce un error, WeChat devolverá los códigos de error y otra información. El ejemplo del paquete JSON es el siguiente (este ejemplo es un error de APPID no válido):
{"Errcode": 40013, "Errmsg": "no válido appid"}
•entender:
◦ Solicitud de obtención, este método se puede implementar directamente localmente. Porque es solo una solicitud Get normal, similar a acceder a una URL. Por lo tanto, no necesita cargar esta parte del código al servidor para operar directamente.
◦ El protocolo de solicitud HTTP es una solicitud GET, lo que significa que necesitamos obtener el flujo de retorno a través de la solicitud GET, y el flujo de retorno está en forma de JSON. Al llamar, necesitamos llevar tres parámetros: Grant_Type, Appid y Secret. Entre ellos, APPID y Secret son los parámetros clave de nuestra cuenta oficial de WeChat, que se han explicado en el artículo anterior. El resultado de retorno se divide en dos tipos: resultados correctos e incorrectos. 【Baidu: Json】
◦ De hecho, podemos ingresar directamente el ejemplo dado por el documento en la barra de direcciones: https://api.weixin.qq.com/cgi-bin/token? Grant_type = client_credential & appid = appid & secret = appSecret, veremos el mensaje así: "{" errcode ": 40013," errmsg ":" appid appid tack: [pqkl0120ic11] "}", porque esta es una solicitud inválida, el resultado se devuelve con un error.
◦ Cuando reemplazamos los dos parámetros anteriores con nuestros números de prueba APPID y APPSECRET, veremos el siguiente mensaje: "{" access_token ":" xrllr3fnf ... badamio "," expires_in ": 7200}", lo que significa una adquisición exitosa.
◦ Ahora obtenemos el flujo de retorno a través del código Java y obtenemos el access_token.
•lograr
Private static final Long max_time = 7200*1000; // wechat permite el máximo access_token validez tiempo (ms) static final statk string tag = "weixinapitest"; // tagPrivate static string final appid = "wx889b **** B3666b0b8"; // AppIdprivate String final final static sectert = "6DA7676 *** F0A9F15FBF06027856BB"; // Clave secreta/**Este caso de prueba demuestra cómo obtener Access_Token. * Access_token es el boleto único a nivel mundial de la cuenta oficial. Access_Token es necesario al llamar a cada interfaz de la cuenta oficial. */@TestPublic void getaccess_token () lanza ioexception {// coser el enlace httpsurl requerido por la cadena API urlString = "https://api.weixin.qqq.com/cgi-bin/token?grant_type=Client_credential&appid=" + appid + "& secret =" + secert; // crear una url url requrl = nueva url (urlString); // Obtenga el enlace httpsurlconnection httpsconn = (httpsurlconnection) requrl .openconnection (); // Obtenga la secuencia de entrada de la conexión para leer el contenido de respuesta InputStreamReader isr = new InputStreamReader (httpsconn.getInputStream ()); // Lea el contenido de respuesta del servidor y muestra char [] chars = new Char [1024]; Cadena reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut += new String (chars, 0, len); } isr.close (); / * * Convertir JSON a Javabean. Se introdujo un frasco de terceros: gson */ gson gson = new Gson (); // Convertir el JSON obtenido en un frijol en Java // Nota: Access_Token Access_Token es un Javabean creado por sí mismo. Access_token access_token = gson.fromjson (reslut, nuevo access_token (). GetClass ()); if (access_token.getaccess_token ()! = null) {system.out.println ("El access_token obtenido es:" + access_token.getaccess_token ()); System.out.println ("El tiempo válido del access_token es:" + access_token.getExpires_in () + "s"); } else {system.out.println (etiqueta + "no pudo obtener access_token, por favor verifique"); }} Guardar la credencial de llamadas de interfaz Access_token
•Pensamientos
Almacene el access_token obtenido y la hora actual en el archivo. Al extraer, determine la diferencia de tiempo entre el tiempo actual y el tiempo registrado en el almacenamiento. Si es mayor que max_time, vuelva a adquirirlo y reemplace el contenido de acceso obtenido en el archivo. Si es menos que max_time, obténlo directamente.
•lograr
/ * * Este método implementa la adquisición de access_token, guarda y guarda solo 2 horas de access_token. Si supera las dos horas, vuelva a adquirirlo; Si no excede dos horas, obtenga directamente. Este método depende de *: cadena estática pública getAccessToken (); * * Idea: almacene el access_token obtenido y la hora actual en el archivo, * Al extraer, determine la diferencia de tiempo entre el tiempo actual y el tiempo registrado en el almacenamiento. Si es mayor que max_time, vuelva a adquirirlo y almacene el acceso obtenido al archivo para reemplazar el contenido original*, y si es menor que max_time, obtenlo directamente. */ @Test public void getSavedAccess_token () lanza ioexception {gson gson = new Gson (); Cadena MacCess_Token = null; // access_token para obtener; Archivo file = nuevo archivo ("temp_access_token.temp"); // La ubicación donde se guarda access_token // si el archivo no existe, cree if (! File.exists ()) file.ceateNewFile (); // Si el tamaño del archivo es igual a 0, significa que se usa por primera vez e ingrese access_token if (file.length () == 0) {MacCess_Token = getAccessToken (); FileOutputStream fos = new FileOutputStream (archivo, falso); // append access_token at = new access_token (); at.setAccess_Token (MacCess_Token); at.setExpires_in (System.CurrentTimemillis () + ""); Cadena json = gson.tojson (AT); fos.write ((JSON) .getBytes ()); fos.close (); } else {// Leer contenido de archivo FileInputStream Fis = new FileInputStream (archivo); byte [] b = nuevo byte [2048]; int len = fis.read (b); Cadena mjsonaccess_token = new String (b, 0, len); // Lea el contenido del archivo access_token access_token = gson.fromjson (mjsonaccess_token, nuevo access_token (). GetClass ()); if (access_token.getExpires_in ()! = null) {long SaveTime = long.parselong (access_token.getExpires_in ()); Long ahora = System.CurrentTimemillis (); Long Remiantime = Nowtime - SaveTime; // System.out.println (Tag + "Diferencia de tiempo:" + Remiantime); if (remiantime <max_time) {access_token at = gson.fromjson (mjsonaccess_token, nuevo access_token (). getClass ()); MacCess_Token = AT.GetAccess_Token (); } else {MacCess_Token = getAccessToken (); FileOutputStream fos = new FileOutputStream (archivo, falso); // append access_token at = new access_token (); at.setAccess_Token (MacCess_Token); at.setExpires_in (System.CurrentTimemillis () + ""); Cadena json = gson.tojson (AT); fos.write ((JSON) .getBytes ()); fos.close (); }}} System.out.println ("El access_token obtenido es:" + maccess_token); } / * * Obtenga el servidor WeChat AccessToken. Esta parte es consistente con getAccess_token (), no se agregan comentarios*/public static string getAccessToken () {String urlString = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "& secret =" + secert;; Cadena reslut = null; intente {url requrl = new url (urlString); Httpsurlconnection httpsconn = (httpsurlconnection) requrl .openconnection (); InputStreamReader isr = new InputStreamReader (httpsconn.getInputStream ()); char [] chars = new Char [1024]; reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut += new String (chars, 0, len); } isr.close (); } catch (ioException e) {E.PrintStackTrace (); } Gson gson = new Gson (); Access_token access_token = gson.fromjson (reslut, nuevo access_token (). GetClass ()); if (access_token.getaccess_token ()! = null) {return access_token.getAccess_token (); } else {return null; }} Los primeros tres artículos demuestran el código fuente: http://xiazai.vevb.com/201606/yuanma/weixinapidemo(vevb.com).rar
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.