微信公众平台获取access_token的方法和步骤
Access_token是微信公众平台界面的重要参数,很多界面都需要用到。
微信公众平台文档地址:微信公众平台技术文档
一、访问令牌描述
Access_token是微信官方账号的全局唯一接口调用凭证,微信官方账号在调用各个接口时需要用到access_token。开发人员需要妥善保管。至少应保留512个字符空间用于存储access_token。access_token的有效期目前为2小时,需要定期刷新。重复获取将使上次获取的access_token无效。
1.公共平台应用编程接口调用所需的访问令牌的使用
1.建议微信官方账号开发者使用中控服务器统一获取并刷新access _ tokens。其他业务逻辑服务器使用的access _ token来自这个中控服务器,不应该单独刷新,否则很容易造成冲突,导致access _ token覆盖范围扩大,影响业务;2.目前,Access_token的有效期由返回的expire_in来传递,目前在7200秒以内。中央控制服务器需要根据这个有效时间提前刷新新的access_token。在刷新过程中,中央控制服务器仍然输出旧的access_token。此时公共平台的后台会保证新旧access_token在刷新的短时间内都可用,保证了第三方业务的平稳过渡;3.Access_token的有效时间未来可能会有所调整,因此中控服务器不仅需要在内部定时主动刷新,还需要提供一个被动刷新access_token的接口,以便业务服务器在API调用知道access_token已经超时时,可以触发access_token的刷新过程。
2.2:access_token的生成描述
微信官方账号可以使用AppID和AppSecret调用这个接口获取access_token。在“微信公众平台-开发-基本配置”页面可以获取到AppID和AppSecret(你需要是开发者,并且你的账号没有异常状态)。调用界面时,请登录“微信公众平台-开发-基础配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则调用不会成功。
二.接口调用请求的描述
1:接口调用
Https请求方法: GET
https://api.weixin.qq.com/cgi-bin/token?grant _ type=client _ credential appid=APPIDsecret=APPSECRET
2.参数描述
参数必须指示grant_type是否要获取access_token。填写client_credential appid是第三方用户的唯一凭据。secret是第三方用户的唯一凭证密钥,即appsecret 3:返回描述。
正常情况下,微信会将以下JSON包返回微信官方账号:
{“access _ token”:“access _ token”、“expires _ in”:7200的参数描述
该参数描述了由access_token获得的证书expires_in的有效时间。单位秒时,微信会返回错误码等信息。JSON数据包如下(这个例子是无效的AppID错误):
{“err code”:40013,“errmsg”:“无效appid”} 4:返回代码的描述
返回代码-1的描述。系统正忙。请要求开发人员稍后再试。0请求成功。40001 AppSecret错误或AppSecret不属于此微信官方账号。请开发者确认AppSecret的正确性。40002请确保grant_type字段的值是client_credential 40164。呼叫接口的IP地址不在白名单中。请在接口IP白名单中设置。3.java接口开发
1:返回接口封装类Token
/* * *类名: Token.java/br *描述:凭证/br */公共类Token {//接口访问凭证私有String accessToken//凭证有效期,单位:sec private int expiresIn树脂;公共字符串getAccessToken() {返回accessToken} public void setAccessToken(String access token){ this . access token=access token;} public int getexpire resin(){ return expire resin;} public void setExpiresIn树脂(int expiresIn树脂){ this.expiresIn树脂=expiresIn树脂;}}2:获取接口访问凭据
/** * 获取接口访问凭证* @param appid凭证* @param appsecret密钥* @ return */public static Token getToken(String appid,String appsecret){ Token Token=null;String requestUrl=WeixinConstants .TOKEN_URL.replace('APPID ',APPID).替换(' APPSECRET ',APPSECRET);//发起得到请求获取凭证JSON对象JSON对象=httprequest(请求URL,‘GET’,null);if (null!=jsonObject){ try { Token=new Token();令牌。setaccesstoken(JSonobject)。getString(' access _ token ');令牌。setexperi(JSonobject。getint(' expires _ in ');} catch(JSonexception e){ token=null;//获取代币失败log.error('获取代币失败errcode:{} errmsg:{} ',jsonObject.getInt('errcode '),jsonObject。getStrIng(' errmsg ');} }返回令牌;}3:http请求工具类
/** * 发送安全超文本传输协议请求* @param requestUrl请求地址* @param requestMethod请求方式(获取、发布)* @参数输出字符串提交的数据* @返回JSONObject(通过JSONObject.get(键)的方式获取数据对象的属性值)*/公共静态JSON对象https请求(字符串请求URL、字符串请求方法、字符串输出字符串){ JSON对象JSON对象=null尝试{ //创建SSLContext对象,并使用我们指定的信任管理器初始化信任管理器[]TM={ new myx 509信任管理器()};SSLContext SSLContext=SSLContext。getinstance(' SSL ',' Sunjsse ');sslContext.init(null,tm,new Java。保安。secureandom());//从上述SSLContext对象中得到SSLSocketFactory对象SSF工厂。getsocketfactory();网址网址=新网址(RequestURl);httpur connection conn=(httpur connection)URL。open connection();康涅狄格州setsslsocketfactory(SSF);conn . setdooutput(true);conn.setDoInput(真);conn . setusecache(false);//设置请求方式conn . setrequest方法(请求方法);//当输出字符串不为空时向输出流写数据if (null!=output str){ output stream output stream=conn . get output stream();//注意编码格式输出流。写(输出字符串。getbytes(' UTF-8 ');输出流。close();} //从输入流读取返回内容InputStream InputStream=conn . getinputstream();InputStreamReader InputStreamReader=new InputStreamReader(inputStream,' utf-8 ');缓冲恐惧者缓冲恐惧者=新的buffere reader(InputStreamReader);字符串str=nullStringBuffer缓冲区=new StringBuffer();while((str=buffere reader。readline())!=null){缓冲区。追加(字符串);} //释放资源bufferedreader。close();inputstreamreader。close();inputstream。close();inputStream=nullconn。disconnect();JSON对象=JSON对象。来自对象(缓冲区。tostring());} catch(ConnectException ce){ log。错误(“”连接超时:{} ',ce);} catch(异常e) { log.error('https请求异常:{} ',e);}返回jsonObject}4:信任管理器工具类
/** * 类名: MyX509TrustManager.java/br *描述: 信任管理器/br */公共类my x509信任管理器实现X509TrustManager { //检查客户端证书public void checkClientTrusted(x509证书[]链,字符串验证类型)引发CertificateException { } //检查服务器端证书public void checkserverstrusted(x509证书[]链,字符串验证类型)引发CertificateException { } //返回受信任的X509证书数组公共证书X509[](Getaccepteputers(){)返回null}}四、总结
上面的java接口简单总结如下:根据接口地址,GET传递两个参数appid和appsecret,发送http请求获取access_token。看似简单,请求后即可获取access_token参数,但微信公众平台的界面文档也显示access_token的有效期为7200秒,需要中控服务器控制access_token的刷新,因此建议将产生的access_token存储在redis中,redis缓存的有效期等于access_token的有效期。这样可以避免不必要的接口请求,降低并发性。去redis判断access_token是否有效,有效则获取,无效则请求接口。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:微信公众平台获取access_token的方法和步骤是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。