微信扫维码关注公众号,已关注则跳转业务页面

业务需求就是生成微信二维码 微信扫维码关注公众号,已关注则跳转业务页面,没关注则跳转关注页面

1 生成需要扫的二维码

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=“这个是回调页面的url”&response_type=code&scope=snsapi_base&state=MC101812003951#wechat_redirect

这个url 可以用草料二维码生成

scope =snsapi_base 这个是静默授权,就是用户扫码后默认获取一些用户信息,

state 这个参数可以带一些信息给业务页面

 

微信扫一扫后,微信的服务器将页面将跳转至 redirect_uri/?code=CODE&state=STATE。


这里的回调url要用https 不然腾讯的服务器会访问2次,导致第二次用同一个code 访问获取openid的接口出现40163的错误 code 已经使用  如果你用的是测试号不会出现这个问题。

 

2  获取参数code的值 get 请求到 
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID &secret=SECRET&code=CODE&grant_type=authorization_code  

 


3   获得response 的json ,解析出openid ,//这里响应中的access_token是网页授权的access_token 可以无限次调用,和下面的access_token不一样

 

4   //这步记得要设置服务器的ip 白名单 
get 请求到   https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET

获取响应中的  access_token  这个access_token 根据微信号的不同,我的测试号是2000次 认证后的号有10W次 可以在申请更多的次数,每次的有效期是7200s

 

5   获得到openid 和 access_token 后     get 的请求到
//这里的access_token每次请求都要最新的,也就是说调用下面这个接口的时候上面必须请求拿到最新的access_token
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

 

6   获得接口response 的json ,解析出subscribe 
//关注
if(subscribe  ==1){

    转发到 业务页面 //这个页面要在你设置的域名下面
}else{

    转发到关注页面
  https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU3MzQ1OTU2NQ==&scene=126&bizpsid=0#wechat_redirect
这个生成url 的步骤 

点击公众号主页面,点击全部消息,右上角的。。。 复制链接 就是这个公众号的关注页面了
}

代码如下

这里用到是原生的servlet

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;
import util.PostAndGet;
import util.tokenUtil;

/**
 * Servlet implementation class FollowService
 */



public class FollowService extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// TODO Auto-generated method stub
		
		response.setContentType("text/html;charset=utf-8");//响应的字符集类型
		PrintWriter out = response.getWriter();//设置输出流
		
		String code=(String) request.getParameter("code");
		String state=(String) request.getParameter("state");
		String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID"
				+ "&secret=SECRET&code="+code+"&grant_type=authorization_code";
	
	
		JSONObject responseJson =PostAndGet.creatGetMsg(url);
		//______________________________________________________________________________________________________
		

		String openid = responseJson.get("openid").toString();	
		 
		String  access_token=tokenUtil.getNewToken();		 
		String url2="https://api.weixin.qq.com/cgi-bin/user/info?"
				+ "access_token="+access_token+"&openid="+openid+"&lang=zh_CN";	 
		    JSONObject responseJson1 =PostAndGet.creatGetMsg(url2);
		
		
		 String subscribe=responseJson1.getString("subscribe");
			
		
		//关注
		if(subscribe.equals("1")) {
			out.println("你已经关注了");
			out.println(responseJson.toString());
			out.println(responseJson1.toString());
			
		}else {		
					
			response.sendRedirect
			("https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=BIZ&scene=126&bizpsid=0#wechat_redirect");
		}
		
		
		
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个基于Spring Boot的微信扫码登录示例: 1. 首先,需要在微信公众平台中创建一个开发者账号,并创建一个公众号。 2. 在Spring Boot项目中添加以下依赖: ``` <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>3.4.</version> </dependency> ``` 3. 在application.properties中配置微信公众号的相关信息: ``` wechat.mp.appId=your_app_id wechat.mp.secret=your_secret wechat.mp.token=your_token wechat.mp.aesKey=your_aes_key ``` 4. 创建一个Controller,用于处理微信扫码登录的请求: ``` @RestController public class WechatLoginController { @Autowired private WxMpService wxMpService; @GetMapping("/wechat/login") public String wechatLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { String redirectUrl = "http://your_domain.com/wechat/callback"; String state = UUID.randomUUID().toString(); String url = wxMpService.oauth2buildAuthorizationUrl(redirectUrl, WxConsts.OAuth2Scope.SNSAPI_USERINFO, state); response.sendRedirect(url); return null; } @GetMapping("/wechat/callback") public String wechatCallback(HttpServletRequest request, HttpServletResponse response) throws Exception { String code = request.getParameter("code"); String state = request.getParameter("state"); WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null); // TODO: 处理用户信息 return "success"; } } ``` 5. 在微信公众平台中配置授权回调域名为http://your_domain.com,并将http://your_domain.com/wechat/callback添加到网页授权域名中。 6. 启动Spring Boot应用,访问http://your_domain.com/wechat/login即可进行微信扫码登录。 希望这个示例能够帮助到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值