<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      開發(fā)背景:


        最近一段時(shí)間一直在做關(guān)于微信方面的網(wǎng)站應(yīng)用開發(fā),這段時(shí)間也收獲的不少關(guān)于微信開發(fā)方面的開發(fā)技能,接觸的比較多的主要有微信公眾號(hào)和微信網(wǎng)站app第三方登錄授權(quán),以及微信會(huì)員卡,優(yōu)惠券和掃描二位碼的功能,
      今天我主要想要總結(jié)的是微信公眾號(hào)登錄和網(wǎng)站app第三方應(yīng)用微信授權(quán)登錄這兩者之間獲取到的Openid關(guān)聯(lián)問題,實(shí)現(xiàn)兩邊登錄都是同一個(gè)賬號(hào)。

        ??首先我們必須區(qū)別開來(lái)微信公眾平臺(tái)開發(fā)是指微信公眾號(hào)進(jìn)行業(yè)務(wù)開發(fā)(
      https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
      <https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432>
      ),為網(wǎng)站微信登錄授權(quán)是需要在微信開發(fā)平臺(tái)中創(chuàng)建網(wǎng)站應(yīng)用來(lái)使用的(
      https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN

      <https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN>
      ),但是要想把微信公眾號(hào)于微信網(wǎng)站授權(quán)登錄獲取到的Oppenid關(guān)聯(lián)起來(lái)的話我們可以通過UnionID關(guān)聯(lián)起來(lái)。

      微信開放平臺(tái)配置:

      登錄進(jìn)入微信開放平臺(tái)>進(jìn)行微信公眾號(hào)綁定

      微信開發(fā)平臺(tái)公眾賬號(hào)關(guān)聯(lián)的如下圖:

      ?



      UnionID機(jī)制說明:


      開發(fā)者可通過OpenID來(lái)獲取用戶基本信息。特別需要注意的是,如果開發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),可通過獲取用戶基本信息中的unionid來(lái)區(qū)分用戶的唯一性,因?yàn)橹灰峭粋€(gè)微信開放平臺(tái)帳號(hào)下的移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),用戶的unionid是唯一的。換句話說,同一用戶,對(duì)同一個(gè)微信開放平臺(tái)下的不同應(yīng)用,unionid是相同的。

      獲取用戶基本信息(包括UnionID機(jī)制)開發(fā)者可通過OpenID來(lái)獲取用戶基本信息。請(qǐng)使用https協(xié)議。
      接口調(diào)用請(qǐng)求說明 http請(qǐng)求方式: GET
      https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 
      ?

      ?微信公眾號(hào)微信登錄配置:


      在基本配置中獲取微信公眾號(hào)的appid和appsecrect(一定是要自己公眾號(hào)的),白名單是你在本地調(diào)試的微信項(xiàng)目的時(shí)候需要添加的你本地的ip地址,不然獲取不到你想要的accsee_token



      ?

      配置服務(wù)器地址(url):這里是你的項(xiàng)目與微信服務(wù)器通訊的地方,一定不能填錯(cuò),Token是你項(xiàng)目中的,將其復(fù)制到這里即可,消息加密解密密鑰是微信端隨機(jī)生成的



      ?

      在微信公眾號(hào)設(shè)置設(shè)置對(duì)應(yīng)業(yè)務(wù)域名,js接口安全域名,以及網(wǎng)頁(yè)授權(quán)域名



      ?

      代碼實(shí)現(xiàn):

      用戶同意授權(quán)獲取對(duì)應(yīng)的授權(quán)碼code(注意:我這里使用的是微信公眾號(hào)的登錄授權(quán),假如你需要做網(wǎng)站授權(quán)的換一個(gè)api即可下面兩步都是一樣)

      微信網(wǎng)站用戶同意授權(quán)獲取code的api:
      第三方使用網(wǎng)站應(yīng)用授權(quán)登錄前請(qǐng)注意已獲取相應(yīng)網(wǎng)頁(yè)授權(quán)作用域(scope=snsapi_login),則可以通過在PC端打開以下鏈接: https://
      open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
      若提示“該鏈接無(wú)法訪問”,請(qǐng)檢查參數(shù)是否填寫錯(cuò)誤,如redirect_uri的域名與審核時(shí)填寫的授權(quán)域名不一致或scope不為snsapi_login。


      ?

      ?
      //授權(quán)入口 public ActionResult WxLogin() { //異步跳轉(zhuǎn)地址 var loginUrl = "http://" +
      Request.Url.Authority + Url.Action("WxRegisterAndLogin") ; return Redirect("
      https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "
      &redirect_uri=" + Url.Encode(loginUrl) + "
      &response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect"); }
      通過通過code獲取網(wǎng)頁(yè)授權(quán)access_token和用戶唯一標(biāo)識(shí)Openid,最后拉取用戶信息(需要scope為snsapi_userinfo)
      /// <summary> ///
      微信登錄注冊(cè)(通過unionid來(lái)判斷之前是否已經(jīng)存在同一個(gè)工作平臺(tái)注冊(cè)過的賬號(hào),假如存在的話則關(guān)聯(lián)起來(lái),不存在注冊(cè)一個(gè)新的賬號(hào))/// </summary>
      /// <param name="code">獲取用戶憑證換取用戶網(wǎng)頁(yè)授權(quán)</param> /// <param name="ReturnUrl">跳轉(zhuǎn)地址
      </param> /// <returns></returns> public async Task<ActionResult>
      WxRegisterAndLogin(string code, string ReturnUrl = "") { try { //登錄成功后跳轉(zhuǎn)的地址
      string url=ReturnUrl; //通過Code以及微信appscrect和wxappid換取網(wǎng)頁(yè)授權(quán)access_token和用戶oppenid
      HttpClient webClient =new HttpClient(); var jsonString = await (await
      webClient.GetAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid="
      +公眾號(hào)appid+"&secret=" + 公眾號(hào)AppSecret + "&code=" + code + "
      &grant_type=authorization_code")).Content.ReadAsStringAsync(); //
      異步獲取的用戶oppenid和access_token var jsonOAuthorObj =
      JsonConvert.DeserializeObject(jsonString,new { access_token = "", openid = ""
      }.GetType());if (jsonOAuthorObj.openid == null) { return Content(jsonString + "
      出現(xiàn)錯(cuò)誤請(qǐng)重試"); } var myuser = new user { WxOpenId = jsonOAuthorObj.openid
      }.SelectObject();//注冊(cè)成功后直接登錄,授權(quán)會(huì)判斷是否有賬戶 if (myuser == null) { //拉取用戶信息(需scope為
      snsapi_userinfo),和unionid(只有在用戶將公眾號(hào)綁定到微信開放平臺(tái)帳號(hào)后,才會(huì)出現(xiàn)該字段) jsonString = await (
      await webClient.GetAsync("https://api.weixin.qq.com/sns/userinfo?access_token="
      + jsonOAuthorObj.access_token +"&openid=" + jsonOAuthorObj.openid + "&lang=zh_CN
      ")).Content.ReadAsStringAsync(); dynamic jsonObj =
      JsonConvert.DeserializeObject(jsonString,new { nickname = "", headimgurl = "",
      sex ="", openid = "", country = "", province = "", city = "",unionid=""
      }.GetType());//查詢系統(tǒng)中是否存在unionid用戶信息,若存在則更新當(dāng)前用戶openid,并直接登錄,如果不存在的話則需要?jiǎng)?chuàng)建一個(gè)新的用戶信息
      var isExistUserInfo=new user(){unionid=unionid }.SelectObject(); if
      (isExistUserInfo!=null)//存在該用戶記錄 { //更新公眾號(hào)openid isExistUserInfo.WxOpenId=
      jsonObj.openid; isExistUserInfo.Update();//存在用戶信息直接登錄 return Redirect(url); }
      else//不存在該用戶記錄 { //創(chuàng)建用戶 int cUserId = new user { Wximage= jsonObj.headimgurl,
      WxNickName = jsonObj.nickname, WxOpenId = jsonObj.openid, Sex =
      Convert.ToInt32(jsonObj.sex), Country = jsonObj.country, Province =
      jsonObj.province, City = jsonObj.city,unionid=unionid }.Create(); return
      RedirectToAction("WxRegister", "Login", new { ReturnUrl = url }); } } else { //
      存在用戶信息直接登錄 return Redirect(url); } } catch (Exception e) { return View("
      MessageInfo", "", e.ToString()); } }?

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          99久热在线精品视频播放 | 小树林的毛片女毛片 | 国产婷婷一区二区三区久久 | 免费看欧美三级片 | 黑人巨大精品欧美一区二区 | 涩涩视频网站在线观看 | 国产欧美又粗又猛又爽免费观看 | 爷爷搂着妈妈睡觉有哪几种 | 69成人免费视频 | 香蕉爱爱视频 |