日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断用户是否已关注公众号

發(fā)布時間:2024/1/8 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断用户是否已关注公众号 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景
業(yè)務(wù)場景是:判斷當(dāng)前登錄用戶是否已經(jīng)關(guān)注指定的官方微信公眾號,沒有就指引用戶關(guān)注。

微信公眾號官方文檔:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

詳細(xì)步驟

一.公眾號后臺配置

  • 獲取appid, appsecret,添加白名單
    登錄微信公眾平臺,進(jìn)入基本配置。開發(fā)中需要用到兩個參數(shù),appId和appSecret(appSecret只展示一次,需保存下來,否則需要重置獲取)。獲取access_token時需要添加IP白名單。
  • 添加網(wǎng)頁授權(quán)
  • 二.后臺實(shí)現(xiàn)思路

  • 獲取公眾號的access_token
    https請求方式: GET
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
  • 參數(shù)說明
    grant_type$ 獲取access_token填寫client_credential
    appid第三方用戶唯一憑證
    secret第三方用戶唯一憑證密鑰,即appsecret

    返回說明
    正常情況下,微信會返回下述JSON數(shù)據(jù)包給公眾號:
    {“access_token”:“ACCESS_TOKEN”,“expires_in”:7200}

    參數(shù)說明

    參數(shù)說明
    access_token獲取到的憑證
    expires_in憑證有效時間,單位:秒

    錯誤時微信會返回錯誤碼等信息,JSON數(shù)據(jù)包示例如下(該示例為AppID無效錯誤):
    {“errcode”:40013,“errmsg”:“invalid appid”}

    返回錯誤碼參考官方文檔:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

  • 獲取用戶的openid
    在關(guān)注者與公眾號產(chǎn)生消息交互后,公眾號可獲得關(guān)注者的OpenID(說明:OpenID就是加密后的微信號,每個用戶對每個公眾號的OpenID是唯一的。對于不同公眾號,同一用戶的openid不同)。
    用戶同意授權(quán),獲取code通過code來獲取openid
    https請求方式: GET
    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
  • 參數(shù)說明
    appid第三方用戶唯一憑證
    secret第三方用戶唯一憑證密鑰,即appsecret
    codecode
    grant_typeauthorization_code
  • 根據(jù)前兩個步驟獲得的信息(access_token和openId),調(diào)用微信接口獲取用戶基本信息
    https請求方式: GET
    https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
  • 返回說明
    正常情況下,微信會返回下述JSON數(shù)據(jù)包給公眾號:

    {"subscribe": 1, "openid": "xxxxxx", "nickname": "Band", "sex": 1, "language": "zh_CN", "city": "深圳", "province": "廣東", "country": "中國", "headimgurl":"","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": ""}返回參數(shù)說明:參數(shù) 說明subscribe 用戶是否訂閱該公眾號標(biāo)識,值為0時,代表此用戶沒有關(guān)注該公眾號,拉取不到其余信息。openid 用戶的標(biāo)識,對當(dāng)前公眾號唯一nickname 用戶的昵稱sex 用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知city 用戶所在城市country 用戶所在國家province 用戶所在省份language 用戶的語言,簡體中文為zh_CNheadimgurl 用戶頭像,最后一個數(shù)值代表正方形頭像大小(有0466496132數(shù)值可選,0代表640*640正方形頭像),用戶沒有頭像時該項(xiàng)為空。若用戶更換頭像,原有頭像URL將失效。subscribe_time 用戶關(guān)注時間,為時間戳。如果用戶曾多次關(guān)注,則取最后關(guān)注時間unionid 只有在用戶將公眾號綁定到微信開放平臺帳號后,才會出現(xiàn)該字段。remark 公眾號運(yùn)營者對粉絲的備注,公眾號運(yùn)營者可在微信公眾平臺用戶管理界面對粉絲添加備注groupid 用戶所在的分組ID(兼容舊的用戶分組接口)tagid_list 用戶被打上的標(biāo)簽ID列表subscribe_scene 返回用戶關(guān)注的渠道來源,ADD_SCENE_SEARCH 公眾號搜索,ADD_SCENE_ACCOUNT_MIGRATION 公眾號遷移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 掃描二維碼,ADD_SCENEPROFILE LINK 圖文頁內(nèi)名稱點(diǎn)擊,ADD_SCENE_PROFILE_ITEM 圖文頁右上角菜單,ADD_SCENE_PAID 支付后關(guān)注,ADD_SCENE_OTHERS 其他qr_scene 二維碼掃碼場景(開發(fā)者自定義)qr_scene_str 二維碼掃碼場景描述(開發(fā)者自定義)錯誤結(jié)果:{"errcode":40013,"errmsg":"invalid appid"}

    詳情查看官方文檔-獲取用戶基本信息 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839

    三.java后臺實(shí)現(xiàn)

    獲取openid參考:

    實(shí)體 @Data public class WeiXinOauth2Token {private String accessToken;private int expiresIn;private String refeshToken;private String openId;private String scope; }String userListUrl="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; /*** 通過網(wǎng)頁授權(quán)code獲取微信openid* @param appId* @param appSecret* @param code* @return*/public static WeiXinOauth2Token getOauth2AccessToken(String appId, String appSecret, String code) {WeiXinOauth2Token wat = new WeiXinOauth2Token();String requestUrl = oauth2WebUrl.replace("APPID", appId).replace("SECRET", appSecret).replace("CODE", code);JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);if (null != jsonObject) {try {wat = new WeiXinOauth2Token();wat.setAccessToken(jsonObject.getString("access_token"));wat.setExpiresIn(jsonObject.getInteger("expires_in"));wat.setRefeshToken(jsonObject.getString("refresh_token"));wat.setOpenId(jsonObject.getString("openid"));wat.setScope(jsonObject.getString("scope"));} catch (Exception e) {wat = null;String errorCode = jsonObject.getString("errcode");String errorMsg = jsonObject.getString("errmsg");log.error("獲取網(wǎng)頁授權(quán)憑證失敗 errcode:"+errorCode+",errMsg:"+errorMsg);}}return wat;}工具類 /*** 發(fā)送https請求* @param requestUrl 請求地址* @param requestMethod 請求方式(GET、POST)* @param outputStr 提交的數(shù)據(jù)* @return JSONObject(通過JSONObject.get(key)的方式獲取json對象的屬性值)*/public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {JSONObject jsonObject = null;try {// 創(chuàng)建SSLContext對象,并使用我們指定的信任管理器初始化TrustManager[] tm = { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new java.security.SecureRandom());// 從上述SSLContext對象中得到SSLSocketFactory對象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setSSLSocketFactory(ssf);conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 設(shè)置請求方式(GET/POST)conn.setRequestMethod(requestMethod);//conn.setRequestProperty("content-type", "application/x-www-form-urlencoded"); // 當(dāng)outputStr不為null時向輸出流寫數(shù)據(jù)if (null != outputStr) {OutputStream outputStream = conn.getOutputStream();// 注意編碼格式outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 從輸入流讀取返回內(nèi)容InputStream inputStream = conn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;StringBuffer buffer = new StringBuffer();while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}// 釋放資源bufferedReader.close();inputStreamReader.close();inputStream.close();inputStream = null;conn.disconnect();jsonObject = JSONObject.parseObject(buffer.toString());} catch (ConnectException ce) {log.error("連接超時:{}", ce);} catch (Exception e) {log.error("https請求異常:{}", e);}return jsonObject;}

    總結(jié)

    以上是生活随笔為你收集整理的判断用户是否已关注公众号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。