package cn.shrmus.wxshare.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import cn.shrmus.wxshare.pojo.AccessToken;
import cn.shrmus.wxshare.pojo.JsApiTicket;
/**
* 接收传过来的参数通过http请求用来获取access_token和jspticket
* <p>Title:CommonUtil</p>
* <p>Description:</p>
* @author Shr
* @date 2018年10月16日上午1:09:37
* @version
*/
public class CommonUtil {
// private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
// 凭证获取(GET)——access_token
public final static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
// 微信JSSDK的ticket请求URL地址——jsapi_ticket
public final static String JSAPI_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
/**
* 获取接口访问凭证
*
* @param appid
* 凭证
* @param appsecret
* 密钥
* @return
*/
public static AccessToken getAccessToken(String appid, String appsecret) {
AccessToken accessToken = null;
String requestUrl = ACCESS_TOKEN_URL.replace("APPID", appid).replace("APPSECRET", appsecret);
// 发起GET请求获取凭证
JsonNode rootNode = httpsRequest(requestUrl, "GET", null);
if (null != rootNode.get("access_token")) {
accessToken = new AccessToken();
accessToken.setAccessToken(rootNode.get("access_token").textValue());
accessToken.setExpiresIn(toInt(rootNode.get("expires_in").toString()));
}
return accessToken;
}
/**
* 调用微信JS接口的临时票据
*
* @param access_token
* 接口访问凭证
* @return
*/
public static JsApiTicket getJsApiTicket(String access_token) {
String requestUrl = JSAPI_TICKET_URL.replace("ACCESS_TOKEN", access_token);
// 发起GET请求获取凭证
JsonNode rootNode = httpsRequest(requestUrl, "GET", null);
JsApiTicket jsApiTicket = null;
if (null != rootNode.get("ticket")) {
jsApiTicket = new JsApiTicket();
jsApiTicket.setTicket(rootNode.get("ticket").textValue());
jsApiTicket.setExpiresIn(toInt(rootNode.get("expires_in").toString()));
}
return jsApiTicket;
}
public static Integer toInt(String str) {
if (str == null || str.equals("")) {
return null;
}
return Integer.valueOf(str);
}
/**
* 发送https请求
*
* @param requestUrl
* 请求地址
* @param requestMethod
* 请求方式(GET、POST)
* @param outputStr
* 提交的数据
* @return rootNode(通过rootNode.get(key)的方式获取json对象的属性值)
*/
public static JsonNode httpsRequest(String requestUrl, String requestMethod, String outputStr) {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = null;
StringBuffer buffer = new StringBuffer();
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");
if ("GET".equalsIgnoreCase(requestMethod))
conn.connect();
// 当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;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
// 释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
conn.disconnect();
rootNode = mapper.readTree(buffer.toString());
} catch (ConnectException ce) {
// log.error("连接超时:{}", ce);
} catch (Exception e) {
e.printStackTrace();
// log.error("https请求异常:{}", e);
}
return rootNode;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
wxsharedemo20181015.zip (63个子文件)
wxsharedemo20181015
.project 1KB
src
test
resources
java
main
webapp
WEB-INF
pages
web.xml 38B
index.jsp 909B
page1.jsp 5KB
js
jquery-3.2.1.js 85KB
page2.jsp 5KB
resources
application.properties 474B
templates
index.html 636B
index.jsp 909B
page1.jsp 5KB
page2.html 5KB
jquery-3.2.1.js 85KB
page2.jsp 5KB
page1.html 5KB
static
js
jquery-3.2.1.js 85KB
java
cn
shrmus
wxshare
init
InitParameters.java 2KB
pojo
JsApiTicket.java 666B
AccessToken.java 706B
utils
ServletContextUtil.java 1KB
MyX509TrustManager.java 672B
CommonUtil.java 5KB
thread
JsApiTicketThread.java 1KB
AccessTokenThread.java 2KB
controller
PagesController.java 502B
InitAccessTokenController.java 3KB
Main.java 293B
target
wxsharedemo20181015-0.0.1-SNAPSHOT.jar 18.51MB
maven-status
maven-compiler-plugin
testCompile
default-testCompile
inputFiles.lst 0B
compile
default-compile
createdFiles.lst 504B
inputFiles.lst 955B
generated-sources
annotations
classes
cn
shrmus
wxshare
init
InitParameters.class 2KB
pojo
AccessToken.class 862B
JsApiTicket.class 847B
utils
ServletContextUtil.class 1KB
CommonUtil.class 5KB
MyX509TrustManager.class 950B
Main.class 702B
thread
JsApiTicketThread.class 2KB
AccessTokenThread.class 2KB
controller
InitAccessTokenController.class 4KB
PagesController.class 620B
application.properties 516B
templates
index.html 636B
index.jsp 909B
page1.jsp 5KB
page2.html 5KB
jquery-3.2.1.js 85KB
page2.jsp 5KB
page1.html 5KB
static
js
jquery-3.2.1.js 85KB
wxsharedemo20181015-0.0.1-SNAPSHOT.jar.original 86KB
maven-archiver
pom.properties 107B
test-classes
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 543B
org.eclipse.wst.validation.prefs 50B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.core.resources.prefs 191B
org.eclipse.wst.common.component 713B
.jsdtscope 639B
pom.xml 1KB
.classpath 1KB
共 63 条
- 1
资源评论
- 希望对你有帮助2019-12-27不行啊这个
专业技术人员继续教育学习助手
- 粉丝: 67
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功