微信静默授权

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;
}

}

时间: 2024-11-04 07:57:39

微信静默授权的相关文章

网站微信静默授权流程

静默授权登录方法写在基类中.需要静默授权注册登录的页面继承此方法即可. 1.  用户访问有调用此方法的页面 2.  判断是否登录状态,未登录则执行第三步 3.  判断是否微信中,如果是,则执行第四步 4.  判断url中是否有code参数(注:微信授权后的回调url中一定会带上此参数,所以,我们自己的站点切不可随意在url中加此参数).如果没有code参数,则执行第5步.否则,执行第7步 5.  判断用户24小时内是否主动点过退出登录,如果是,则不再执行静默授权登录流程.如果否,则执行第6步 6

微信静默授权问题

微信中需要获取openid,为了安全起见,采用服务器端静默授权方式,最终过程是: 前端页面(获取openid) -> 指定服务器端地址 -> 服务器端跳转到微信授权页 -> 微信授权页跳回服务器端 -> 服务器端跳回前端页面 在这里会存在一个问题,即微信授权返回死循环问题,因为这边前端跳转全部都是使用replace跳转,所以不会在history上再增加1一个页面,后来以为是我们服务器的问题,然后撇开微信直接让服务器端返回一个假的openid发现是可以返回的,所以问题出在微信的授权问

微信第三方登录与静默授权和非静默授权

微信的授权登录在日常应用中应用的非常广泛,最多就是第三方登录 微信登录分为两类:授权登录(非静默授权)与静默授权 授权登录:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关注相关微信公众号等都可以获取. 静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid,无法获取用户的个人信息,对于用户的简单认证还是很有用的.

微信公众号(静默授权和分享)

微信网页授权 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+ appId +'&redirect_uri=' + redirectUri + '&response_type=code&scope=snsapi_base#wechat_redirect' 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回

小程序-文章:微信第三方登录(静默授权和非静默授权)

ylbtech-小程序-文章:微信第三方登录(静默授权和非静默授权) 1.返回顶部 1. 用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 微信的授权登录在日常应用中应用的非常广泛,越来越多的平台支持用户使用微信进行授权第三方登录 使用微信授权登录有哪些优势/好处: 1.用户量足够大,基本所有用户都会有微信,登录起来比较方便快捷: 2.微信作为一个开放平台,为众多公众号/服务开放了许多服务接口,让公众号能够为自己的用户提供更加个性.更加优质

.NET Core中 实现H5微信登录(静默授权方式)

需求 假设现在有一个H5需要有微信登录.手机号登录.邮箱登录 三种登录方式.让我们一起来看看微信登录如何实现吧 界面: 最终实现的效果图(登录成功后返回个人页): 因为微信登录目前没有实现移动端的其他浏览器授权登录,所以,再用除微信以外的浏览器操作登录时,我们需要给出用户提醒,比如这样: 实现 准备工作 登录服务号或订阅号的微信公众号后台,找到AppId以及AppSecret.后面会用到 在公众号设置中,设置安全域名.js域名以及网页授权域名 其中再网页授权域名设置的时候需要注意,将腾讯提供的一

微信网页授权获取用户基本信息

微信公众号可以通过微信网页授权机制,来获取用户基本信息,可以用于微信登录功能 关于网页授权的两种scope的区别说明 1.静默授权:以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回调页(往往是业务页面) 2.显示授权:以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的.但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的

玩玩微信公众号Java版之六:微信网页授权

我们经常会访问一些网站,用微信登录的时候需要用到授权,那么微信网页授权是怎么一回事呢,一起来看看吧! 参考官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方的文档有很详细的说明,这里就主要分析重要的几点: 第一,网页授权分类及说明: 1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回调页(往往

微信网页授权-获取用户信息

第一步:修改网页授权安全域名,什么叫安全域名?安全域名就是说只有这个域名的网页才可以安全的进行网页授权以及获取用户信息. 第二步:下载下这个 MP_verify_Sb2ASLINFP09cMn6.txt(点击下载)放到你的服务器根目录下,可以通过你上面配置的域名直接访问的到,即:http://www.zheyue.me/MP_verify_Sb2ASLINFP09cMn6.txt  可以访问的到.点击确认完成. 第三步: 对自己做的网页地址进行包装,引导客户点击新包装的地址即可.例: https