博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信静默授权
阅读量:4589 次
发布时间:2019-06-09

本文共 4385 字,大约阅读时间需要 14 分钟。

 

public class WXUtil {

private static String appid = ""; 
private static String secret = ""; 
private static String token_url = "https://api.weixin.qq.com/cgi-bin/token";
private static String ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
public static String wx_jsapiticket = "";
// public static String wx_accesstoken = "";
// public static String wx_jsapiticket = "sM4AOVdWfPE4DxkXGEs8VKn28rHes_cWG6CZiaKmN5FAV6H24W2R5m9KG6ndDlxULINyBD3HL1_vv-TrO5LJfQ";
private static Log log = LogFactory.getLog(WXUtil.class);
public static void getWxDate(HttpServletRequest request){
try{
String jsapi_ticket = wx_jsapiticket;
String noncestr = WXUtil.getRandomString(16);
String timestamp = String.valueOf(System.currentTimeMillis()/1000);
String urlData = "jsapi_ticket="+jsapi_ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+CommonUtil.getBasePath(request);
String signature = WXUtil.getSha1(urlData);
request.setAttribute("wx_noncestr", noncestr);
request.setAttribute("wx_timestamp", timestamp);
request.setAttribute("wx_signature", signature);
}catch(Exception e){
log.error("微信页面初始化失败======>"+e.getMessage());
e.printStackTrace();
}
}
public static String getAppsecrect() throws Exception{
String appsecrect = "";
String urlDate = "grant_type=client_credential&appid="+appid+"&secret="+secret;
String json = CommonUtil.postURL(urlDate, token_url);
appsecrect = CommonUtil.viewJsonKey(json,"access_token");
log.info(new Timestamp(System.currentTimeMillis())+"getAppsecrect 微信获取access_token=====>"+json);
if(appsecrect == null || "".equals(appsecrect)){
throw new Exception("getAppsecrect access_token失败=====>"+json);
}
// wx_accesstoken=appsecrect;//server端微信模板使用
return appsecrect;
}
public static String getJsApiTicket() throws Exception{
log.info("请求微信ticket=====>");
String token = WXUtil.getAppsecrect();
String urlDate = "access_token="+token+"&type=jsapi";
String json = CommonUtil.postURL(urlDate, ticket_url); //活动产品
wx_jsapiticket = CommonUtil.viewJsonKey(json,"ticket");
log.info(new Timestamp(System.currentTimeMillis())+" getJsApiTicket 微信获取ticket=====>"+json);
if(wx_jsapiticket == null || "".equals(wx_jsapiticket)){
throw new Exception("getJsApiTicket ticket失败=====>"+json);
}
return wx_jsapiticket;
}
/**
* sha1签名
* @param url
* @return
*/
public static String getSha1(String url){
try {
MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
digest.update(url.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
public static String getRandomString(int length) { //length表示生成字符串的长度
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
public static void main(String args[]){
try{
String jsapiticket = WXUtil.getJsApiTicket();
System.out.println("jsapiticket======>"+jsapiticket);
}catch(Exception e){
}
}
/**
* 静默授权通过返回的code获取用户微信id
* @param request
* @param response
* @param code
* @return
* @throws UnsupportedEncodingException
*/
public static String getWXinfo(HttpServletRequest request,HttpServletResponse response,String code) throws UnsupportedEncodingException{
String get_access_token_url="https://api.weixin.qq.com/sns/oauth2/access_token?" +
"appid=APPID" +
"&secret=SECRET&" +
"code=CODE&grant_type=authorization_code";
// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
get_access_token_url=get_access_token_url.replace("APPID",appid);
get_access_token_url=get_access_token_url.replace("SECRET", secret);
get_access_token_url=get_access_token_url.replace("CODE", code);
String json=HttpUtil.getUrl(get_access_token_url);
JSONObject jsonObject=JSONObject.fromObject(json);
String openid=jsonObject.getString("openid");
try{
WXUtil.getWxDate(request);
}catch(Exception e){
e.printStackTrace();
}
return openid;
}
}

转载于:https://www.cnblogs.com/haoqijifeng/p/5567996.html

你可能感兴趣的文章
BZOJ 2795: [Poi2012]A Horrible Poem (Hash+思维)
查看>>
HDOJ-1002
查看>>
Tree (四校联考T1)
查看>>
javascript动态合并表格相同的单元格
查看>>
CRM项目上线第一天
查看>>
对象属性特性(可写,可枚举,可配置)
查看>>
5.16
查看>>
Dom EVENT对象
查看>>
[BZOJ3531][Sdoi2014]旅行 树链剖分
查看>>
mybatis运行原理(面试回答)
查看>>
软件结构与环境配置概述
查看>>
20171122
查看>>
CSS3box-shadow属性的使用
查看>>
快速找到未知长度的单链表的中间结点
查看>>
20180320作业1:源代码管理工具调查
查看>>
智能路由器-OpenWRT 系列一 (OpenWRT 刷机)
查看>>
SQLAlchemy与sql语句
查看>>
JAVA核心技术I---JAVA基础知识(回顾)
查看>>
ACCESS数据库注入
查看>>
MFC 对话框 静态文本 编辑框
查看>>