Maison >Applet WeChat >Développement WeChat >La série de développement de comptes d'entreprise Force.com WeChat permet une vérification en deux étapes

La série de développement de comptes d'entreprise Force.com WeChat permet une vérification en deux étapes

高洛峰
高洛峰original
2017-03-03 09:49:052954parcourir

Après que WeChat ait lancé le compte d'entreprise en septembre, cela a fait beaucoup de bruit dans le secteur. De nombreuses entreprises réfléchissent à la manière dont le compte d'entreprise affectera leurs opérations. article, I Nous développerons les connaissances pertinentes du développement de comptes d'entreprise WeChat, et cet article se concentrera sur la façon de réaliser une vérification secondaire d'un mécanisme de sécurité plus élevé.

Demander un compte d'expérience d'entreprise :

Le compte d'entreprise, comme son nom l'indique, est le compte pour lequel les entreprises postulent, tout comme pour un compte de service. , vous devez fournir divers documents de certification organisationnels. Il est difficile pour les développeurs de fonctionner. Heureusement, Tencent a également ouvert une application pour les comptes d'expérience tout comme les comptes de service. Notez que la période de validité des comptes d'expérience d'entreprise est très courte, seulement 90 jours. (les comptes de test de compte de service ont une période de validité de 1 an), et si le compte d'expérience d'entreprise n'est pas utilisé pendant une longue période, vous recevrez un e-mail de rappel d'expiration anticipée de Tencent. Le lien de candidature pour le compte d'expérience d'entreprise est le suivant. Les développeurs n'ont qu'à suivre les conseils de Tencent pour terminer les étapes d'inscription et obtenir le compte d'expérience immédiatement :

http://qydev.weixin.qq.com/try. ?t= expérience

Ajouter des membres au carnet d'adresses :

Différent du compte public, car destiné à un usage interne de l'entreprise, Tencent permet aux entreprises de participer activement ajouter des fans. L'opération spécifique consiste à entrer Cliquez sur le bouton après le carnet d'adresses pour ajouter un nouveau membre. Notez que comme informations personnelles uniques, il doit y avoir au moins un identifiant WeChat, un numéro de téléphone portable ou une adresse e-mail. pour collecter directement l'identifiant WeChat. Généralement, vous pouvez utiliser le numéro de téléphone mobile, l'adresse e-mail et d'autres informations dans la base de données RH de l'entreprise. En plus de l'ajout manuel, l'opération spécifique peut également être ajoutée via l'importation de modèles Excel et le compte Tencent Enterprise WeChat. API. L'API ajoutant des utilisateurs sera présentée dans un chapitre ultérieur.


Force.com微信企业号开发系列- 启用二次验证 > Force.com微信企业号开发系列- 启用二次验证Une fois la saisie terminée, le Le code QR de l'identifiant WeChat de l'entreprise peut être envoyé à l'employé. Une fois que l'employé l'a scanné, l'assistant d'identification d'entreprise par défaut du système apparaîtra automatiquement. L'assistant guidera automatiquement l'employé à travers l'e-mail ou le code de vérification du téléphone portable est utilisé pour compléter. le processus de liaison de l'identité des employés.Il s'agit d'une vérification unique.L'entreprise garantit elle-même l'exactitude des données des employés dans le carnet d'adresses.Une fois la vérification réussie, le point d'interrogation. dans la colonne d'état du carnet d'adresses disparaîtra. Indique qu'une vérification a réussi :

Pour cela nous pouvons nous référer au document d'interface officiel du compte entreprise http://qydev.weixin.qq.com/wiki/index.phptitle =Suivre et Ne plus suivre pour développer la page correspondante sur la plateforme Force.com. Force.com微信企业号开发系列- 启用二次验证

Développer une page pour une vérification en deux étapes :

De même, la page est divisée en deux parties, une partie est la partie d'affichage, qui est utilisée pour saisir le nom d'utilisateur et mot de passe. Le diagramme de la page est le suivant. Utilisateur Entrez le nom d'utilisateur et le mot de passe 123 et cliquez sur le bouton de liaison pour terminer la liaison :

La fenêtre suivante apparaîtra et vous devrez saisir l'adresse de la page de vérification secondaire de l'entreprise :


Force.com微信企业号开发系列- 启用二次验证

Pour cela nous pouvons nous référer au document d'interface officielle du Compte Entreprise http:/ /qydev.weixin.qq.com/wiki/index.phptitle=Suivre et ne plus suivre la page correspondante développée sur la plateforme Force.com.

Développer une page pour la vérification secondaire :

De même, la page est divisée en deux parties. Une partie est la partie d'affichage, qui est utilisée pour saisir le nom d'utilisateur et le mot de passe. Le diagramme de la page est le suivant. L'utilisateur saisit le nom d'utilisateur et le mot de passe 123 et clique. le bouton de liaison pour terminer la reliure :


Force.com微信企业号开发系列- 启用二次验证

Le nom de la page est EmployeeAuth, le code de la page est le suivant, certaines balises sont uniques au code apex, aucune compréhension approfondie n'est requise, l'important est que l'attribut d'action du bouton à la ligne 13 spécifie la méthode de liaison lorsque vous cliquez sur le bouton. , la méthode bind de la classe contrôleur EmployeeAuthController sera appelée :

<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>

Avant d'interpréter le code de la classe contrôleur EmployeeAuthController, regardons d'abord les étapes de l'authentification secondaire WeChat.

Étapes et mécanisme de vérification secondaire :

1. Tout d'abord, lorsque la vérification principale de WeChat (ou la vérification de l'e-mail ou du numéro de téléphone portable) est terminée, WeChat enverra un message comme indiqué ci-dessous à l'utilisateur :

Force.com微信企业号开发系列- 启用二次验证

2. Saut de page :

Lorsque l'utilisateur clique sur cette image et ce texte, il ouvre en fait un site Web. La page située sous le site Web open.weixin.qq.com effectuera un certain traitement, puis passera à l'URL définie précédemment lors de la vérification secondaire, qui est la page que nous développons. Lors du saut, nous ajouterons le paramètre code=CODE&state=STATE. après l'URL définie. Par exemple, dans cet exemple, l'URL configurée pour la deuxième vérification est http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth, puis démarrez à partir de Tencent openweixin.qq. après les sauts com est http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth?code=CODE&state=STATE. Tencent n'a pas expliqué à quoi sert le paramètre d'état ici, et ce n'est pas important pour le moment. L'important est le paramètre code.Vous pouvez utiliser ce paramètre pour appeler l'interface oauth2 de Tencent en échange de l'ID utilisateur de l'employé. Notez que l'ID utilisateur est un concept très important. Il n'y a pas d'OpenId WeChat dans le compte d'entreprise. identifier l'utilisateur. Cet ID utilisateur est en fait Ce qui précède est la valeur du champ du compte lorsque nous maintenons le carnet d'adresses :


Force.com微信企业号开发系列- 启用二次验证

3. Appelez l'interface Tencent oauth2 via le code en échange de l'ID utilisateur de l'employé

Pour les instructions sur cette interface, veuillez vous référer à la documentation de Tencent http ://qydev.weixin.qq.com/wiki/ index.phptitle=Obtenez les informations sur les membres en fonction du code, vous pouvez également participer aux instructions ci-dessous. Ce qui nécessite une explication particulière ici, c'est le jeton d'accès et l'identifiant de l'agent :

.

Force.com微信企业号开发系列- 启用二次验证

Les lecteurs qui ont développé un compte public WeChat ou qui ont lu les précédents articles connexes Les articles de développement doivent être conscients du fait que l'accès est requis lors de l'appel actif de l'API de Tencent. Le jeton a garanti la légitimité de l'accès. Il existe également une interface spéciale pour obtenir le jeton d'accès. Pour une introduction spécifique, veuillez vous référer aux documents http de la société Tencent. ://qydev.weixin.qq.com/wiki/index.php?title=Active call, Pour faire simple, l'obtention du token d'accès se fait en fait via l'interface suivante :

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

Dans cette interface, Corpid est facile à trouver, vous pouvez le trouver en ouvrant les paramètres, comme indiqué ci-dessous :


Force.com微信企业号开发系列- 启用二次验证

不过corpsecret就没那么好找,实际是需要系统管理员在后台创建管理组,创建管理组后就可以拥有相应的Secret,而这个Secret所拥有的访问权限就是系统管理员创建的管理组所拥有的权限,腾讯文章http://qydev.weixin.qq.com/wiki/index.php?title=Secret也有提到:

Force.com微信企业号开发系列- 启用二次验证

 

再回过头来说agentid腾讯文档里提到指的是“跳转链接时所在的企业应用ID”,在本例里其实指的就是发送“身份验证”图文消息的那个应用也就是“企业小助手”的应用ID,当然在不同的用户场景里可能会是不同的应用在调用换取userid接口,如何查看“企业小助手”的应用ID呢?进到应用中心,第一个就是企业小助手,点击进入就可以看到如下图所示的企业应用ID了:

Force.com微信企业号开发系列- 启用二次验证

 

4. 二次验证

拿到userid后实际就可以进行二次验证了,二次验证的方式有很多种,例如如果公司已经建立起良好的通讯录管理机制(userid等和企业人力资源数据库同步,入职离职员工均能和企业号通讯录同步),拿到userid后只要判断这个userid是一位在职员工就可以自动判断为二次验证通过,或者再保险点如本例演示的,要求员工输入公司的员工用户名和密码进行验证。留意,输入用户名和密码验证的页面也就是我们前面提到的二次验证页面是属于企业拥有也是企业开发的,这样就确保了企业对安全的控制,具体操作上,用户输入用户名和密码后企业可以调用已有的接口进行验证,如果验证成功则将员工的userid等信息保存在业务系统数据库中一遍后续操作。

5.通知腾讯关注成功

现在最后一步等企业在自己的网页里完成了用户验证后只剩下通知腾讯该用户已经验证成功让相应员工关注成功,此时应该调用如下接口,可以看到接口需要的第二个参数即是我们前面换回来的userid:

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

此接口的详细说明如下:


Force.com微信企业号开发系列- 启用二次验证

 

二次验证的代码实现:

按照前面的思路,我们首先获取从腾讯跳转过来的code,并通过code换取用户的userid,换取的这个过程在页面加载中完成,为此主要代码应放在类构造器里。下面的代码里设置了五个变量,其中strPassword和strUsername和用户在页面里输入的用户名和密码相对应,userID用来存储换回来的userid信息,msg用来调试帮助在页面里显示中间信息,accessToken则用来存储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行调用obtainAccessToken方法获取accessToken,后续会介绍该方法的详情,accessToken两个小时内会失效,所以这里采取实时获取的方式,当然可以设计的再巧妙些以省却每次实时获取accessToken的网络开销。第10行获得了从腾讯跳转过来时带的code参数,从第11行通过HttpRequest方法来调用换取接口获得userid,留意第18行指定了agentid为0,这是因为验证消息是从企业小助手应用发起的,而企业小助手应用id是0。第29行开始解析返回来的JSON数据获取userid。

下面是obtainAccessToken方法,方法内容也比较直接,主要通过调用gettoken接口来获取accessToken,并通过JSONParser类来解析返回的JSON数据以获得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; 
    }

 

 接下来最重要的方法是bind方法,该方法将负责用户身份验证以及通知腾讯用户关注成功,可以看到下面代码里第2行到第6行只做了很简单的用户名密码校验,真实场景里可以根据企业的具体认证机制进行替换,从第9行开始也即企业内部用户认证通过后开始调用authsucc接口通知腾讯用户关注成功。

   

 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微信企业号开发系列- 启用二次验证相关文章请关注PHP中文网!

 

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn