Heim > Artikel > WeChat-Applet > Force.com WeChat-Enterprise-Konto-Entwicklungsserie ermöglicht die zweistufige Verifizierung
Nachdem WeChat im September das Enterprise-Konto eingeführt hat, hat es in der Branche große Resonanz ausgelöst. Viele Unternehmen denken darüber nach, wie sich das Enterprise-Konto auf ihre Abläufe auswirken wird In diesem Artikel werde ich auf das relevante Wissen über die Entwicklung von WeChat-Unternehmenskonten eingehen. In diesem Artikel wird der Schwerpunkt darauf gelegt, wie eine sekundäre Überprüfung eines höheren Sicherheitsmechanismus erreicht werden kann.
Bewerben Sie sich für ein Enterprise Experience-Konto:
Wie der Name schon sagt, ist ein Enterprise-Konto ein Konto, das Unternehmen bei der Beantragung beantragen, genau wie bei der Bewerbung für eine Dienstleistung Für das Konto müssen verschiedene Organisationszertifizierungsdokumente bereitgestellt werden. Glücklicherweise hat Tencent ebenso wie Dienstkonten einen Antrag eröffnet. Beachten Sie, dass die Gültigkeitsdauer von Unternehmenserfahrungskonten sehr kurz ist Tage (Testkonten für Dienstkonten haben eine Gültigkeitsdauer von 1 Jahr) und Wenn das Enterprise Experience-Konto längere Zeit nicht verwendet wird, erhalten Sie von Tencent eine Erinnerungs-E-Mail zum vorzeitigen Ablauf. Der Anwendungslink für das Enterprise Experience-Konto lautet wie folgt. Entwickler müssen nur den Anweisungen von Tencent folgen, um die Registrierungsschritte abzuschließen und das Experience-Konto sofort zu erhalten:
http://qydev.weixin.qq.com/try ?t= Erfahrung
Mitglieder zum Adressbuch hinzufügen:
Anders als das öffentliche Konto, da es für den internen Gebrauch des Unternehmens bestimmt ist, ermöglicht Tencent Unternehmen die aktive Nutzung Der spezifische Vorgang besteht darin, nach dem Adressbuch auf die Schaltfläche „+“ zu klicken. Beachten Sie, dass als einzige persönliche Identifikationsinformation mindestens eine WeChat-ID, eine Mobiltelefonnummer oder eine E-Mail-Adresse vorhanden sein muss Es ist normalerweise schwierig, WeChat-IDs direkt zu erfassen. Im Allgemeinen können Sie die Mobiltelefonnummer und E-Mail-Adresse in der HR-Datenbank des Unternehmens verwenden. Zusätzlich zum manuellen Hinzufügen können Sie diese auch über den Excel-Vorlagenimport und die Tencent Enterprise Account WeChat-API hinzufügen . Die API zum Hinzufügen von Benutzern wird in einem späteren Kapitel vorgestellt.
> Nachdem die Eingabe abgeschlossen ist, wird die Der QR-Code der Unternehmens-WeChat-ID kann an den Mitarbeiter gesendet werden. Nachdem der Mitarbeiter ihn gescannt hat, wird automatisch der Standard-Unternehmens-ID-Assistent des Systems angezeigt. Der Assistent führt den Mitarbeiter automatisch durch die E-Mail oder den Mobiltelefon-Verifizierungscode Der Prozess der Mitarbeiteridentitätsprüfung ist eine einmalige Überprüfung. Das Unternehmen stellt die Richtigkeit der Mitarbeiterdaten im Adressbuch selbst sicher. Nach der Überprüfung wird das Fragezeichen gestellt in der Spalte „Adressbuchstatus“ verschwindet. Zeigt an, dass eine Überprüfung erfolgreich war:
Dazu können wir auf das offizielle Schnittstellendokument von Enterprise Account verweisen 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 entwickelt entsprechende Seiten auf Force.com Plattform. Entwickeln Sie eine Seite für die sekundäre Überprüfung:
Ähnlich ist die Seite in zwei Teile unterteilt, ein Teil ist der Anzeigeteil, der zur Eingabe des Benutzernamens und des Passworts verwendet wird Das Seitendiagramm lautet wie folgt: Benutzer Geben Sie den Benutzernamen Benutzer und das Kennwort 123 ein und klicken Sie auf die Schaltfläche „Binden“, um die Bindung abzuschließen:
Das folgende Fenster wird geöffnet und Sie müssen die Adresse der sekundären Verifizierungsseite des Unternehmens eingeben:
Dazu können wir auf das offizielle Schnittstellendokument des Enterprise Accounts http://qydev.weixin verweisen .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 entwickeln entsprechende Seiten auf der Force.com-Plattform.
Entwickeln Sie eine Seite für die sekundäre Überprüfung:
In ähnlicher Weise ist die Seite in zwei Teile unterteilt, die zur Eingabe des Benutzernamens und des Passworts verwendet werden. Das Seitendiagramm sieht wie folgt aus: Klicken Sie auf die Schaltfläche „Binden“, um die Bindung abzuschließen:
Der Seitenname ist EmployeeAuth, der Seitencode ist wie folgt, einige Tags sind einzigartig für den Apex-Code, es ist kein tiefgreifendes Verständnis erforderlich, wichtig ist, dass das Aktionsattribut der Schaltfläche in Zeile 13 die Bindungsmethode angibt, wenn auf die Schaltfläche geklickt wird , wird die Bindungsmethode der Controller-Klasse EmployeeAuthController aufgerufen:
<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>
Bevor wir den Code der Controller-Klasse EmployeeAuthController interpretieren, schauen wir uns zunächst die Schritte an der sekundären WeChat-Authentifizierung.
Schritte und Mechanismus der sekundären Überprüfung:
1. Wenn die primäre Verifizierung von WeChat (oder die Verifizierung der E-Mail- oder Mobiltelefonnummer) abgeschlossen ist, sendet WeChat eine Nachricht wie unten gezeigt an den Benutzer:
2. Seitensprung:
Wenn der Benutzer auf dieses Bild und diesen Text klickt, wird tatsächlich ein Web geöffnet Die Seite unter der Website open.weixin.qq.com führt einige Verarbeitungen durch und springt dann zu der zuvor in der sekundären Überprüfung festgelegten URL. Dies ist die Seite, die wir entwickeln. Beim Springen fügen wir den Parameter code=CODE&state=STATE hinzu Nach der festgelegten URL lautet die für die zweite Überprüfung konfigurierte URL beispielsweise http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth. Beginnen Sie dann mit Tencent openweixin.qq nach com-Sprüngen ist http://johnson0001-developer-edition.ap1.force.com/EmployeeAuth?code=CODE&state=STATE. Tencent hat nicht erklärt, wozu der Statusparameter hier dient, und er ist im Moment nicht wichtig. Das Wichtigste ist der Code-Parameter, mit dem Sie die oauth2-Schnittstelle von Tencent aufrufen können. Beachten Sie, dass die Benutzer-ID ein sehr wichtiges Konzept ist. Im Unternehmenskonto wird nur die Benutzer-ID verwendet Identifizieren Sie den Benutzer. Das Obige ist der Kontofeldwert, wenn wir das Adressbuch verwalten:
3. Rufen Sie die Tencent oauth2-Schnittstelle über Code im Austausch gegen die Mitarbeiter-Benutzer-ID auf
Anweisungen zu dieser Schnittstelle finden Sie in der Tencent-Dokumentation 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, Sie können auch an den folgenden Anweisungen teilnehmen. Was hier einer besonderen Erklärung bedarf, ist das Zugriffstoken und die Agenten-ID:
Leser, die an der Entwicklung öffentlicher WeChat-Konten beteiligt waren oder die vorherigen Artikel zur entsprechenden Entwicklung gelesen haben, sollten damit vertraut sein Beim aktiven Aufruf der Tencent-API ist ein Zugriffstoken erforderlich, um die Legitimität des Zugriffs sicherzustellen. Eine spezifische Einführung finden Sie in den Tencent-Unternehmensdokumenten. qq.com/wiki/index.php?title=%E4%B8%BB%E5%8A %A8%E8%B0%83%E7%94%A8 Der Erhalt des Zugriffstokens erfolgt tatsächlich über Folgende Schnittstelle:
https://qyapi.weixin.qq.com/cgi-bin/gettoken ?corpid=id&corpsecret=secrect
Corpid ist in dieser Schnittstelle leicht zu finden Öffnen Sie dazu die Einstellungen, wie unten gezeigt:
不过corpsecret就没那么好找,实际是需要系统管理员在后台创建管理组,创建管理组后就可以拥有相应的Secret,而这个Secret所拥有的访问权限就是系统管理员创建的管理组所拥有的权限,腾讯文章http://qydev.weixin.qq.com/wiki/index.php?title=Secret也有提到:
再回过头来说agentid腾讯文档里提到指的是“跳转链接时所在的企业应用ID”,在本例里其实指的就是发送“身份验证”图文消息的那个应用也就是“企业小助手”的应用ID,当然在不同的用户场景里可能会是不同的应用在调用换取userid接口,如何查看“企业小助手”的应用ID呢?进到应用中心,第一个就是企业小助手,点击进入就可以看到如下图所示的企业应用ID了:
4. 二次验证
拿到userid后实际就可以进行二次验证了,二次验证的方式有很多种,例如如果公司已经建立起良好的通讯录管理机制(userid等和企业人力资源数据库同步,入职离职员工均能和企业号通讯录同步),拿到userid后只要判断这个userid是一位在职员工就可以自动判断为二次验证通过,或者再保险点如本例演示的,要求员工输入公司的员工用户名和密码进行验证。留意,输入用户名和密码验证的页面也就是我们前面提到的二次验证页面是属于企业拥有也是企业开发的,这样就确保了企业对安全的控制,具体操作上,用户输入用户名和密码后企业可以调用已有的接口进行验证,如果验证成功则将员工的userid等信息保存在业务系统数据库中一遍后续操作。
5.通知腾讯关注成功
现在最后一步等企业在自己的网页里完成了用户验证后只剩下通知腾讯该用户已经验证成功让相应员工关注成功,此时应该调用如下接口,可以看到接口需要的第二个参数即是我们前面换回来的userid:
https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token=ACCESS_TOKEN&userid=USERID
此接口的详细说明如下:
二次验证的代码实现:
按照前面的思路,我们首先获取从腾讯跳转过来的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('code'); //Obtain user ID Http h = new Http(); HttpRequest req = new HttpRequest(); req.setMethod('GET'); req.setHeader('Accept-Encoding','gzip,deflate'); req.setHeader('Content-Type','text/xml;charset=UTF-8'); req.setHeader('User-Agent','Jakarta Commons-HttpClient/3.1'); req.setEndpoint('https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=' + accessToken + '&code=' + code + '&agentid=0'); String bodyRes = ''; try{ HttpResponse res = h.send(req); bodyRes = res.getBody(); } catch(System.CalloutException e) { System.debug('Callout error: '+ 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 == 'UserId'){ 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('GET'); req.setHeader('Accept-Encoding','gzip,deflate'); req.setHeader('Content-Type','text/xml;charset=UTF-8'); req.setHeader('User-Agent','Jakarta Commons-HttpClient/3.1'); req.setEndpoint('https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx548178d7f347f582&corpsecret=9pwWy0AVoT6V65hnwZLYdi4jnLLx65ofBRb_Ds0mAozysQoywDaqbqYCqglm2vhr'); String bodyRes = ''; try{ HttpResponse res = h.send(req); bodyRes = res.getBody(); } catch(System.CalloutException e) { System.debug('Callout error: '+ 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 == 'access_token'){ token= parser.getText(); } } } msg = token; return token; }
接下来最重要的方法是bind方法,该方法将负责用户身份验证以及通知腾讯用户关注成功,可以看到下面代码里第2行到第6行只做了很简单的用户名密码校验,真实场景里可以根据企业的具体认证机制进行替换,从第9行开始也即企业内部用户认证通过后开始调用authsucc接口通知腾讯用户关注成功。
public PageReference bind() { if(!strUsername.equals('user')){ msg = 'Please input correct user name'; } else if(!strPassword.equals('123')){ msg = 'Please input correct password'; } else{ msg = 'Bind successfully!'; //Notify tencent to add user Http h = new Http(); HttpRequest req = new HttpRequest(); req.setMethod('GET'); req.setHeader('Accept-Encoding','gzip,deflate'); req.setHeader('Content-Type','text/xml;charset=UTF-8'); req.setHeader('User-Agent','Jakarta Commons-HttpClient/3.1'); req.setEndpoint('https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token=' + accessToken + '&userid=' + userID); String bodyRes = ''; try{ HttpResponse res = h.send(req); bodyRes = res.getBody(); } catch(System.CalloutException e) { System.debug('Callout error: '+ e); ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage())); } msg = bodyRes ; } }
更多Force.com微信企业号开发系列- 启用二次验证相关文章请关注PHP中文网!