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


      工作需求,開(kāi)發(fā)釘釘微應(yīng)用和小程序,之前有接觸過(guò)支付寶小程序和生活號(hào)的開(kāi)發(fā),流程沒(méi)有很大的差別,這里記錄下我用ASP.NET
      MVC實(shí)現(xiàn)釘釘微應(yīng)用的開(kāi)發(fā),并實(shí)現(xiàn)獲取用戶的userid。小弟我技術(shù)有限,本文中的一些命名或方法寫(xiě)的不好的,還請(qǐng)指點(diǎn)。


      釘釘開(kāi)發(fā)者平臺(tái)上有各個(gè)平臺(tái)的SDK,我也有下載對(duì)應(yīng)的.NET版本的SDK,但是還沒(méi)有全搞懂,我先用最土的辦法:直接發(fā)起http請(qǐng)求,來(lái)獲取我需要的數(shù)據(jù),后面如果有時(shí)間我會(huì)把.NET的也補(bǔ)上。

      1、注冊(cè)釘釘微應(yīng)用:



      注冊(cè)完成之后,繼續(xù)完善下應(yīng)用配置,如IP白名單等。



      在基本信息>開(kāi)發(fā)信息(舊版)中,可以看到有一個(gè)Corpid,官方文檔中“獲取微應(yīng)用免登授權(quán)碼”,就是需要這個(gè)ID。



      ?



      ?

      ?2、獲取Code:

      首先需要根據(jù)corpid獲取免登授權(quán)碼。按照官方文檔中的寫(xiě)法,這個(gè)步驟很簡(jiǎn)單,我直接寫(xiě)在按鈕事件中,返回的result中就帶有我需要的code了。
      1 //獲取免登授權(quán)碼 2 $("#getAuthorCode").click(function () { 3 dd.ready(function ()
      { 4 // dd.ready參數(shù)為回調(diào)函數(shù),在環(huán)境準(zhǔn)備就緒時(shí)觸發(fā),jsapi的調(diào)用需要保證在該回調(diào)函數(shù)觸發(fā)后調(diào)用,否則無(wú)效。 5
      dd.runtime.permission.requestAuthCode({ 6 corpId: "這里填寫(xiě)corpid", 7 onSuccess:
      function (result) { 8 alert("succeed"); 9 alert(result.code); 10 }, 11
      onFail: function (err) { 12 alert("fail"); 13 } 14 }); 15 }); 16 var arr =
      []; 17 arr.push({ "AuthorCode": authorCode }); 18 ajax("/Home/GetAuthorCode",
      arr, "text", false); 19 });
      ?

      ?3、獲取access_token:

      先看官方文檔是怎么寫(xiě)的。



      嗯,對(duì),其實(shí)我主要是看這里的“請(qǐng)求地址”,只要在后臺(tái)中把參數(shù)賦上就可以了,相應(yīng)的后端代碼如下。

      接收到釘釘返回的數(shù)據(jù)后,對(duì)數(shù)據(jù)進(jìn)行反序列化,得到access_token。
      1 /// <summary> 2 /// 獲取授權(quán)訪問(wèn)令牌 3 /// </summary> 4 /// <returns></returns> 5
      public JsonResult GetAccessToken() 6 { 7 string AppKey = "后臺(tái)提供的key"; 8 string
      AppSecret = "后臺(tái)提供的secret"; 9 string url =
      "https://oapi.dingtalk.com/gettoken?appkey=" + AppKey + "&appsecret=" +
      AppSecret; 10 WebRequest request = WebRequest.Create(url); 11 WebResponse
      response = request.GetResponse(); 12 StreamReader reader = new
      StreamReader(response.GetResponseStream(),Encoding.ASCII); 13 string
      responseData = reader.ReadToEnd(); 14        var data =
      JsonConvert.DeserializeObject<CommonModel>(responseData); //json字符串反序列化
               string token = data.access_token; 22 return Json(new { Result = true
      , token }, JsonRequestBehavior.AllowGet); 23 }
      4、獲取userid:

      根據(jù)官方文檔,獲取userid需要使用code和token。



      當(dāng)我在后臺(tái)將幾分鐘前獲取到的code和token,直接作為參數(shù)并發(fā)起http請(qǐng)求時(shí),這時(shí)候報(bào)了錯(cuò)誤碼40078,



      ?

      ?
      ?也就是說(shuō)前面獲取到的code需要重新進(jìn)入鑒權(quán),這里的鑒權(quán)機(jī)制可以仔細(xì)查看官方文檔,我也不是非常清楚,有用到的時(shí)候才會(huì)去看文檔。
      那么我就重新獲取code和token就好了: 1 /// <summary> 2 /// 獲取userid 3 /// </summary> 4 ///
      <returns></returns> 5 public JsonResult GetUserid() 6 { 7 //重新獲取code 8 string
      authorCode = Request.Form[0]; 9 JavaScriptSerializer js = new
      JavaScriptSerializer(); 10 CommonModel selectListss = new CommonModel(); 11 var
      data = js.Deserialize<List<CommonModel>>(authorCode); 12 string Code = data[0
      ].AuthorCode; 13 14 //獲取token 15 string AppKey = "后臺(tái)提供的key"; 16 string
      AppSecret = "后臺(tái)提供的secret"; 17 string url =
      "https://oapi.dingtalk.com/gettoken?appkey=" + AppKey + "&appsecret=" +
      AppSecret; 18 WebRequest request = WebRequest.Create(url); 19 WebResponse
      response = request.GetResponse(); 20 StreamReader reader = new
      StreamReader(response.GetResponseStream(), Encoding.ASCII); 21 string
      responseData = reader.ReadToEnd();

                var data = JsonConvert.DeserializeObject<CommonModel>(responseData);
      //json字符串反序列化
                string token = data.access_token;
      30 31 //獲取userid 32 string getUserId_Url =
      "https://oapi.dingtalk.com/user/getuserinfo?access_token=" + token + "&code=" +
      Code; 33 WebRequest getUserId_request = WebRequest.Create(getUserId_Url); 34
      WebResponse getUserId_response = getUserId_request.GetResponse(); 35
      StreamReader getUserId_reader = new
      StreamReader(getUserId_response.GetResponseStream(), Encoding.ASCII); 36 string
      getUserId_responseData = getUserId_reader.ReadToEnd(); 37
                var data =
      JsonConvert.DeserializeObject<CommonModel>(getUserId_responseData);
      //json字符串反序列化

                string userid = data.userid;
      45 return Json(new { Result = true,userid }, JsonRequestBehavior.AllowGet); 46
      }
      以上,將寫(xiě)好的項(xiàng)目打包并發(fā)布到我的IIS服務(wù)器上,PC端(手機(jī)也行)釘釘打開(kāi)應(yīng)用看看效果:



      ?

      ?

      ?

      ?

      ?

      ?

      ?

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

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          亚洲成人无码高清 | 久久午夜夜伦鲁鲁片不卡 | 日韩18禁网站 | 日韩无码人妻一区二区 | 成人性生交大片免费看黄花女 | 大型操逼网站 | 吖v在线观看 | 天天操天天操天天 | 丰满的秘书年轻胸大的秘书 | 啊轻点灬太粗嗯一路向阳 |