Como obter e salvar as credenciais de chamada de interface no WeChat, vou apresentá -lo a você abaixo
1. Explicação
* Consulte os dois primeiros artigos para obter instruções detalhadas.
*Este artigo é dividido em três partes:
O papel da interface CREEDENCIAL CREDENCIAL ACCEST_TOKEN e explica como obter a interface CHAMANCENCIAL CREDECTENS_TOKN
Como implementar a implementação do "Central Control Server" mencionado no documento do WeChat para salvar Access_token
* No final deste artigo, todos os códigos de origem da demonstração, incluindo os três primeiros artigos deste artigo, serão fornecidos.
Por que você precisa obter e salvar credenciais de chamada de interface access_token
• Comece o desenvolvimento - obtenha credenciais de chamada de interface
◦Document Endereço: http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html
• O documento oficial do site fornece a seguinte explicação:
◦Access_Token é o ingresso globalmente único da conta oficial. Access_Token é necessário ao ligar para cada interface da conta oficial. Os desenvolvedores precisam salvá -lo corretamente. O armazenamento de access_token deve reter pelo menos 512 espaço de caracteres. O período de validade do Access_Token é atualmente 2 horas e precisa ser atualizado regularmente. Aquisição repetida fará com que o Access_Token obteve da última vez que seja inválido.
•entender:
◦ Podemos simplesmente ler o documento e descobrir que muitas funções avançadas, como: menu personalizado, gerenciamento de materiais, gerenciamento de usuários, gerenciamento de contas e outras funções avançadas, têm o parâmetro "? Access_token = token" nos links para solicitações. Este é um parâmetro de chamada global. O back -end do WeChat precisa determinar a identidade com base nesse parâmetro para garantir a segurança de nossa conta oficial do WeChat.
Ordem para impedir que a exceção de carga do servidor WeChat seja causada por erros do programa na conta oficial, por padrão, a interface de chamada de cada conta oficial não pode exceder um determinado limite. Aqui, o WeChat é limitado a 2.000 vezes por dia. Portanto, se quisermos chamar esse parâmetro com frequência, precisamos salvá -lo manualmente pelo desenvolvedor, e cada Access_Token é válido por 2 horas.
Obtenha interface CHAMANDENCENCIAL ACCEST_TOKEN
• O documento oficial do site fornece a seguinte explicação:
◦Ininterface Chamada Solicitação Descrição
Método de solicitação http: obtenha
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appSecret
■ Retornar à descrição
Em circunstâncias normais, o WeChat retornará o seguinte pacote JSON à conta oficial:
{"Access_token": "Access_token", "Expires_in": 7200}
Quando ocorre o erro, o WeChat retornará códigos de erro e outras informações. O exemplo do pacote JSON é o seguinte (este exemplo é um erro inválido do Appid):
{"errcode": 40013, "errmsg": "inválido appid"}
•entender:
Solicitação Obtenha, este método pode ser implementado diretamente localmente. Porque é apenas uma solicitação GET normal, semelhante ao acesso a um URL. Portanto, você não precisa fazer upload desta parte do código para o servidor para operar diretamente.
◦O protocolo de solicitação HTTP é uma solicitação GET, o que significa que precisamos obter o fluxo de retorno através da solicitação GET e o fluxo de retorno está na forma de JSON. Ao ligar, precisamos transportar três parâmetros: Grant_Type, Appid e Secret. Entre eles, Appid e Secret estão os principais parâmetros de nossa conta oficial do WeChat, que foram explicados no artigo anterior. O resultado do retorno é dividido em dois tipos: resultados corretos e errados. 【Baidu: JSON】
FACTA Fato, podemos inserir diretamente o exemplo dado pelo documento na barra de endereços: https://api.weixin.qq.com/cgi-bin/token? Grant_type = client_credential & Appid = Appid & Secret = AppSecret, veremos a mensagem como esta: "{" errcode ": 40013," errmsg ":" Appid inválido dica: [PQKL0120ic11] "}", porque isso é um pedido inválido, o resultado é retornado com um erro.
Substituímos os dois parâmetros acima por nossos números de teste Appid e AppSecret, veremos a seguinte mensagem: "{" Access_token ":" xrllr3fnf ... badamio "," expires_in ": 7200}", que significa aquisição bem -sucedida.
◦GomOs obtemos o fluxo de retorno através do código Java e obtemos o access_token.
•concluir
private estático final longo max_time = 7200*1000; // weChat permite máximo access_token tempo de validade (ms) estático privado final string tag = "weixinapitest"; // tagprivate static final string appid = "wx889b **** b3666b0b8"; //pidprivate static "6DA7676 *** F0A9F15FBF06027856BB"; // Chave secreta/**Este caso de teste demonstra como obter access_token. * Access_token é o ingresso globalmente exclusivo da conta oficial. Access_Token é necessário ao ligar para cada interface da conta oficial. */@Testpublic void getAccess_token () lança ioexception {// costure o link httpsurl exigido pelo api string urlstring = "https://api.weixin.qq.com/cgi-bin/token?grant_type=cent_Credentficid=.com/cgi-bin/token "grant_type &=ent_tent_credentficid=" // crie um url url requrl = novo url (urlstring); // Obtenha o link httpsurlConnection httpScenn = (httpsurlConnection) requrl .openconnection (); // Obtenha o fluxo de entrada da conexão para ler o conteúdo da resposta inputStreamReader isr = new InputStreamReader (httpsconn.getInputStream ()); // Leia o conteúdo da resposta do servidor e exiba char [] chars = new char [1024]; String reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut += new string (chars, 0, len); } isr.close (); / * * Converta JSON em Javabean. Um frasco de terceiros foi introduzido: gson */ gson gson = new gson (); // converte o json obtido em um feijão em java // note: access_token access_token é um javabean criado por si só. Access_token access_token = gson.fromjson (Reslut, new Access_token (). GetClass ()); if (access_token.getAccess_token ()! = null) {System.out.println ("O Access_token obtido é:" + access_token.getaccess_token ()); System.out.println ("O horário válido do Access_token é:" + access_token.getexpires_in () + "s"); } else {System.out.println (tag + "Falha ao obter access_token, por favor, verifique"); }} Salvar interface Chamada Credencial Access_token
•Pensamentos
Armazene o Access_Token obtido e o horário atual no arquivo. Ao extrair, determine a diferença de tempo entre o tempo atual e o tempo registrado no armazenamento. Se for maior que o max_time, reaquire-o e substitua o conteúdo acessado obtido no arquivo. Se for menor que max_time, obtenha -o diretamente.
•concluir
/ * * Este método implementa a aquisição de access_token, salve e salve apenas 2 horas de access_token. Se exceder duas horas, reaquire-o; Se não exceder duas horas, obtenha -o diretamente. Este método depende de *: public static string getAccessToken (); * * IDEA: Armazene o Access_token obtido e o horário atual no arquivo, * Ao extrair, determine a diferença de tempo entre o tempo atual e o tempo registrado no armazenamento. Se for maior que o max_time, reaquire-o e armazene o acesso obtido ao arquivo para substituir o conteúdo original*e, se for menor que o max_time, obtenha-o diretamente. */ @Test public void getSavedaccess_token () lança ioexception {gson gson = new gson (); String macCess_token = null; // access_token a ser obtido; Arquivo de arquivo = novo arquivo ("temp_access_token.temp"); // o local onde access_token será salvo // se o arquivo não existir, crie se (! File.exists ()) file.createNewfile (); // Se o tamanho do arquivo for igual a 0, significa que ele é usado pela primeira vez e digite access_token if (file.length () == 0) {macCess_token = getAccessToken (); FileOutputStream fos = new FileOutputStream (FILE, false); // Anexar acessos_token em = 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 {// Leia o arquivo de conteúdo FileInputStream fis = new FileInputStream (FILE); byte [] b = novo byte [2048]; int len = fis.read (b); String mjsonaccess_token = new String (b, 0, len); // Leia o arquivo Content Access_token Access_token = gson.fromjson (mjsonaccess_token, new Access_token (). 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 + "diferença de tempo:" + remiantime); if (Remiantime <max_time) {access_token em = gson.fromjson (mjsonaccess_token, new access_token (). getClass ()); macCess_token = at.getaccess_token (); } else {MacCess_Token = getAccessToken (); FileOutputStream fos = new FileOutputStream (FILE, false); // Anexar acessos_token em = 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 ("O Access_Token obtido é:" + macCess_token); } / * * Obtenha o WeChat Server AccessToken. Esta parte é consistente com getaccess_token (), nenhum comentário é adicionado*/public static string getAccessToken () {string urlstring = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + Apid + " String reslut = null; tente {url requrl = novo url (urlstring); HttpsurlConnection httpScenn = (httpsurlConnection) requrl .openconnection (); InputStreamReader isr = new InputStreamReader (httpsconn.getInputStream ()); char [] chars = novo 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, new Access_token (). GetClass ()); if (access_token.getaccess_token ()! = null) {return access_token.getaccess_token (); } else {return null; }} Os três primeiros artigos demonstram o código -fonte: http://xiazai.vevb.com/201606/yuanma/weixinapidemo(vevb.com).rar
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.