<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          微信公眾號網(wǎng)頁授權(quán)

          共 4221字,需瀏覽 9分鐘

           ·

          2021-06-13 11:40

          在微信公眾號開發(fā)時候,一般需要使用到微信登錄功能,這里就需要加入微信授權(quán),來獲取用戶的openid(或unionid),利用openid(或unionid)做唯一的身份識別。
          下面介紹授權(quán)開發(fā)的步驟。

          一、添加業(yè)務(wù)域名

          這是很重要的一步,js安全域名配置配置,添加方式如下:
          登錄微信公眾號平臺->開發(fā)->接口權(quán)限->網(wǎng)頁授權(quán)(修改),進入后選擇“js接口安全域名”進行添加即可。


          需要注意兩點:

          1)、端口必須是默認80端口,添加的域名不能帶端口號!(這是微信規(guī)定的)

          2)、下載的txt驗證文件必須放置在提供的域名目錄下。

          配置好之后,直接瀏覽器地址欄訪問這個路徑,能打開就成功了。

          二、前端授權(quán)獲取code

          微信授權(quán)的第一步,是前端獲取微信返回的code值,把code值傳遞給服務(wù)器端才能獲取到用戶的openid(或unionid)。

          那怎么拿到微信返回的code值?

          通過window.location.href跳轉(zhuǎn)下面鏈接進行獲取:

          https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect //若提示“該鏈接無法訪問”,請檢查參數(shù)是否填寫錯誤,是否擁有scope參數(shù)對應(yīng)的授權(quán)作用域權(quán)限。

          參數(shù)說明:

          APPID:公眾號的唯一標(biāo)識,申請公眾號已經(jīng)分配好的;

          REDIRECT_URL :  在成功拿到code值,你需要跳轉(zhuǎn)到你項目的路徑地址,比如login.html之類的;

          SCOPE :有兩個固定值:snsapi_base(靜默授權(quán)),snsapi_userinfo(顯式授權(quán)) ,兩者任選其一;

          STATE : 這個參數(shù)是自定義,什么值都行,你配置什么值,到時候跳轉(zhuǎn)回來后,原樣給你帶回來,需要注意的是有格式要求(重定向后會帶上state參數(shù),開發(fā)者可以填寫a-zA-Z0-9的參數(shù)值,最多128字節(jié));

          靜默授權(quán)與顯式授權(quán)的區(qū)別:

          1、以snsapi_base為scope發(fā)起的網(wǎng)頁授權(quán),是用來獲取進入頁面的用戶的openid的,并且是靜默授權(quán)并自動跳轉(zhuǎn)到回調(diào)頁的.(靜默的另一種:對于已關(guān)注公眾號的用戶,如果用戶從公眾號的會話或者自定義菜單進入本公眾號的網(wǎng)頁授權(quán)頁,即使是scope為snsapi_userinfo,也是靜默授權(quán),用戶無感知。)

          2、以snsapi_userinfo為scope發(fā)起的網(wǎng)頁授權(quán),是用來獲取用戶的基本信息的。但這種授權(quán)首次需要用戶手動同意,并且由于用戶同意過,所以無須關(guān)注,就可在授權(quán)后獲取該用戶的基本信息。

          前端獲取code的代碼:

          methods: {//(以vue為例)  getCode() { // 非靜默授權(quán),第一次有彈框    this.code = ''var local = window.location.href // 獲取頁面urlvar appid = 'wx65adcf075369****'    this.code = this.getUrlCode().code // 截取code    if (this.code == null || this.code === '') { // 如果沒有code,則去請求      window.location.href =        `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`    } else {      // 你自己的業(yè)務(wù)邏輯    }  },  getUrlCode() { // 截取url中的code方法    var url = location.search    this.winUrl = url    var theRequest = new Object()    if (url.indexOf("?") != -1) {      var str = url.substr(1)      var strs = str.split("&")      for (var i = 0; i < strs.length; i++) {        theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1])      }    }    return theRequest  }}

          代碼邏輯是先判斷有沒有code,沒有才去獲取,使用encodeURIComponent()對回調(diào)url進行編碼。

          三、后端獲取openid(或unionid)

          這里一般是有前端傳遞code給后端,由后端請求微信提供的接口,來獲取用戶的openid(或unionid)

          1、獲取openid:

          get請求接口鏈接如下:

          https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

          參數(shù)說明:

          appid公眾號的唯一標(biāo)識
          secret公眾號的appsecret
          code填寫第一步獲取的code參數(shù)
          grant_type填寫為authorization_code

          成功返回數(shù)據(jù)如下:

          {   "access_token":"ACCESS_TOKEN", //接口調(diào)用憑證  "expires_in":7200,//access_token接口調(diào)用憑證超時時間,單位(秒)  "refresh_token":"REFRESH_TOKEN",//用戶刷新access_token  "openid":"OPENID",//授權(quán)用戶唯一標(biāo)識  "scope":"SCOPE"//用戶授權(quán)的作用域,使用逗號(,)分隔}

          如果你只需要得到opend_id,這里就結(jié)束了。如果需要獲取unionid則還需要請求下面接口。

          2、獲取unionid

          通過返回的openid和access_token獲取用戶信息,get請求接口如下:

          https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

          a:scope為snsapi_userinfo顯式授權(quán)返回的數(shù)據(jù)如下:

          {"subscribe": 1,//用戶是否訂閱該公眾號標(biāo)識,值為0時代表此用戶沒有關(guān)注該公眾號"openid":" OPENID",//用戶的標(biāo)識,對當(dāng)前公眾號唯一" nickname": NICKNAME,//用戶的昵稱"sex":"1",//用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知"language": "zh_CN",//用戶的語言,簡體中文為zh_CN"province":"PROVINCE"//用戶所在省份"city":"CITY",//用戶所在城市"country":"COUNTRY",//用戶所在國家"headimgurl":    "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",//用戶頭像,最后一個數(shù)值代表正方形頭像大小(有0、46、64、96、132數(shù)值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空。若用戶更換頭像,原有頭像URL將失效。"subscribe_time": 1382694957,//用戶關(guān)注時間,為時間戳。如果用戶曾多次關(guān)注,則取最后關(guān)注時間"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL",//UnionID 來區(qū)分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(包括小程序),用戶的 UnionID 是唯一的"remark": "",//公眾號運營者對粉絲的備注,公眾號運營者可在微信公眾平臺用戶管理界面對粉絲添加備注"groupid": 0,//用戶所在的分組ID(兼容舊的用戶分組接口)"tagid_list":[128,2]  //用戶被打上的標(biāo)簽ID列表}

          ps:需要獲取用戶信息,必須使用scope為snsapi_userinfo的方式。

          b:scope為 snsapi_base靜默授權(quán)返回的數(shù)據(jù)如下:

          {"subscribe": 0,"openid":" OPENID","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}

          四、unionid與openid的區(qū)別

          如果開發(fā)者擁有多個移動應(yīng)用、網(wǎng)站應(yīng)用、和公眾帳號(包括小程序),可通過unionid來區(qū)分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(包括小程序),用戶的unionid是唯一的。

          換句話說,同一用戶,對同一個微信開放平臺下的不同應(yīng)用,unionid是相同的。

          具體請查看公眾號開發(fā)文檔:https://developers.weixin.qq.com/doc/

          本文完~

          學(xué)習(xí)更多技能

          請點擊下方公眾號

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.久久99 | 中文字幕免费在线视频 | 五月丁香中文字幕 | 国内黄色毛片 | 久久在线黄色视频 |