`
a729812804
  • 浏览: 41868 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

微信 开发 CommonUtil 获取token 及发送接收请求

 
阅读更多

 

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;

import java.net.ConnectException;

import java.net.URL;

import java.util.Date;

 

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import javax.servlet.http.HttpServletRequest;

 

import net.jeeshop.core.mobile.FrontContainer;

import net.jeeshop.mobile.services.front.account.bean.Account;

import net.jeeshop.mobile.services.front.systoken.bean.Token;

import net.sf.json.JSONException;

import net.sf.json.JSONObject;

 

import org.apache.struts2.ServletActionContext;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

import com.opensymphony.xwork2.ActionContext;

 

/**

 * 通用工具类

 * 

 * @author

 * 

 */

public class CommonUtil {

private static Logger log = LoggerFactory.getLogger(CommonUtil.class);

 

/**

* 发送https请求

* @param requestUrl

*            请求地址

* @param requestMethod

*            请求方式(GET、POST)

* @param outputStr

*            提交的数据

* @return 返回微信服务器响应的信息

*/

public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {

log.error("httpsRequest.requestUrl :{}", requestUrl);

try {

// 创建SSLContext对象,并使用我们指定的信任管理器初始化

TrustManager[] tm = { new MyX509TrustManager() };

SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");

sslContext.init(null, tm, new java.security.SecureRandom());

// 从上述SSLContext对象中得到SSLSocketFactory对象

SSLSocketFactory ssf = sslContext.getSocketFactory();

URL url = new URL(requestUrl);

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

conn.setSSLSocketFactory(ssf);

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

// 设置请求方式(GET/POST)

conn.setRequestMethod(requestMethod);

conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");

// 当outputStr不为null时向输出流写数据

if (null != outputStr) {

OutputStream outputStream = conn.getOutputStream();

// 注意编码格式

outputStream.write(outputStr.getBytes("UTF-8"));

outputStream.close();

}

// 从输入流读取返回内容

InputStream inputStream = conn.getInputStream();

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String str = null;

StringBuffer buffer = new StringBuffer();

while ((str = bufferedReader.readLine()) != null) {

buffer.append(str);

}

// 释放资源

bufferedReader.close();

inputStreamReader.close();

inputStream.close();

inputStream = null;

conn.disconnect();

log.error("httpsRequest 方法:{}", buffer.toString());

return buffer.toString();

} catch (ConnectException ce) {

log.error("连接超时:{}", ce);

} catch (Exception e) {

log.error("https请求异常:{}", e);

}

return null;

}

 

/**

* 获取接口访问凭证(不应该放到session内 需引以为戒,放数据库 或其他持久层模式) 基础支持 token

* @param appid

*            凭证

* @param appsecret

*            密钥

* @return

*/

public static Token getToken(String openid, String appid, String appsecret, HttpServletRequest request) {

 

Token token = null;

if (request != null && request.getSession() != null) {

token = (Token) request.getSession().getAttribute(openid + "token");

}

String requestUrl = ConfigUtil.BASE_TOKEN_URL.replace("APPID", appid).replace("APPSECRET", appsecret);

 

if (null == token || ((new Date().getTime() - token.getTime()) / 1000) > 7150) {

// 发起GET请求获取凭证

JSONObject jsonObject = JSONObject.fromObject(httpsRequest(requestUrl, "GET", null));

log.error("获取getToken jsonObject====================", jsonObject.toString());

if (null != jsonObject) {

try {

token = new Token();

token.setAccessToken(jsonObject.getString("access_token"));

token.setExpiresIn(jsonObject.getInt("expires_in"));

token.setTime(new Date().getTime());

if (request != null && request.getSession() != null) {

request.getSession().setAttribute(openid + "token", token);

}

} catch (JSONException e) {

token = null;

// 获取token失败

log.error("获取基础支持token失败 errcode:{} errmsg:{}", jsonObject.getString("errcode"), jsonObject.getString("errmsg"));

}

}

}

return token;

}

 

/**

* 获取接口访问凭证(不应该放到session内 需引以为戒,放数据库 或其他持久层模式) 基础支持 token

* @param appid

*            凭证

* @param appsecret

*            密钥

* @return

*/

public static Token getToken(String openid,HttpServletRequest request) {

Token token = null;

String requestUrl = ConfigUtil.BASE_TOKEN_URL.replace("APPID", ConfigUtil.APPID).replace("APPSECRET", ConfigUtil.APP_SECRECT);

// 发起GET请求获取凭证

JSONObject jsonObject = JSONObject.fromObject(httpsRequest(requestUrl, "GET", null));

log.error("不经过session 直接获取getToken jsonObject====================", jsonObject.toString());

if (null != jsonObject) {

try {

token = new Token();

token.setAccessToken(jsonObject.getString("access_token"));

token.setExpiresIn(jsonObject.getInt("expires_in"));

token.setTime(new Date().getTime());

if (request != null && request.getSession() != null) {

request.getSession().setAttribute(openid + "token", token);

}

 

} catch (JSONException e) {

token = null;

// 获取token失败

log.error("不经过session 直接获取基础支持token失败 errcode:{} errmsg:{}", jsonObject.getString("errcode"), jsonObject.getString("errmsg"));

}

}

return token;

}

 

/**

* 通过code获取token

* @param appid

*            凭证

* @param appsecret

*            密钥

* @return

*/

public static Token getOAUTH2(String appid, String appsecret, String code, HttpServletRequest request) {

log.error("通过code获取token getOAUTH2 start=================================");

Token token = null;

if (request.getSession() != null) {

token = (Token) request.getSession().getAttribute(appid + "token");

}

String requestUrl = ConfigUtil.TOKEN_URL.replace("APPID", appid).replace("SECRET", appsecret).replace("CODE", code);

if (null == token || ((new Date().getTime() - token.getTime()) / 1000) > 7150) {

// 发起GET请求获取凭证

JSONObject jsonObject = JSONObject.fromObject(httpsRequest(requestUrl, "GET", null));

log.error("获取token jsonObject====================", jsonObject.toString());

if (null != jsonObject) {

try {

token = new Token();

token.setAccessToken(jsonObject.getString("access_token"));

log.error("获取token access_token:{}", jsonObject.getString("access_token"));

token.setOpenId(jsonObject.getString("openid"));

log.error("获取token openId:{}", jsonObject.getString("openid"));

token.setRefeshToken(jsonObject.getString("refresh_token"));

log.error("获取token refeshToken:{}", jsonObject.getString("refresh_token"));

token.setScope(jsonObject.getString("scope"));

log.error("获取token scope:{}", jsonObject.getString("scope"));

token.setExpiresIn(jsonObject.getInt("expires_in"));

log.error("获取token expires_in:{}", jsonObject.getString("expires_in"));

// token.setUnionid(jsonObject.getString("unionid"));

// log.error("获取token unionid:{}",

// jsonObject.getString("unionid"));

token.setTime(new Date().getTime());

request.getSession().setAttribute(appid + "token", token);

} catch (JSONException e) {

token = null;

// 获取token失败

log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getString("errcode"), jsonObject.getString("errmsg"));

}

}

}

log.error("通过code获取token getOAUTH2 end=================================");

return token;

}

 

/**

* 获取用户信息

* @param openid

*            凭证

* @param access_token

*            密钥

* @return

*/

public static Account getUserinfo(String openid, String access_token) {

log.error("通过openid,access_token获取获取用户信息 getUserinfo start=================================");

HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);

String requestUrl = ConfigUtil.TOKEN_URL.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);

// 发起GET请求获取凭证

JSONObject jsonObject = JSONObject.fromObject(httpsRequest(requestUrl, "GET", null));

log.error("获取getUserinfo jsonObject====================", jsonObject.toString());

Account account = null;

if (null != jsonObject) {

try {

account = new Account();

account.setAccessToken(jsonObject.getString("access_token"));

log.error("获取account access_token:{}", jsonObject.getString("access_token"));

account.setOpenId(jsonObject.getString("openid"));

log.error("获取account openId:{}", jsonObject.getString("openid"));

account.setNickname(jsonObject.getString("nickname"));

log.error("获取account nickname:{}", jsonObject.getString("nickname"));

account.setProvince(jsonObject.getString("province"));

log.error("获取account province:{}", jsonObject.getString("province"));

account.setCity(jsonObject.getString("city"));

log.error("获取account city:{}", jsonObject.getString("city"));

request.getSession().setAttribute(FrontContainer.USER_INFO, account);

} catch (JSONException e) {

account = null;

// 获取token失败

log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getString("errcode"), jsonObject.getString("errmsg"));

}

}

log.error("通过openid,access_token获取获取用户信息 getUserinfo end=================================");

return account;

}

 

// JAVA 获取完整URL 方法

public static String getRequestURL(HttpServletRequest request) {

log.error("获取请求信息 getRequestURL start=================================");

if (request == null) {

return "";

}

String url = "";

url = request.getContextPath();

url = url + request.getServletPath();

log.error("获取请求信息getRequestURL url=================================" + url);

 

if (!"".equals(request.getQueryString()) || request.getQueryString() != null) {

url = url + "?" + request.getQueryString();

}

 

/*

* java.util.Enumeration names = request.getParameterNames(); int i = 0;

* if (names != null) { while (names.hasMoreElements()) { String name =

* (String) names.nextElement(); if (i == 0) { url = url + "?"; } else {

* url = url + "&"; } i++;

* String value = request.getParameter(name); if (value == null) { value

* = ""; }

* url = url + name + "=" + value; try { //

* java.net.URLEncoder.encode(url, "ISO-8859"); } catch (Exception e) {

* e.printStackTrace(); } } }

*/

log.error("获取请求信息getRequestURL 参数 names=================================" + url);

try {

// String enUrl = java.net.URLEncoder.encode(url, "utf-8");

} catch (Exception ex) {

ex.printStackTrace();

}

log.error("获取请求信息getRequestURL end=================================");

return url;

}

 

/**

* 通过accessToken获取jsapi_ticket

* @param accessToken

* @param request

* @return

*/

public static Token getJsapi_ticket(String accessToken, HttpServletRequest request) {

Token token = null;

if (request.getSession() != null) {

token = (Token) request.getSession().getAttribute(accessToken + "ticket");

}

String requestUrl = ConfigUtil.JSAPI_TICKET.replace("ACCESS_TOKEN", accessToken);

if (null == token || ((new Date().getTime() - token.getTime()) / 1000) > 7150) {

// 发起GET请求获取凭证

JSONObject jsonObject = JSONObject.fromObject(httpsRequest(requestUrl, "GET", null));

log.error("获取token jsonObject====================", jsonObject.toString());

if (null != jsonObject) {

try {

token = new Token();

token.setAccessToken(jsonObject.getString("ticket"));

log.error("获取token ticket:{}", jsonObject.getString("ticket"));

token.setExpiresIn(jsonObject.getInt("expires_in"));

log.error("获取token expires_in:{}", jsonObject.getString("expires_in"));

token.setTime(new Date().getTime());

request.getSession().setAttribute(accessToken + "ticket", token);

} catch (JSONException e) {

token = null;

// 获取token失败

log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getString("errcode"), jsonObject.getString("errmsg"));

}

}

}

return token;

}

 

public static String urlEncodeUTF8(String source) {

String result = source;

try {

result = java.net.URLEncoder.encode(source, "utf-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return result;

}

 

}

分享到:
评论

相关推荐

    微信支付 v3php版本

    请求型接口是将参数封装成xml,以post方式提交到微信,微信响应结果;响应型接口则是响应微信的post请求。Wxpay_client_是请求型接口的基类。Wxpay_server_是响应型接口的基类。Wxpay_client_、Wxpay_server_都继承...

    wechat.zip

    1.CommonUtil内包括 发起https请求并获取结果工具、获取access_token工具、URL编码(utf-8)工具、根据类型判断文件扩展名工具 2.MyX509TrustManager为证书信任管理器 3.SignUtil 为验证消息真实性(请求来源于微信)...

    PHP微信支付WxPayPubHelper

    * Native支付——请求商家获取商品信息接口--NativeCall * 【其他】 * 静态链接二维码--NativeLink * JSAPI支付--JsApi * ===================================================== * 【CommonUtil】常用工具:...

    微信jsapi支付demo

    前端采用jsapi发起支付时,弹出“支付签名验证失败”的微信签名解决demo参考(已经实践验证过) 构建支付参数,以便前端Js可以jsAPi的唤起微信支付 ArrayList<String> list = new ArrayList(); list.add(appId); ...

    CommonUtil:日常通用的工具类

    7. **权限管理**:对于Android开发,CommonUtil可能包含处理运行时权限请求的工具类,简化权限申请流程。 8. **加密解密**:如MD5、SHA等哈希算法,或者AES、RSA等加密算法的实现,确保数据的安全性。 9. **异常...

    Algorithm-commonUtil.zip

    在IT行业中,算法是至关重要的组成部分,特别是在编程和软件开发领域。"Algorithm-commonUtil.zip"这个压缩包文件,从名称来看,很可能包含了用于通用算法实现的Java代码库,特别是针对Android平台。Java作为一种...

    CommonUtil:轻便简单的Java常用工具类库

    本仓库是Java开发常用工具类的总结,旨在追求给大家提供一个轻便简单的工具类库,同时能够cover住大家80%以上的工具类的需求。如果对你有用欢迎点个star,此外,如果你有兴趣和我一起维护该仓库,欢迎提PR或者issue...

    CommonUtil.java

    工作中经常使用的Java工具类分享,做Java开发用得上。

    ajax js和java封装好的工具

    **Java**在后台处理AJAX请求,通常涉及接收请求、执行业务逻辑、操作数据库以及返回结果。Struts2提供了一套MVC(Model-View-Controller)架构,使得开发者能够更轻松地处理HTTP请求和响应。在这个工具中,Java代码...

    commonutil:kevin所有工程的通用工具类

    "commonutil"可能包含了如字符串处理、日期时间操作、网络请求、数据序列化等不同模块,每个模块负责一个特定的任务,使得代码结构清晰,易于维护。 2. **工具类(Utility Class)**:在Java中,工具类通常是一些...

    call中方法实现的步骤.docx

    总结起来,实现`call`层方法调用接口的步骤包括理解接口协议、创建并组装请求报文、获取请求报文头、组装完整请求、调用接口以及处理返回结果。这些步骤确保了外部或内部接口的正确调用和数据交换,是业务逻辑实现的...

    Android开发最常用工具类

    Android开发最常用工具类 AppUtils DensityUtils HttpUtils KeyBoardUtils NetUtils ScreenUtils SDCardUtils SPUtils T AssetUtils CommonUtil Constants DataCleanManager DialogUtil FileUtils GsonTools ...

    android-common-util.rar

    3. **android-common-master**:这可能是核心的通用工具库项目,包含了各种Android开发中常用的功能模块,比如网络请求、数据解析、文件操作、日期时间处理、权限管理等。开发者可以将其作为一个依赖库引入到自己的...

    加签应用安全

    - **请求方法**:POST方式,这是向服务器发送数据的标准方法,适合于发送包含敏感信息的请求。 - **请求地址**:`https://xxxxx:xxxx/api/pama.do`,其中具体的IP地址和端口号由主账户端提供。 - **编码规范**:所有...

    java代码开发常用工具类

    6.request请求处理工具类:CommonUtil 7.类型转换器:Convert 8.时间工具类:DateUtils 9.Excel导出工具类:ExportExcel 10.ID生成器工具类:IdUtils 11.反射工具类:ReflectUtils 12.xml转为java对象,java对象转...

    android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)

    这些工具类的方法是Android开发中非常常见且实用的,它们帮助开发者快速地获取设备信息,进行网络检测,以及进行UI相关的尺寸转换,提高了代码的复用性和效率。在实际项目中,根据需求,可以扩展此类,添加更多的...

Global site tag (gtag.js) - Google Analytics