zoukankan      html  css  js  c++  java
  • (7)微信二次开发 之 微信接口凭证的获取

    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"]}

  • 相关阅读:
    Python基础知识大总结
    Python基础教程第一章 python基础知识
    XDUOJ 1000-1002题解
    C# PDF格式 下载
    C# 文件(图片)下载
    C# DataTable转List
    C# Excel导入与导出
    C# 文件压缩与解压
    C# 文件流 导入 导出
    C# lambda表达式
  • 原文地址:https://www.cnblogs.com/c-xiaohai/p/6849684.html
Copyright © 2011-2022 走看看