工具类(一)-----微信工具类
来源:互联网 发布:淘宝企业店铺消失了 编辑:程序博客网 时间:2024/05/21 19:20
前些天做微信授权登录用到了一些关于调用微信接口的东西,写了个工具类分享给大家,如有问题欢迎大家批评指正!!!
package com.iyiqiba.utility;import java.io.IOException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.fastjson.JSONObject;import com.iyiqiba.common.WChartUser;import com.iyiqiba.common.OAuthAccessToken;/** * 微信工具类 * @author ZSQ 2017年6月4日20:49:34 * */public class WChartUtils { private static Logger log = LoggerFactory.getLogger(WChartUtils.class); public final static String APPID = "wx6a42b00945e04c"; public final static String APPSECRET = "05e78940a491423c47185e7ccb8ee"; //获取用户详细信息 public final static String SCOPE_INFO = "snsapi_userinfo"; //近获取用户open_id public final static String SCOPE_BASE = "snsapi_base"; //微信请求接口地址 //获取access_token 接口地址 Get public final static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; //获取网页授权登录access_token 接口地址Get public final static String OAUTH_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; //获取授权登录用户信息 接口地址Get public final static String OAUTH_WCHAT_USER_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; public final static String OAUTH_LOGIN_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect"; //access_token有效时间 时间有时间是7200 为了防止延时导致获取access_token的间断 public static long expires_in = 7100; //上次获取access_token时间 private static Long lastGetAccessTokenTime = 0L; //当前access_token值 private static String access_token = null; /*** * 获取access_token * @return access_token * @throws IOException */ public static String getAccessToken() throws IOException{ if (access_token == null) {//当前没有获取access_token access_token = refreshAccessToken(); }else {//已经获取过access_token Long curTime = System.currentTimeMillis(); if ((curTime-lastGetAccessTokenTime)/1000 >= expires_in) { access_token = refreshAccessToken(); } } return access_token; } /*** * 刷新access_token * @return access_token * @throws IOException */ public static String refreshAccessToken() throws IOException{ lastGetAccessTokenTime = System.currentTimeMillis(); String url = ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET); String result = HttpsRequest.sendGet(url); JSONObject json = JSONObject.parseObject(result); String token = (String) json.get("access_token"); if (token == null) { String errorCode = (String) json.get("errcode"); String errorMsg = (String) json.get("errmsg"); log.error("获取access_token失败:错误代码:" + errorCode + "错误信息:" + errorMsg); } return token; } /** * 获取授权登录access_token * @param code * @return * @throws IOException */ public static OAuthAccessToken getOAuthAccessToken(String code) throws IOException{ String url = OAUTH_ACCESS_TOKEN_URL.replace("APPID", APPID).replace("SECRET", APPSECRET).replace("CODE", code); String result = HttpsRequest.sendGet(url); JSONObject json= JSONObject.parseObject(result); String token = json.getString("access_token"); if(token == null){ String errorCode = json.getString("errcode"); String errorMsg = json.getString("errmsg"); System.out.println(json.toString()); log.error("获取授权登录access_token失败:错误代码:" + errorCode + "错误信息:" + errorMsg); return null; } OAuthAccessToken accessToken = (OAuthAccessToken) JSONObject.parseObject(result, OAuthAccessToken.class); return accessToken; } /** * 获取用户信息 * @return * @throws IOException */ public static WChartUser getOAuthUserInfo(String code) throws IOException{ OAuthAccessToken accessToken = WChartUtils.getOAuthAccessToken(code); if (accessToken == null) { return null; } String token = accessToken.getAccess_token(); String openid = accessToken.getOpenid(); String url = OAUTH_WCHAT_USER_URL.replace("ACCESS_TOKEN", token).replace("OPENID", openid); String result = HttpsRequest.sendGet(url); JSONObject jsonObject = JSONObject.parseObject(result); openid = jsonObject.getString("openid"); if(openid == null){ String errorCode = jsonObject.getString("errcode"); String errorMsg = jsonObject.getString("errmsg"); System.out.println(jsonObject.toString()); log.error("获取access_token失败:错误代码:" + errorCode + "错误信息:" + errorMsg); return null; } WChartUser user = JSONObject.parseObject(result, WChartUser.class); return user; } public static String getOAuthLoginUrl(String redirectUrl, String scope){ return OAUTH_LOGIN_URL.replace("APPID", APPID).replace("REDIRECT_URI", redirectUrl) .replace("SCOPE", scope); } public static void main(String []args) throws Exception{ //WChartUtils.getOAuthUserInfo("123");// String result = "{ \"access_token\":\"ACCESS_TOKEN\", \"expires_in\":7200, \"refresh_token\":\"REFRESH_TOKEN\", \"openid\":\"OPENID\", \"scope\":\"SCOPE\" }";// System.out.println(result);// OAuthAccessToken accessToken = JSONObject.parseObject(result, OAuthAccessToken.class);// System.out.println(accessToken.getOpenid());// System.out.println(accessToken.getAccess_token()); System.out.println(WChartUtils.getAccessToken()); } }
阅读全文
2 0
- 工具类(一)-----微信工具类
- 微信工具类
- 微信支付工具类
- 微信开发工具类
- 微信支付工具类
- 微信请求工具类
- 微信支付--工具类--处理二维码
- 微信支付--工具类--随机字符串
- 微信支付--工具类--创建签名
- 微信支付--工具类--MD5
- 微信支付--工具类--组包
- 微信公众号开发工具类
- 微信支付订单工具类
- 微信APP支付工具类
- 微信支付签名工具类---Signature
- 日志工具类(一)
- lua工具类(一)
- 【工具类】一、ConnectionUtil
- New Year Message by Singaporean Prime Minister Lee Hsien Loong
- 从B树、B+树、B*树谈到R 树
- Swift之缓存文件处理
- 《机器学习》基本术语标准翻译总结:第2章
- 设计模式之组合模式
- 工具类(一)-----微信工具类
- 3D Touch
- asp.net的一些对话
- CMD常用命令
- android:descendantFocusability用法简析
- [$injector:unpr] Unknown provider:--angular.module()函数解答
- undefinded sysmbols __objc__类名编译错误
- 【Java多线程】死锁范例及解决办法
- 断言以及程序的调试