国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 微信小程式 微信開(kāi)發(fā) Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

Mar 03, 2017 am 09:49 AM

微信於9月份推出企業(yè)號(hào)後引起了業(yè)界不小的反響,許多企業(yè)都在思索企業(yè)號(hào)將如何影響企業(yè)的運(yùn)營(yíng),從本文開(kāi)始,我將詳細(xì)闡述微信企業(yè)號(hào)開(kāi)發(fā)的相關(guān)知識(shí),而本文將著重於如何實(shí)現(xiàn)更高安全機(jī)制的二次驗(yàn)證。

?

申請(qǐng)企業(yè)體驗(yàn)號(hào):

企業(yè)號(hào)顧名思義就是企業(yè)來(lái)申請(qǐng)的號(hào),申請(qǐng)時(shí)就像申請(qǐng)服務(wù)號(hào)碼一樣,需要提供各種組織證明文件,對(duì)廣大開(kāi)發(fā)者來(lái)說(shuō)很難操作,好在騰訊公司也像服務(wù)號(hào)一樣開(kāi)通了體驗(yàn)號(hào)申請(qǐng),留意企業(yè)體驗(yàn)號(hào)的有效期間非常短,只有90天(服務(wù)號(hào)測(cè)試帳號(hào)有1年有效期),且如果企業(yè)體驗(yàn)號(hào)長(zhǎng)期不使用還會(huì)收到騰訊公司提前失效的提醒郵件。企業(yè)體驗(yàn)號(hào)碼的申請(qǐng)連結(jié)如下,開(kāi)發(fā)者只需要依照騰訊公司的引導(dǎo)完成註冊(cè)步驟,立刻就能取得體驗(yàn)號(hào)碼:

http://qydev.weixin.qq.com/try?t= experience

?

通訊錄新增成員:

與公眾號(hào)不同的是,因?yàn)槭敲嫦蚱髽I(yè)內(nèi)部,所以騰訊允許企業(yè)主動(dòng)添加粉絲,具體操作是進(jìn)入到通訊錄後點(diǎn)選+按鈕新增成員,留意作為唯一識(shí)別個(gè)人訊息,微訊號(hào)、手機(jī)號(hào)碼或信箱必須至少有一個(gè),直接蒐集微訊號(hào)通常比較困難,一般可以使用企業(yè)HR資料庫(kù)裡的手機(jī)號(hào)碼和信箱等訊息,具體操作上除了手動(dòng)添加還可以透過(guò)Excel模板導(dǎo)入以及透過(guò)騰訊企業(yè)號(hào)微信API來(lái)添加,關(guān)於API添加用戶稍後章節(jié)介紹。


Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證#????? Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

#?

輸入完成以後,可以將企業(yè)微訊號(hào)的二維碼傳送給員工,員工掃描後會(huì)自動(dòng)出現(xiàn)系統(tǒng)預(yù)設(shè)的企業(yè)號(hào)小助手,小助手會(huì)自動(dòng)引導(dǎo)員工經(jīng)過(guò)信箱或手機(jī)驗(yàn)證碼來(lái)完成員工身分綁定的過(guò)程,此為一次驗(yàn)證,企業(yè)自行確保通訊錄員工資料的正確性,後續(xù)依賴騰訊公司來(lái)進(jìn)行員工驗(yàn)證,驗(yàn)證通過(guò)後通訊錄狀態(tài)列的問(wèn)號(hào)會(huì)消失,顯示一次驗(yàn)證通過(guò):

?

Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

#?

Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

##為此我們可以參考企業(yè)號(hào)官方介面文件http://qydev.weixin.qq.com/wiki/index.phptitle=%E5%85%B3%E6%B3%A8% E4%B8%8E%E5%8F%96%E6%B6%88%E5%85%B3%E6%B3%A8在Force.com平臺(tái)開(kāi)發(fā)對(duì)應(yīng)頁(yè)面。

?開(kāi)發(fā)二次驗(yàn)證用頁(yè)面:

同樣,頁(yè)面分成兩個(gè)部分,一部分是顯示部分,用來(lái)輸入用戶名和密碼,頁(yè)面示意圖如下,用戶輸入使用者名稱user以及密碼123點(diǎn)選綁定按鈕既可以完成綁定:

################## ###?#########此時(shí)會(huì)彈出下列視窗需要輸入企業(yè)的二次驗(yàn)證頁(yè)面位址:###################### ##?##################為此我們可以參考企業(yè)號(hào)官方介面文件http://qydev.weixin.qq.com/wiki/index.phptitle=%E5 %85%B3%E6%B3%A8%E4%B8%8E%E5%8F%96%E6%B6%88%E5%85%B3%E6%B3%A8在Force.com平臺(tái)開(kāi)發(fā)對(duì)應(yīng)頁(yè)面。 ######?######發(fā)展二次驗(yàn)證用頁(yè):###

同樣,頁(yè)面分成兩個(gè)部分,一部分是顯示部分,用來(lái)輸入使用者名稱和密碼,頁(yè)面示意圖如下,使用者輸入使用者名稱user以及密碼123點(diǎn)擊綁定按鈕既可以完成綁定:


Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

?

#頁(yè)名是EmployeeAuth,頁(yè)面程式碼如下,有些屬於apex程式碼特有的標(biāo)籤,無(wú)需做深入理解,重要是在第13行按鈕的action屬性指定了bind方法,當(dāng)點(diǎn)擊按鈕的時(shí)候?qū)⒄{(diào)用控制器類別EmployeeAuthController的bind方法:

<apex:page standardstylesheets="false" showHeader="false" sidebar="false" controller="EmployeeAuthController">
  <font size="50">
  <h1>Please input your user name and password</h1>
  </font>
  <font size="30">
  UserName: user<br />
  Password: 123<br /><br />
  <hr/>
  <apex:form >
  UserName: <apex:inputText size="100" style="height:100px" value="{!strUsername}" id="strUsername"/><br /><br />
  Password:   <apex:inputText size="100" style="height:100px" value="{!strPassword}" id="strPassword"/><br /><br />
  <center>
  <apex:commandButton value="Bind" style="width:600px; height:100px;font-size:50px" action="{!bind}" id="bind"  />
  </center>
  </apex:form>
  {!msg}
  </font>
</apex:page>

#?

在解讀EmployeeAuthController控制器類別的程式碼前我們先來(lái)看看微信二次認(rèn)證的步驟。

?

二次驗(yàn)證的步驟與機(jī)制:

1. 首先,當(dāng)微信一次驗(yàn)證(或郵箱或手機(jī)號(hào)碼等認(rèn)證)完成後,微信會(huì)發(fā)送如下圖所示的訊息給到用戶:

Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

2. 頁(yè)面跳轉(zhuǎn):

當(dāng)使用者點(diǎn)擊這個(gè)圖文的時(shí)候?qū)嶋H上打開(kāi)了一個(gè)位於open.weixin.qq.com網(wǎng)站下面的網(wǎng)頁(yè),這個(gè)頁(yè)面會(huì)做一些處理後跳到前面在二次驗(yàn)證裡設(shè)定的URL也就是我們正在開(kāi)發(fā)的這個(gè)頁(yè)面,在跳轉(zhuǎn)的時(shí)候還會(huì)再我們?cè)O(shè)定的URL後面加上參數(shù)code=CODE&state=STATE,例如在本例裡二次驗(yàn)證配置的URL是http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth,那麼從騰訊openweixin.qq. com跳轉(zhuǎn)後實(shí)際打開(kāi)的URL是http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth?code=CODE&state=STATE?。這裡的state參數(shù)是幹嘛的騰訊公司並沒(méi)有說(shuō)明目前看也不重要。重要的是code參數(shù),利用這個(gè)參數(shù)可以呼叫騰訊的oauth2介面換取員工的userid,留意userid是一個(gè)很重要的概念,在企業(yè)號(hào)裡沒(méi)有微信OpenId一說(shuō),只有userid用來(lái)唯一標(biāo)識(shí)用戶,這個(gè)userid實(shí)際上就是我們?cè)诰S護(hù)通訊錄時(shí)的帳號(hào)欄位值:


Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

3. 透過(guò)code呼叫騰訊oauth2介面換取員工userid

關(guān)於這個(gè)介面的說(shuō)明請(qǐng)參考騰訊文件http://qydev.weixin.qq.com/wiki/ index.phptitle=%E6%A0%B9%E6%8D%AEcode%E8%8E%B7%E5%8F%96%E6%88%90%E5%91%98%E4%BF%A1%E6%81 %AF,也可以參加下方說(shuō)明,這裡需要特別說(shuō)明的是access token和agentid:


Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

做過(guò)微信公共號(hào)開(kāi)發(fā)或看過(guò)前面介紹相關(guān)開(kāi)發(fā)文章的讀者應(yīng)該不會(huì)陌生,當(dāng)主動(dòng)呼叫騰訊的api時(shí)都需要access token已確保訪問(wèn)的正當(dāng)性,獲得access token相應(yīng)的也有一個(gè)專門的接口,具體的介紹可以參見(jiàn)騰訊公司文檔http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%BB%E5%8A %A8%E8%B0%83%E7%94%A8,簡(jiǎn)單點(diǎn)說(shuō)獲得access token實(shí)際上就是透過(guò)以下介面:

https://qyapi.weixin.qq.com/cgi-bin/gettoken ?corpid=id&corpsecret=secrect

這個(gè)介面裡Corpid好找,開(kāi)啟設(shè)定就能找到,如下圖:


Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

?

不過(guò)corpsecret就沒(méi)那么好找,實(shí)際是需要系統(tǒng)管理員在后臺(tái)創(chuàng)建管理組,創(chuàng)建管理組后就可以擁有相應(yīng)的Secret,而這個(gè)Secret所擁有的訪問(wèn)權(quán)限就是系統(tǒng)管理員創(chuàng)建的管理組所擁有的權(quán)限,騰訊文章http://qydev.weixin.qq.com/wiki/index.php?title=Secret也有提到:

Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

再回過(guò)頭來(lái)說(shuō)agentid騰訊文檔里提到指的是“跳轉(zhuǎn)鏈接時(shí)所在的企業(yè)應(yīng)用ID”,在本例里其實(shí)指的就是發(fā)送“身份驗(yàn)證”圖文消息的那個(gè)應(yīng)用也就是“企業(yè)小助手”的應(yīng)用ID,當(dāng)然在不同的用戶場(chǎng)景里可能會(huì)是不同的應(yīng)用在調(diào)用換取userid接口,如何查看“企業(yè)小助手”的應(yīng)用ID呢?進(jìn)到應(yīng)用中心,第一個(gè)就是企業(yè)小助手,點(diǎn)擊進(jìn)入就可以看到如下圖所示的企業(yè)應(yīng)用ID了:

Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

4. 二次驗(yàn)證

拿到userid后實(shí)際就可以進(jìn)行二次驗(yàn)證了,二次驗(yàn)證的方式有很多種,例如如果公司已經(jīng)建立起良好的通訊錄管理機(jī)制(userid等和企業(yè)人力資源數(shù)據(jù)庫(kù)同步,入職離職員工均能和企業(yè)號(hào)通訊錄同步),拿到userid后只要判斷這個(gè)userid是一位在職員工就可以自動(dòng)判斷為二次驗(yàn)證通過(guò),或者再保險(xiǎn)點(diǎn)如本例演示的,要求員工輸入公司的員工用戶名和密碼進(jìn)行驗(yàn)證。留意,輸入用戶名和密碼驗(yàn)證的頁(yè)面也就是我們前面提到的二次驗(yàn)證頁(yè)面是屬于企業(yè)擁有也是企業(yè)開(kāi)發(fā)的,這樣就確保了企業(yè)對(duì)安全的控制,具體操作上,用戶輸入用戶名和密碼后企業(yè)可以調(diào)用已有的接口進(jìn)行驗(yàn)證,如果驗(yàn)證成功則將員工的userid等信息保存在業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)中一遍后續(xù)操作。

5.通知騰訊關(guān)注成功

現(xiàn)在最后一步等企業(yè)在自己的網(wǎng)頁(yè)里完成了用戶驗(yàn)證后只剩下通知騰訊該用戶已經(jīng)驗(yàn)證成功讓相應(yīng)員工關(guān)注成功,此時(shí)應(yīng)該調(diào)用如下接口,可以看到接口需要的第二個(gè)參數(shù)即是我們前面換回來(lái)的userid:

https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token=ACCESS_TOKEN&userid=USERID

此接口的詳細(xì)說(shuō)明如下:


Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證

二次驗(yàn)證的代碼實(shí)現(xiàn):

按照前面的思路,我們首先獲取從騰訊跳轉(zhuǎn)過(guò)來(lái)的code,并通過(guò)code換取用戶的userid,換取的這個(gè)過(guò)程在頁(yè)面加載中完成,為此主要代碼應(yīng)放在類構(gòu)造器里。下面的代碼里設(shè)置了五個(gè)變量,其中strPassword和strUsername和用戶在頁(yè)面里輸入的用戶名和密碼相對(duì)應(yīng),userID用來(lái)存儲(chǔ)換回來(lái)的userid信息,msg用來(lái)調(diào)試幫助在頁(yè)面里顯示中間信息,accessToken則用來(lái)存儲(chǔ)access token:

 public class EmployeeAuthController {

    public String strPassword { get; set; } 
    public String strUsername { get; set; }  
    public String msg { get; set; } 
    public String userID { get; set; } 
    public String accessToken { get; set; } 

    public EmployeeAuthController (){  
        accessToken = obtainAccessToken(); 
        String code = ApexPages.currentPage().getParameters().get(&#39;code&#39;); 
        //Obtain user ID 
         Http h = new Http(); 
         HttpRequest req = new HttpRequest(); 
         req.setMethod(&#39;GET&#39;); 
         req.setHeader(&#39;Accept-Encoding&#39;,&#39;gzip,deflate&#39;); 
         req.setHeader(&#39;Content-Type&#39;,&#39;text/xml;charset=UTF-8&#39;); 
         req.setHeader(&#39;User-Agent&#39;,&#39;Jakarta Commons-HttpClient/3.1&#39;);  
         req.setEndpoint(&#39;https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=&#39; + accessToken + &#39;&code=&#39; + code + &#39;&agentid=0&#39;); 
         String bodyRes = &#39;&#39;; 
         try{ 
            HttpResponse res = h.send(req); 
            bodyRes = res.getBody(); 
         } 
         catch(System.CalloutException e) { 
            System.debug(&#39;Callout error: &#39;+ e); 
            ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage())); 
         }    
         msg = bodyRes ; 
         //String operation to obtain userID: 
         JSONParser parser = JSON.createParser(bodyRes); 
         while(parser.nextToken() != null){ 
             if((parser.getCurrentToken() == JSONToken.FIELD_NAME)){ 
                 String fieldName = parser.getText(); 
                 parser.nextToken(); 
                 if(fieldName == &#39;UserId&#39;){ 
                     userID = parser.getText(); 
                 } 
             } 
         } 
         msg = userID; 
    }

}

上述代碼第9行調(diào)用obtainAccessToken方法獲取accessToken,后續(xù)會(huì)介紹該方法的詳情,accessToken兩個(gè)小時(shí)內(nèi)會(huì)失效,所以這里采取實(shí)時(shí)獲取的方式,當(dāng)然可以設(shè)計(jì)的再巧妙些以省卻每次實(shí)時(shí)獲取accessToken的網(wǎng)絡(luò)開(kāi)銷。第10行獲得了從騰訊跳轉(zhuǎn)過(guò)來(lái)時(shí)帶的code參數(shù),從第11行通過(guò)HttpRequest方法來(lái)調(diào)用換取接口獲得userid,留意第18行指定了agentid為0,這是因?yàn)轵?yàn)證消息是從企業(yè)小助手應(yīng)用發(fā)起的,而企業(yè)小助手應(yīng)用id是0。第29行開(kāi)始解析返回來(lái)的JSON數(shù)據(jù)獲取userid。

下面是obtainAccessToken方法,方法內(nèi)容也比較直接,主要通過(guò)調(diào)用gettoken接口來(lái)獲取accessToken,并通過(guò)JSONParser類來(lái)解析返回的JSON數(shù)據(jù)以獲得accessToken:

 private String obtainAccessToken(){ 
        String token; 
         Http h = new Http(); 
         HttpRequest req = new HttpRequest(); 
         req.setMethod(&#39;GET&#39;); 
         req.setHeader(&#39;Accept-Encoding&#39;,&#39;gzip,deflate&#39;); 
         req.setHeader(&#39;Content-Type&#39;,&#39;text/xml;charset=UTF-8&#39;); 
         req.setHeader(&#39;User-Agent&#39;,&#39;Jakarta Commons-HttpClient/3.1&#39;); 
         req.setEndpoint(&#39;https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx548178d7f347f582&corpsecret=9pwWy0AVoT6V65hnwZLYdi4jnLLx65ofBRb_Ds0mAozysQoywDaqbqYCqglm2vhr&#39;); 
         String bodyRes = &#39;&#39;; 
         try{ 
            HttpResponse res = h.send(req); 
            bodyRes = res.getBody(); 
         } 
         catch(System.CalloutException e) { 
            System.debug(&#39;Callout error: &#39;+ e); 
            ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage())); 
         }    
         msg = bodyRes; 
         JSONParser parser = JSON.createParser(bodyRes); 
         while(parser.nextToken() != null){ 
             if((parser.getCurrentToken() == JSONToken.FIELD_NAME)){ 
                 String fieldName = parser.getText(); 
                 parser.nextToken(); 
                 if(fieldName == &#39;access_token&#39;){ 
                     token= parser.getText(); 
                 } 
             } 
         } 
         msg = token; 
         return token; 
    }

接下來(lái)最重要的方法是bind方法,該方法將負(fù)責(zé)用戶身份驗(yàn)證以及通知騰訊用戶關(guān)注成功,可以看到下面代碼里第2行到第6行只做了很簡(jiǎn)單的用戶名密碼校驗(yàn),真實(shí)場(chǎng)景里可以根據(jù)企業(yè)的具體認(rèn)證機(jī)制進(jìn)行替換,從第9行開(kāi)始也即企業(yè)內(nèi)部用戶認(rèn)證通過(guò)后開(kāi)始調(diào)用authsucc接口通知騰訊用戶關(guān)注成功。

 public PageReference bind() {  
        if(!strUsername.equals(&#39;user&#39;)){ 
            msg = &#39;Please input correct user name&#39;;  
        } 
        else if(!strPassword.equals(&#39;123&#39;)){ 
            msg = &#39;Please input correct password&#39;;  
        } 
        else{ 
            msg = &#39;Bind successfully!&#39;; 
            //Notify tencent to add user 
            Http h = new Http(); 
            HttpRequest req = new HttpRequest(); 
            req.setMethod(&#39;GET&#39;); 
            req.setHeader(&#39;Accept-Encoding&#39;,&#39;gzip,deflate&#39;); 
            req.setHeader(&#39;Content-Type&#39;,&#39;text/xml;charset=UTF-8&#39;); 
            req.setHeader(&#39;User-Agent&#39;,&#39;Jakarta Commons-HttpClient/3.1&#39;); 
            req.setEndpoint(&#39;https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token=&#39; + accessToken + &#39;&userid=&#39; + userID); 
            String bodyRes = &#39;&#39;; 
             try{ 
                HttpResponse res = h.send(req); 
                bodyRes = res.getBody(); 
             } 
             catch(System.CalloutException e) { 
                System.debug(&#39;Callout error: &#39;+ e); 
                ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage())); 
             }    
             msg = bodyRes ;  
               } 
    }

?更多Force.com微信企業(yè)號(hào)開(kāi)發(fā)系列- 啟用二次驗(yàn)證相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

?

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276