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 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 Cambria }
span.s2 { font: 10.5px “Times New Roman” }
span.s3 { font: 10.5px Calibri }
span.Apple-tab-span { white-space: pre }
1、微信接口凭证的理解
对于每一个公众号(订阅号、服务号、企业号)都是微信平台上的一个app。
对于每一个公众号都有一套appid和appsect,这是微信平台用来区分微信app的唯一方法。
如图:(在微信公众号的基本配置中,appsect想看到需要扫描和输入密码一起通过才可看到)
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 }
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协议。
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 }
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。
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 }
4、http与https协议的区别
HTTP协议用于在web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTPS协议需要用到CA申请证书,证书是需要交费的。http是明文传输,https是加密传输,http协议使用的是80端口,https协议使用的443端口,
HTTP的连接简单无状态,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输的、身份认证的网络协议。
在微信接口里,所有的接口都将采用 https 协议。
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 }
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”]}