微信开发判断有没有关注_java开发微信怎么判断有没有关注公众号 - CSDN
  • 判断用户是否已关注微信公众号

    万次阅读 2017-10-19 15:47:14
    后来才发现这些用户没有关注公众号。所以需要判断该用户是否关注了公众号再推送。访问下面的URL就可以判断https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh...

    最近做的一个项目在某些时候需要向单独的用户推送消息,在多次测试时总是发现某些用户收不到推送。后来才发现这些用户没有关注公众号。所以需要判断该用户是否关注了公众号再推送。访问下面的URL就可以判断

    https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN

    如果关注了公众号,subscribe为1。如果没有关注公众号subscribe为0。

    今天调试的时候遇到了一个问题耽误了很久。调用了这个URL之后一直出错,信息如下: {“errcode”:40001,”errmsg”:”invalid credential”}
    这个code表示验证失败,而我反复检查了很多次,参数是没有问题的。
    后来才发现微信其实有两种token,一种为access_token一种为token
    我错误的把它当成了普通的token,所以一直请求不对。
    把get请求得到的json做json_decode之后,得到的是一个object对象,$urlobj->subscribe即为处理的结果。

    另外得到access_token的方法为

    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret
    展开全文
  • 判断微信用户是否关注了公众号

    万次阅读 多人点赞 2018-06-01 15:06:39
    微信开发文档中,一个通过token和openid获取用户信息的接口: https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 返回参数: 参 数 ...

     业务描述:当微信用户打开这个页面的链接即判断他/她是否已关注了“我”的公众号。
    在微信开发文档中,有一个通过token和openid获取用户信息的接口:

    https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

    返回参数:

    参 数 说明
    subscribe 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
    openid 用户的标识,对当前公众号唯一
    nickname 用户的昵称
    headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。

    token通过appid、secret调用接口:

    https://api.weixin.qq.com/cgi-bin/token?grant_type="+grant_type+"&appid="+AppId+"&secret="+secret

    即可获取。(token的缓存后面再写)
     但现在这里出现可一个问题。当微信用户和“我”的公众号没有消息的交互,只是在微信浏览器中打开了一个朋友转发的网页链接,我该如何获取openid呢?毕竟,openid是微信用户针对某一个公众号而存在的。最后“我”通过隐式的网页授权登录,也就是网页授权的登录时scope的参数设置为”snsapi_base”。
    通过网页授权code即可获取网页授权token信息以及openid.

    /**
     * 判断用户是否关注了公众号
     * @param token
     * @param openid
     * @return
     */
    public static boolean judgeIsFollow(String token,String openid){
        Integer subscribe
            String url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token="+token+"&openid="+openid+"&lang=zh_CN";
        try {  
                URL urlGet = new URL(url);  
                HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();  
                http.setRequestMethod("GET"); // 必须是get方式请求  
                http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
                http.setDoOutput(true);  
                http.setDoInput(true);  
                http.connect();  
                InputStream is = http.getInputStream();  
                int size = is.available();  
                byte[] jsonBytes = new byte[size];  
                is.read(jsonBytes);  
                String message = new String(jsonBytes, "UTF-8");  
                JSONObject demoJson = JSONObject.fromObject(message);  
                //System.out.println("JSON字符串:"+demoJson);  
                subscribe = demoJson.getInt("subscribe");
    
                is.close();  
        } catch (Exception e) {  
                e.printStackTrace();  
        }
        return 1==subscribe?true:false;
    }
    

    参考微信开发文档中的微信网页授权

    展开全文
  • 1.用户授权获取code ...redirect_uri=编码的回调地址&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect 2.根据code获取到op...

    1.用户授权获取code

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=编码的回调地址&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
    

    2.根据code获取到openid

    $get_openid='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
    $res_openid = object_array(json_decode(http_get($get_openid)));
    

    3.获取到全局的access_token

    $token = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
    $res = object_array(json_decode(http_get($token)));
    这里必须把获取的access_token缓存起来,因为可能会存在其他请求而报错,会报:
    {"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest hint: [2HYQIa0031ge10] "},
    最后返回值:

    array(3) {

    ["subscribe"]=>,//0是未关注,1是已关注

    int(0)

    ["openid"]=>

    string(28) "ocppFw2mJ3jNrQqf465wYokQgi6o"

    ["tagid_list"]=>

    array(0) {

    }

    虽然第二步也有access_token,但是那个是用于授权的,第2和第三的access_token是完全不同的,

    最后:

     

    "https://api.weixin.qq.com/sns/userinfo"  ; 是网页授权的时候用来获取用户信息的

    正确的获取方式是:"https://api.weixin.qq.com/cgi-bin/user/info"; 接口关注公众号

    参考:https://www.cnblogs.com/remon/p/6420418.htmlhttps://blog.csdn.net/pkueecser/article/details/52420895

     

    展开全文
  • 一、微信公众平台配置 参考文章:https://segmentfault.com/a/1190000015268145 1. 获取appid, appsecret,添加白名单 登录微信公众平台,进入基本配置。开发中需要用到两个参数,appId和appSecret(appSecret只...

    一、微信公众平台配置

    参考文章:https://segmentfault.com/a/1190000015268145

    1. 获取appid, appsecret,添加白名单

    登录微信公众平台,进入基本配置。开发中需要用到两个参数,appId和appSecret(appSecret只展示一次,需保存下来,否则需要重置获取)。
    获取access_token时需要添加IP白名单。
     

    2. 添加网页授权

    进入公众号设置=》功能设置=》网页授权域名

    点击设置,input框中输入授权回调页的域名参考第1点(只能填写一个),下载第3点中的txt文档,上传至服务器的根目录。

    二、php后端实现

    微信开放接口全局返回码说明参考:https://mp.weixin.qq.com/wiki...

    1. 获取全局token

    此token有效期为2小时,可以暂存起来,过期后需要重新获取。
    PS: 项目中必须走同一个接口,否则容易互刷导致过期。

    public static function getToken($appid, $appsecret){
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
        return Curl::callWebServer($url);
    }
     
    正确返回结果:
        {
            "access_token": "ACCESS_TOKEN",
            "expires_in": 7200
        }
        返回结果参数说明:
        参数              说明
        access_token      获取到的全局token
        expires_in        凭证有效时间,单位:秒
        
    错误返回结果:
        {"errcode": 40013, "errmsg": "invalid appid"}
        返回结果参数说明:
        返回码    说明
        -1       系统繁忙,此时请开发者稍候再试
        0        请求成功
        40001    AppSecret错误或者AppSecret不属于这个公众号,请开发者确认        AppSecret的正确性
        40002    请确保grant_type字段值为client_credential
        40164    调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)

    2. 获取用户关联公众号的openid

    分两步,先要获取到用户对公众号的授权码,然后拿这个码去获取临时access_token和openid。

    获取用户授权码

    public static function getCode($appId, $redirect_uri, $state=1, $scope='snsapi_base', $response_type='code'){
        $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appId.'&redirect_uri='.$redirect_uri.'&response_type='.$response_type.'&scope='.$scope.'&state='.$state.'#wechat_redirect';
        header('Location: '.$url, true, 301);
    }
     
    正确返回结果:
        返回code码,并且跳转回调页面$redirect_uri
        
    错误返回结果:
        {"errcode": 10003, "errmsg": "redirect_uri域名与后台配置不一致"}
        返回结果参数说明:
        返回码    说明
        10003    redirect_uri域名与后台配置不一致
        10004    此公众号被封禁
        10005    此公众号并没有这些scope的权限
        10006    必须关注此测试号
        10009    操作太频繁了,请稍后重试
        10010    scope不能为空
        10011    redirect_uri不能为空
        10012    appid不能为空
        10013    state不能为空
        10015    公众号未授权第三方平台,请检查授权状态
        10016    不支持微信开放平台的Appid,请使用公众号Appid

    通过getCode获取到的code换取网页授权的access_token和openid

    public static function getAccessToken($code, $appid, $appsecret, $grant_type='authorization_code'){
        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type='.$grant_type.'';
        return Curl::callWebServer($url);
    }
       
    正确返回结果:
        { 
            "access_token": "ACCESS_TOKEN",
            "expires_in": 7200,
            "refresh_token": "REFRESH_TOKEN",
            "openid": "OPENID",
            "scope": "SCOPE"
        }
        返回参数说明
        参数            描述
        access_token    网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
        expires_in    access_token接口调用凭证超时时间,单位(秒)
        refresh_token    用户刷新access_token
        openid    用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
        scope    用户授权的作用域,使用逗号(,)分隔
        
    错误返回结果:
        {"errcode":40029, "errmsg":"invalid code"}

    3. 获取用户信息

    使用第2步中获取的openId和第1步中获取的token去获取用户信息

    public static function getUserInfo($openId, $token){
        $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$token.'&openid='.$openId.'&lang=zh_CN';
        return Curl::callWebServer($queryUrl, '', 'GET');
    }
    正确返回结果:
        {
            "subscribe": 1, 
            "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", 
            "nickname": "Band", 
            "sex": 1, 
            "language": "zh_CN", 
            "city": "广州", 
            "province": "广东", 
            "country": "中国", 
            "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
            "subscribe_time": 1382694957,
            "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
            "remark": "",
            "groupid": 0,
            "tagid_list":[128,2],
            "subscribe_scene": "ADD_SCENE_QR_CODE",
            "qr_scene": 98765,
            "qr_scene_str": ""
        }
        返回参数说明:
            参数            说明
            subscribe       用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
            openid          用户的标识,对当前公众号唯一
            nickname        用户的昵称
            sex             用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
            city            用户所在城市
            country         用户所在国家
            province        用户所在省份
            language        用户的语言,简体中文为zh_CN
            headimgurl      用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
            subscribe_time  用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
            unionid         只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
            remark          公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
            groupid         用户所在的分组ID(兼容旧的用户分组接口)
            tagid_list      用户被打上的标签ID列表
            subscribe_scene 返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENEPROFILE LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_OTHERS 其他
            qr_scene        二维码扫码场景(开发者自定义)
            qr_scene_str    二维码扫码场景描述(开发者自定义)
     
    错误结果:
        {"errcode":40013,"errmsg":"invalid appid"}

    示例:

    /**
    	 * 微信公众号网页授权,通过扫描充电桩二维码
    	 */
    	@RequestMapping(value = "/oauth")
    	public void wechatOAuth2(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		// 微信授权回调URL
    		String url = request.getScheme() + "://" + request.getServerName() + request.getContextPath()
    				+ "/getOAuthUserInfo";
    		// 获取重定向URL
    		String wxUrl = this.wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
    		// 重定向网页授权页面
    		response.sendRedirect(wxUrl);
    	}
    
    	/**
    	 * 通过code获得基本用户信息 详情请见:
    	 * http://mp.weixin.qq.com/wiki/14/bb5031008f1494a59c6f71fa0f319c66.html
    	 *
    	 * @param code
    	 *            code
    	 * @param lang
    	 *            zh_CN, zh_TW, en
    	 */
    	@RequestMapping(value = "/getOAuthUserInfo")
    	public void getOAuthUserInfo(HttpServletRequest request, HttpServletResponse response,
    			@RequestParam(value = "code") String code) throws Exception {
    		try {
    			WxMpOAuth2AccessToken accessToken = this.wxMpService.oauth2getAccessToken(code);
    			WxMpUser wxMpUser = this.wxMpService.getUserService().userInfo(accessToken.getOpenId());
    			// 将用户信息存入session
    			request.getSession().setAttribute(GlobalDeclare.USER_WX_INFO, wxMpUser);
    			// 判断用户是否关注该公众号
    			if(wxMpUser.getSubscribe()){
    				response.sendRedirect(request.getContextPath() + "/jsp/info.html");
    			}else{
    				response.sendRedirect(request.getContextPath() + "/jsp/qrcode.html");
    			}	
    		} catch (WxErrorException e) {
    			this.logger.error(e.getError().toString());
    			response.sendRedirect(request.getContextPath() + "/jsp/qrcode.html");
    		}
    		// response.sendRedirect(request.getContextPath() + "/jsp/info.html");
    	}

    完!!!

    展开全文
  • 最近开发了一个投票活动,用户可上传一张照片,分享微信好友或朋友圈邀请好友点赞,点赞前几名可获得相应的奖品。上传照片的用户必须关注某公众号。 用户点击上传按钮,后台判断用户是否关注公众号,关注则前端可...
  • 判断用户是否关注公众号
  • 目录一、开放平台与公众平台二、 微信公众平台配置1. 获取appid, appsecret,添加白名单正式帐号测试帐号2. 添加网页 一、开放平台与公众平台 微信公众平台: https://mp.weixin.qq.com/cgi-bin/loginpage 微信开放...
  • 微信公众号h5判断用户是否关注公众号的坑获取access_token时注意事项!回调地址注意事项(授权后跳转的地址)! 获取access_token时注意事项! 网页授权access_token和普通access_token这两个玩意不一样,你要获取能...
  • 微信扫描自定义二维码关注公众号

    万次阅读 2017-11-10 12:41:06
    技术要点:1、用户微信扫描二维码时,如何判断是否已经关注该公众号。2、怎么转向关注微信公众号界面,使用户很方便关注。 为电动汽车充电设备开发一套通过微信公众号在线充电产品,产品实现如下功能,通过微信扫描...
  • 微信开发之微信网页授权 完整示例

    万次阅读 2016-09-04 22:39:52
    所有微信开发的相关内容,都需要参考官方文档。 [微信公众平台|开发文档] http://mp.weixin.qq.com/wiki/home/。 一、通过网页授权,可以获取用户微信的基本信息。 二、总共5个步骤: 1 :用户同意授权,...
  • 微信小程序开发过程中,经常会遇到需要判断当前用户是否关注了公众号的业务需求,但是微信没有提供直接判断是否关注公众号的接口,这边提供一种方法,适合就用,不适合也别喷哦。 1、准备工作 开发前我们需要登录...
  • 之前做了一个微信H5页面抽奖的小功能,产品需求是用户在进入页面后判断用户是否已经关注此公众号,若没有关注,则唤起关注公众号页面。
  • 微信开发之架构设计

    2014-10-30 11:45:32
     本文将讲解微信开发的前期准备,包括微信开发上的一些坑、架构上的设计、接口上需要注意的地方,全部来自自己的开发经验,如不对,请指正。   微信开发的坑   1、微信授权  微信...
  • 微信开发-关注与取关条件判断事件 设置好微信公众平台与服务器信息以后就可以获取用户对公众号的操作信息直接上PHP代码: $postStr = @$GLOBALS["HTTP_RAW_POST_DATA"]; // 获取用户...
  • 第一篇 微信商城 开发前的准备工作

    万次阅读 多人点赞 2014-05-11 14:14:04
    随着腾讯微信公众平台号的开放,围绕着微信的各种开发和营销如火如荼。很多商家也开始在微信上做文章,想充分利用微信平台4亿多的粉丝群体来进行各种营销和推广。这直接带来了很多公司开始做微信第3方营销平台,而...
  • 本人最近要做微信公众号网页开发的项目,其中个需求是判断用户是否关注公众号,由于之前没有接触过微信授权的东西,所以提前开始做调研。在度娘上看了好多博客、百度知道、百度经验、知乎问答等,还仔细阅读了微信...
  • 判断该用户是否关注了公众号。访问下面的URL就可以判断 https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN 1 如果关注了公众号,subscribe为1。...
  • 微信公众号开发——关注来源

    千次阅读 2017-05-18 11:14:50
    微信带场景的二维码
  • 用户关注微信或者取消关注微信的时候,微信服务器会发送一个 post请求到微信配置中的URL地址中。可以提取其中 的数据判断关注还是取消推送XML数据包示例:<xml><ToUserName>< ...
  • 没有需求就没有开发 需求在小程序内直接可以关注公众号 且如果已经关注则隐藏关注按钮;找了许多没有特别完整的 索性就把自己的做法给整理一下 步骤大致如下 1. 小程序关联公众号: 1.1 路径:小程序后台——...
1 2 3 4 5 ... 20
收藏数 30,444
精华内容 12,177
关键字:

微信开发判断有没有关注