PC端微信授权

/**
 * 微信授权配置类
 * 
 * @author lmj
 *
 *         2021年7月15日
 */
@Component
@Data
@ConfigurationProperties(prefix = "wechat")
public class WeChatConfig {
    private String appid;// 应用唯一标识,审核通过获得
    private String redirecturi;// 回调地址
    private String appsecret;// 应用程序秘钥

    private String teacherappid;
    private String teacherappsecret;
    /** 微信小程序 id */
    private String AppletsAppID;
    /** 微信小程序 密钥 */
    private String AppletsAppSecret;
}


/**
 * 微信授权
 * 
 * @author lmj
 *
 *         2021年7月15日
 */
@Slf4j
public class HttpUtils {

	// 微信 获取code
	public static String apiToCode = "https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
	// 微信 获得 access_token
	public static String apiToAccessToken = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
	// 微信 检查access_token是否有效 返回40003为错误
	public static String api40003 = "https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID";
	// 微信 获取用户信息
	public static String apiToUser = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
	// 微信 获取RefreshToken信息
	public static String apiToRefreshToken = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN";
	// 微信小程序
	/** 微信小程序获取人物信息 */
	public static String code2Session = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code";
	// 阿里云 获取Code
	public static String AliapiToCode = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=ENCODED_URL&state=init";

	public static Object getHttp(String URL) {
		Object object = null;
		JSONObject jsonObject = null;
		HttpGet httpGet = new HttpGet(URL);// get请求
		try {
			CloseableHttpClient httpClient = HttpClients.createDefault();// 请求模板
			HttpResponse httpResponse = null;// 执行请求
			httpResponse = httpClient.execute(httpGet);
			if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				HttpEntity entity = httpResponse.getEntity();// 获取值
				String info = EntityUtils.toString(entity, "utf-8");
				jsonObject = JSONObject.fromObject(info);
				System.out.println(" 工具类中的信息 " + jsonObject.toString());
				httpClient.close();
			} else {
				log.info("=======请求失败=========" + 
                httpResponse.getStatusLine().getStatusCode());
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			httpGet.abort();
		}
		return jsonObject;
	}
}


@Autowired
	private WeChatConfig WeChat;

	@AutoLog(value = "微信登录授权")
	@ApiOperation(value = "微信登录授权", notes = "微信登录授权")
	@GetMapping(value = "/test")
	public Result<?> test(@RequestParam String code) {
		/**
		 * 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要)
		 * 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
		 */

		String appid = WeChat.getAppid(); // 应用唯一标识,审核通过获得
		String Appsecret = WeChat.getAppsecret();

		// 第二步 通过code换取网页授权access_token
		String api2 = HttpUtils.apiToAccessToken;
		api2 = api2.replace("APPID", appid).replace("SECRET", Appsecret).replace("CODE", code);

		Object object = HttpUtils.getHttp(api2);

		System.out.println("Object 第二步获取token数据:" + object);
		JSONObject jsonObject = JSONObject.fromObject(object);

		// 第三步 拉取用户信息(需scope为 snsapi_userinfo)
		// 编译 接口地址
		String api3 = HttpUtils.apiToUser;
		Object token = jsonObject.get("access_token");
		String openid = jsonObject.getString("openid");
		api3 = api3.replace("ACCESS_TOKEN", token.toString()).replace("OPENID", openid);
		// 获取用户信息
		Object object2 = HttpUtils.getHttp(api3);
		JSONObject user = JSONObject.fromObject(object2);
		// 通过unionid在数据库中进行查询
		QueryWrapper<LoginAccountInformation> loginQuery = new QueryWrapper<LoginAccountInformation>();
		String unionid = user.get("unionid").toString();
		loginQuery.eq("unionid", unionid);
		LoginAccountInformation login = loginService.getOne(loginQuery);
		if (login != null) {
			return Result.ok(login);
		} else {
			redisUtil.set(unionid, unionid, 3 * 60);
			return Result.ok("此用户还未注册过!");
		}
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值