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

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

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

}

 

微信H5跳转公众号关注页面通常涉及到微信的JSSDK(JavaScript SDK),特别是其中的`wx.navigateToMiniProgram`或者`wx.redirectToMiniProgram`方法。以下是简单的步骤: 1. 首先,在微信公众平台上获取一个用于打开小程序的临时二或小程序链接。 2. 在H5页面中,需要引入微信的JSAPI库,并通过`wx.config`初始化配置,提供合法域名等必要信息。 ```javascript wx.config({ debug: false, appId: 'your_app_id', // 小程序AppID timestamp: timestamp, // 调用接口返回的时间戳 nonceStr: nonceStr, // 调用接口返回的noncestr signature: signature, // 签名 jsApiList: ['redirectToMiniProgram'] }); ``` 3. 当用户点击某个按钮或者满足触发条件时,可以调用相应的函数,例如: ```javascript wx.navigateToMiniProgram({ programInfo: { appid: 'your_miniprogram_appid', // 小程序AppID path: '/pages/index/index' // 关注页面路径 }, success(res) { console.log('成功跳转'); }, fail(err) { console.error('失败:', err); } }); ``` 4. 如果你想让用户直接关注公众号而不是小程序,可以使用`redirecttouser`代替,但前提是你已经设置了对应的公众平台菜单或自定义菜单。 注意:上述操作需要确保你的公众号已关联了小程序,且H5页面的域名已在公众号设置中白名单授权。同时,根据微信官方规则,频繁引导关注可能会被视为滥用,所以在实际应用中需谨慎处理
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值