首页 > 代码库 > (7)微信二次开发 之 微信接口凭证的获取
(7)微信二次开发 之 微信接口凭证的获取
1、微信接口凭证的理解
对于每一个公众号(订阅号、服务号、企业号)都是微信平台上的一个app。
对于每一个公众号都有一套appid和appsect,这是微信平台用来区分微信app的唯一方法。
如图:(在微信公众号的基本配置中,appsect想看到需要扫描和输入密码一起通过才可看到)
<style>p.p1 { margin: 13.0px 0.0px 13.0px 0.0px; text-align: justify; font: 16.0px Cambria } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px Calibri } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px SimSun } p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px SimSun; color: #ff2600 } span.s1 { font: 16.0px SimSun } span.s2 { font: 10.5px "Times New Roman" } span.s3 { font: 10.5px SimSun } span.s4 { font: 10.5px Calibri } span.s5 { font: 10.5px "Times New Roman"; color: #000000 } span.s6 { color: #ff2600 } span.s7 { font: 10.5px Calibri; color: #ff2600 } span.Apple-tab-span { white-space: pre }</style>
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协议。
<style>p.p1 { margin: 13.0px 0.0px 13.0px 0.0px; text-align: justify; font: 16.0px SimSun } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px Calibri } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px SimSun } p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px "Times New Roman"; min-height: 11.0px } span.s1 { font: 16.0px Cambria } span.s2 { font: 10.5px "Times New Roman" } span.s3 { color: #ff2600 } span.s4 { font: 10.5px SimSun } span.s5 { font: 10.5px Calibri } span.Apple-tab-span { white-space: pre }</style>3、http、https协议以及端口的理解
Http:(HyperText Transfer Protocol)是超文本传输协议,所有的www文件都必须遵守这个标准。HTTP1.0 --> HTTP1.1
HTTP是基于TCP,是基于客户端和服务器端请求和应答(响应)的标准。客户端即为用户,服务器端即网站服务器,客户端向服务器端在80端口发起HTTP请求。一旦服务器有响应,即响应数据回来;没有响应,就返回状态码。
端口:就是针对一块内存的编号。
https:HyperText Transfer Protocol Over Secure Socket Layer,基于安全套接字的HTTP协议, 是HTTP协议的安全版。在HTTP下加入了SSL层,所以HTTPS的安全基础是基于SSL。最早由网景公司开发,主要是用于金融、支付、对安全要求比较高的领域。
HTTPS使用的端口是:443。
<style>p.p1 { margin: 13.0px 0.0px 13.0px 0.0px; text-align: justify; font: 16.0px Cambria } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px SimSun } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px "Times New Roman"; min-height: 11.0px } span.s1 { font: 16.0px SimSun } span.s2 { font: 10.5px "Times New Roman" } span.s3 { font: 10.5px Calibri } span.Apple-tab-span { white-space: pre }</style>4、http与https协议的区别
HTTP协议用于在web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTPS协议需要用到CA申请证书,证书是需要交费的。http是明文传输,https是加密传输,http协议使用的是80端口,https协议使用的443端口,
HTTP的连接简单无状态,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输的、身份认证的网络协议。
在微信接口里,所有的接口都将采用 https 协议。
<style>p.p1 { margin: 13.0px 0.0px 13.0px 0.0px; text-align: justify; font: 16.0px SimSun } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.5px "Times New Roman"; min-height: 11.0px } span.s1 { font: 16.0px Cambria }</style>
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"]}
(7)微信二次开发 之 微信接口凭证的获取