java 企业号 code,微信企业号授权(含代码)

/**

* 根据code获取userId后跳转到需要带用户信息的最终页面

* @param request

* @param code 获取微信重定向到自己设置的URL中code参数

* @return

*/

@ResponseBody

@RequestMapping(value = { "/oauth2url" })

@CrossOrigin

public R Oauth2MeUrl(HttpServletRequest request, @RequestParam String code) {

R r = new R();

UserMDLVo userMDLVo = new UserMDLVo();

UserDO userDO = new UserDO();

String openId=oAuth2Service.Oauth2MeUrl(request, code);

if(null==openId||"".equals(openId)){

userMDLVo.setOpenId("");

r.put("Msg", "openId为空!");

r.put("code", 0);//code无效查不出openID

}else{

userDO = userService.findUserListByOpenId(openId);

if(null==userDO || "".equals(userDO) ){

r.put("code", 2);//openID存在,用户不存在,进行验证码登录

r.put("openId", openId);

r.put("msg", "用户不存在");

}else{

r.put("openId", openId);

r.put("code", 1);

r.put("userId", userDO.getUserId());

r.put("msg", "用户存在");//openID存在,用户存在,进入系统

}

}

return r;

}

/**

*

* @Title: Oauth2MeUrl

* @Description: 根据code获取openId

* @param code

* @param request

* @param

* @return String

* @throws

* @author

* @date 2018年7月22日 下午2:30:13

*/

@Override

public String Oauth2MeUrl(HttpServletRequest request, String code) {

String openId="";

//获取企业号AccessToken

AccessToken accessToken = QiYeUtil.getAccessToken(Constants.CORPID, Constants.Secret);

//获取request对象关联的session对象,如果没有session,则返回一个新的session

HttpSession session = request.getSession();

if (accessToken != null && accessToken.getToken() != null) {

//将AccessToken存储到session中

session.setAttribute("accessToken", accessToken);

//调用接口获取openId openId为空

openId = QiYeUtil.getMemberGuidByCode(accessToken.getToken(), code, Constants.AGENTID);

if (openId != null && openId.length()!=0) {

// 将openId存储到session中

session.setAttribute("openId", openId);

//根据openId查找用户id

return openId;

}

}

return openId;

}

/**

* 微信企业号调用类 {"errcode":0,"errmsg":"ok"} 此结果表示调用方法成功返回

*

* @author xumy

*

*/

public class QiYeUtil {

/**

* 获取企业号AccessToken

*

* @param CorpID

* @param CorpSecret

* @return

*/

public static AccessToken getAccessToken(String CorpID, String CorpSecret) {

AccessToken accessToken = WechatAccessToken.getAccessToken(CorpID,CorpSecret, 1);

System.out.println("accessToken=" + accessToken);

return accessToken;

}

/**

* OAuth2验证接口根据code获取成员信息

* @param token

* @param code

* @param AgentID

* @return

*/

public static Result oAuth2GetUserByCode(String token, String code,

int AgentID) {

Result result = new Result();

//根据code获取成员信息

JSONObject jo = WechatOAuth2.getUserByCode(token, code, AgentID);

if (jo != null && jo.size()!=0) {

try {

//getString中的参数为空,会抛出异常

String userId = jo.getString("UserId");

if (userId != null && userId.length() > 0) {

result.setErrmsg("");

result.setErrcode("0");

result.setObj(userId);

} else {

result.setErrmsg(jo.getString("errmsg"));

result.setErrcode(jo.getString("errcode"));

}

} catch (Exception e) {

result.setErrmsg("accessToken 超时......");

result.setErrcode("42001");

}

}

return result;

}

/**

* 构造带员工身份信息的URL

*

* @param corpid

* 企业id

* @param redirect_uri

* 授权后重定向的回调链接地址,请使用urlencode对链接进行处理

* @param state

* 重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值

* @return

*/

public static String oAuth2Url(String corpid, String redirect_uri) {

try {

//解决接口GET请求中文参数的问题

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

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

//state参数

String oauth2Url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + corpid + "&redirect_uri=" + redirect_uri

+ "&response_type=code&scope=snsapi_base&state=xumy#wechat_redirect";

return oauth2Url;

}

/**

* 调用接口获取用户信息

*

* @param token

* @param code

* @param agentId

* @return

* @throws SQLException

* @throws RemoteException

*/

public static String getMemberGuidByCode(String token, String code, int agentId) {

//根据code获取成员信息,result.getObj()返回用户id

Result result = QiYeUtil.oAuth2GetUserByCode(token, code, agentId);

if (result.getErrcode() == "0") {

if (result.getObj() != null) {

// 此处可以通过微信授权用code的Userid查询自己本地服务器中的数据

return result.getObj();

}

}

return "";

}

}

package com.bootdo.common.domain;

public class AccessToken {

// 获取到的凭证

private String token;

// 凭证有效时间,单位:秒

private int expiresIn;

public String getToken() {

return token;

}

public void setToken(String token) {

this.token = token;

}

public int getExpiresIn() {

return expiresIn;

}

public void setExpiresIn(int expiresIn) {

this.expiresIn = expiresIn;

}

}

public class WechatOAuth2 {

private static final String get_oauth2_url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE&agentid=AGENTID";

/**

* 根据code获取成员信息

*

* @param token

* @param code

* @param AgentID

* @return

*/

public static JSONObject getUserByCode(String token, String code, int AgentID) {

//String menuUrl ="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token="+token+"&agentid="+AgentID+"&code="+code;

String menuUrl = get_oauth2_url.replace("ACCESS_TOKEN", token).replace("CODE", code).replace("AGENTID", AgentID + "");

//发起https请求并获取结果

JSONObject jo = HttpRequestUtil.httpRequest(menuUrl, EnumMethod.GET.name(), null);

System.out.println("jo=" + jo);

return jo;

}

}

public class Constants {

/**

* 常量说明:

* 此处定义的常量需要持久化,可以保存在数据库中,在需要的地方读取。

* 在多企业号中,最好以每个应用来定义。

*/

public static final int AGENTID = 888888888888;

public static final String TOKEN = "***********";

public static final String CORPID = "8888888888888";

public static final String Secret = "yuuigjhk7698kh9gkjl";

public static final String encodingAESKey = "7elblhwDERg1IC9bcHdRCL16TjOfP1C3h8yyowpUtck";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值