微信二次开发 之 微信接口凭证的获取

Posted C小海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信二次开发 之 微信接口凭证的获取相关的知识,希望对你有一定的参考价值。

1、微信接口凭证的理解

对于每一个公众号(订阅号、服务号、企业号)都是微信平台上的一个app。

对于每一个公众号都有一套appid和appsect,这是微信平台用来区分微信app的唯一方法。
如图:(在微信公众号的基本配置中,appsect想看到需要扫描和输入密码一起通过才可看到)

 

  

2、微信接口凭证access_token的理解

  AppID(应用ID),AppSecret(应用密钥),还有access_token(访问令牌)。access_token访问令牌是由appid和appsect经过一定的算法得来。

  access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

  为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则会造成access_token覆盖而影响业务。

目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器对外输出的依然是老access_token,此时公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡。

access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。

  如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新access_token,那么就可能会产生冲突,导致服务不稳定。

  公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发者中心页中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议。

3httphttps协议以及端口的理解

Http(HyperText Transfer Protocol)是超文本传输协议,所有的www文件都必须遵守这个标准。HTTP1.0 --> HTTP1.1

HTTP是基于TCP,是基于客户端和服务器端请求和应答(响应)的标准。客户端即为用户,服务器端即网站服务器,客户端向服务器端在80端口发起HTTP请求。一旦服务器有响应,即响应数据回来;没有响应,就返回状态码。

 

端口:就是针对一块内存的编号。

 

httpsHyperText Transfer Protocol Over Secure Socket Layer,基于安全套接字的HTTP协议, 是HTTP协议的安全版。在HTTP下加入了SSL层,所以HTTPS的安全基础是基于SSL。最早由网景公司开发,主要是用于金融、支付、对安全要求比较高的领域。

HTTPS使用的端口是:443

4httphttps协议的区别

HTTP协议用于在web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTPS协议需要用到CA申请证书,证书是需要交费的。http是明文传输,https是加密传输,http协议使用的是80端口,https协议使用的443端口,

  HTTP的连接简单无状态,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输的、身份认证的网络协议。

 

  在微信接口里,所有的接口都将采用 https 协议。

 

5微信二次开发Java实现发送https请求获取信息

package com.aixunma.test;

import java.util.List;

import org.junit.Test;

import com.aixunma.config.Contants;
import com.aixunma.vo.AccessToken;
import com.aixunma.wechat.util.BaseIncUtil;
import com.aixunma.wechat.util.WeixinUtil;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 *  测试accessToken请求返回的数据
 * <p>类的描述:</p>
 * <p>@Description: TODO</p>
 * <p>@author 小海</p>
 * <p>@time:2017年5月1日 下午10:09:50</p>
 * <p>@Vesion: 1.0</p>
 */
public class TestAccessToken {
    
    @Test
    public void test() {
        final AccessToken accessToken = WeixinUtil.getAccessToken(Contants.APPID, Contants.APPSECRET);
        // 输出数据
        System.out.println("access_token(访问令牌):" + accessToken.getAccess_token());
        System.out.println("expires_in(有效时间):" + accessToken.getExpires_in());
        
        // 获取微信服务器列表
        final String ipAddressList = BaseIncUtil.getServerList(accessToken.getAccess_token());
        System.out.println(ipAddressList);
        
        // 这里的ipAddressList是一个json格式的字符串
        
        // 解析json格式
        final JSONObject jsonObject = JSONObject.fromObject(ipAddressList);
        final List<String> list = JSONArray.toList(jsonObject.getJSONArray("ip_list"));
        if (null != list) {
            for (int i = 0; i < list.size(); i++) {
                System.out.println("第" + i + "个ip:" + list.get(i));
            }
        }
    }    
}

ipAddressList的json数据如下:目前微信服务器使用到了98个。
 {"ip_list":["101.226.62.77","101.226.62.78","101.226.62.79","101.226.62.80","101.226.62.81",
 "101.226.62.82","101.226.62.83","101.226.62.84","101.226.62.85","101.226.62.86",
 "101.226.103.59","101.226.103.60","101.226.103.61","101.226.103.62","101.226.103.63",
 "101.226.103.69","101.226.103.70","101.226.103.71","101.226.103.72","101.226.103.73",
 "140.207.54.73","140.207.54.74","140.207.54.75","140.207.54.76","140.207.54.77",
 "140.207.54.78","140.207.54.79","140.207.54.80","182.254.11.203","182.254.11.202",
 "182.254.11.201","182.254.11.200","182.254.11.199","182.254.11.198","59.37.97.100",
 "59.37.97.101","59.37.97.102","59.37.97.103","59.37.97.104","59.37.97.105",
 "59.37.97.106","59.37.97.107","59.37.97.108","59.37.97.109","59.37.97.110",
 "59.37.97.111","59.37.97.112","59.37.97.113","59.37.97.114","59.37.97.115",
 "59.37.97.116","59.37.97.117","59.37.97.118","112.90.78.158","112.90.78.159",
 "112.90.78.160","112.90.78.161","112.90.78.162","112.90.78.163","112.90.78.164",
 "112.90.78.165","112.90.78.166","112.90.78.167","140.207.54.19","140.207.54.76",
 "140.207.54.77","140.207.54.78","140.207.54.79","140.207.54.80","180.163.15.149",
 "180.163.15.151","180.163.15.152","180.163.15.153","180.163.15.154","180.163.15.155",
 "180.163.15.156","180.163.15.157","180.163.15.158","180.163.15.159","180.163.15.160",
 "180.163.15.161","180.163.15.162","180.163.15.163","180.163.15.164","180.163.15.165",
 "180.163.15.166","180.163.15.167","180.163.15.168","180.163.15.169","180.163.15.170",
 "101.226.103.0/25","101.226.233.128/25","58.247.206.128/25","182.254.86.128/25","103.7.30.21",
 "103.7.30.64/26","58.251.80.32/27","183.3.234.32/27","121.51.130.64/27"]}

 

以上是关于微信二次开发 之 微信接口凭证的获取的主要内容,如果未能解决你的问题,请参考以下文章

微信二次开发SDK

xposed微信模块源代码

微信二次开发点击菜单openId的获取

xposed微信插件大全

微信二次开发 之 公众平台开发者模式配置与请求验证

微信二次开发自定义接受事件推送的代码