wuxiren123

          如何將報(bào)表系統(tǒng)集成到微信中?

          如今,隨著信息技術(shù)的不斷發(fā)展,很多公司采用微信企業(yè)號來進(jìn)行企業(yè)與員工之間的聯(lián)系。其實(shí)微信企業(yè)號中右很多獨(dú)立的應(yīng)用。

          那么如何可以將報(bào)表系統(tǒng)集成到微信中呢?這里分享一下在微信企業(yè)號中創(chuàng)建獨(dú)立的報(bào)表應(yīng)用,并且將微信賬號單點(diǎn)登錄到帆軟報(bào)表軟件FineReport的權(quán)限對接。

          報(bào)表服務(wù)器環(huán)境準(zhǔn)備

          1、報(bào)表服務(wù)器環(huán)境要求

          報(bào)表服務(wù)器必須是能夠訪問外網(wǎng),并且如果是http協(xié)議則訪問端口不限,如果是https協(xié)議訪問端口必須包含443;同時(shí)服務(wù)器的版本必須是8.0及以上的版本;而且jdk也必須是1.6及以上的版本。

          2、微信管理插件安裝

          為了簡化微信集成,F(xiàn)ineReport開發(fā)了微信管理插件,將微信的相關(guān)配置從后臺(tái)轉(zhuǎn)為前臺(tái)可視化界面操作,實(shí)現(xiàn)了微信集成基本信息配置、內(nèi)置回調(diào)URL驗(yàn)證、同步微信通訊錄并與報(bào)表用戶關(guān)聯(lián)實(shí)現(xiàn)單點(diǎn)登錄以及定時(shí)發(fā)送消息至微信成員。FineReport還在開發(fā)常見的管理界面。

          •  修改web.xml文件

          打開服務(wù)器報(bào)表工程WEB-INF下的web.xml,在其中新增WeiXinServer,如下:

          <servlet>
              
          <servlet-name>WeiXinServer</servlet-name>
              
          <servlet-class>com.fr.wei.plugin.weixin.web.WeiXinServlet</servlet-class>
              
          <load-on-startup>0</load-on-startup>
            
          </servlet>

            
          <servlet-mapping>
              
          <servlet-name>WeiXinServer</servlet-name>
              
          <url-pattern>/WeiXinServer</url-pattern>
            
          </servlet-mapping>

          修改后的web.xml如

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app 
             xmlns
          ="http://java.sun.com/xml/ns/j2ee" 
             xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation
          ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
             version
          ="2.4"> 

            
          <display-name>Template WebApp</display-name>
            
              
          <mime-mapping>
            
          <extension>msi</extension>
            
          <mime-type>application/x-msi</mime-type>
            
          </mime-mapping>

            
          <servlet>
              
          <servlet-name>ReportServer</servlet-name>
              
          <servlet-class>com.fr.web.ReportServlet</servlet-class>
              
          <load-on-startup>0</load-on-startup>
            
          </servlet>

            
          <servlet>
              
          <servlet-name>WeiXinServer</servlet-name>
              
          <servlet-class>com.fr.wei.plugin.weixin.web.WeiXinServlet</servlet-class>
              
          <load-on-startup>0</load-on-startup>
            
          </servlet>

            
          <servlet-mapping>
              
          <servlet-name>WeiXinServer</servlet-name>
              
          <url-pattern>/WeiXinServer</url-pattern>
            
          </servlet-mapping>

            
          <servlet-mapping>
              
          <servlet-name>ReportServer</servlet-name>
              
          <url-pattern>/ReportServer</url-pattern>
            
          </servlet-mapping>

          </web-app>
          • 安裝后的效果

          安裝微信管理插件后,打開報(bào)表管理平臺(tái),管理系統(tǒng)下會(huì)增加“微信管理”,微信相關(guān)的配置管理都將在這個(gè)節(jié)點(diǎn)中去配置:

          同時(shí),設(shè)置定時(shí)任務(wù)的最后一步輸出設(shè)置中,會(huì)增加“推送微信消息”:

          3、手機(jī)瀏覽器報(bào)表插件

          微信集成的企業(yè)應(yīng)用中打開的只能是HTML5頁面,不能使用FineReport新版移動(dòng)APP的原生解析功能。FineReport開發(fā)了手機(jī)瀏覽器HTML5瀏覽方式,實(shí)現(xiàn)手機(jī)瀏覽器中報(bào)表的自適應(yīng)、參數(shù)界面分離等效果。

          4、需要commons-codec-1.9.jar包

          報(bào)表服務(wù)器請使用jdk1.6或以上的版本。需要將commons-codec-1.9.jar包拷貝到報(bào)表服務(wù)器\WEB-INF\lib下面,如果已經(jīng)存在其他版本,則可以不需要再導(dǎo)入;

          5、更換JCE無限制權(quán)限策略文件

          需要根據(jù)jdk版本,替換%JDK_HOME%\jre\lib\security目錄下的local_policy.jar和US_export_policy.jar這兩個(gè)jar包,此為JCE無限制權(quán)限策略文件,如果不做這步操作,會(huì)有Java.security.InvalidKeyException:illegal Key Size異常,從而不能正確進(jìn)行微信AES解密。

          下載對應(yīng)版本的jce,替換到%WebSphere_HOME%\AppServer\java\jre\lib\security

          消息型應(yīng)用

          1、創(chuàng)建報(bào)表微信企業(yè)應(yīng)用

          管理員登錄微信企業(yè)號,根據(jù)提示新建應(yīng)用,創(chuàng)建后消息型應(yīng)用,進(jìn)入應(yīng)用,可以看到應(yīng)用的基本信息,其中需要關(guān)注的信息有

           

          • 應(yīng)用ID:微信號中可能有很多個(gè)應(yīng)用,后臺(tái)開發(fā)的時(shí)候需要根據(jù)應(yīng)用ID來決定是在哪個(gè)應(yīng)用中進(jìn)行響應(yīng)
          • 可見范圍:微信權(quán)限控制
          • 應(yīng)用模式:應(yīng)用模式主要分成兩種: 

          1、普通模式:這個(gè)模式下不能調(diào)用微信的接口,只能設(shè)置固定的菜單及恢復(fù)的消息;如果需要的微信應(yīng)用比較簡單,菜單都是固定的,可以用這種模式,但是報(bào)表就無法綁定用戶了,查看報(bào)表的時(shí)候就需要先登錄(除非報(bào)表不做權(quán)限控制);

          2、回調(diào)模式:開發(fā)者可以通過企業(yè)號提供的接口,獲取微信用戶信息,實(shí)現(xiàn)自動(dòng)回復(fù)、自定義菜單等個(gè)性化功能。

          2、回調(diào)模式設(shè)置

          原理說明:我們在應(yīng)用中需要調(diào)用微信開放的接口做開發(fā),所以選擇“回調(diào)模式”,這樣微信服務(wù)器會(huì)在客戶手機(jī)和開發(fā)者服務(wù)器間架起一個(gè)橋梁,通過消息的傳遞和響應(yīng),實(shí)現(xiàn)與用戶的交互操作:

          上面這個(gè)流程走通,需要微信服務(wù)器和開發(fā)者服務(wù)器先建立通信,這樣才能構(gòu)建一個(gè)完整的鏈路。進(jìn)入回調(diào)模式,開啟模式后,可以看到,下面的功能都是不可用狀態(tài),需要設(shè)置好回調(diào)URL及密碼后才能用的。

          我們點(diǎn)開修改,會(huì)看到有3個(gè)參數(shù),都是我們需要關(guān)注的:

          • URL:開發(fā)服務(wù)器接收微信收企業(yè)號服務(wù)器推送請求的地址,支持http或https協(xié)議,這個(gè)URL就相當(dāng)于開發(fā)服務(wù)器的后臺(tái)引擎,微信服務(wù)器推送的請求都是到這個(gè)地址,另外注意,這個(gè)地址必須是外網(wǎng)可以訪問的,且如果是http協(xié)議,端口支持80等端口,https協(xié)議端口必需包含443;
          • Token:可由企業(yè)任意填寫也可以隨機(jī)獲取,用于生成簽名;
          • EncodingAESKey:用于消息體的加密,是AES密鑰的Base64編碼,點(diǎn)擊隨機(jī)獲取就可以獲得。

          驗(yàn)證時(shí),企業(yè)號會(huì)向驗(yàn)證url發(fā)送一個(gè)get請求,例如:

          xxurl?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3×tamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D

          消息中會(huì)有四個(gè)參數(shù),并且會(huì)以AES方式加密:

          • msg_signature:消息體簽名
          • timestamp:時(shí)間戳
          • nonce:隨機(jī)數(shù)字串
          • echostr:隨機(jī)加密字符串

          開發(fā)服務(wù)器需要解析出Get請求的參數(shù),對參數(shù)進(jìn)行解密,然后使用之前的Token、EncodingAESKey這兩個(gè)值進(jìn)行驗(yàn)證,成功后,微信服務(wù)器與開發(fā)服務(wù)器間的通信就建立起來了。
          具體步驟如下:

          進(jìn)入微信管理后臺(tái),進(jìn)入應(yīng)用>回調(diào)模式,修改回調(diào)URL及秘鑰,隨機(jī)生成Token和EncodingAESKey,先不要點(diǎn)保存;

          登陸FineReport管理平臺(tái),點(diǎn)擊管理系統(tǒng)>微信管理節(jié)點(diǎn):

          點(diǎn)擊后,我們將微信企業(yè)號的基本信息配置好,如下左圖為FineReport中的配置界面,右圖為微信中的回調(diào)URL配置界面:

          將之前在微信管理平臺(tái)中生成Token及EncodingAESKey這兩個(gè)值拷貝到左側(cè)FineReport的基本信息中;

          將企業(yè)ID及管理組秘鑰即corpid及secret填寫到FineReport基本信息中

          FineReport中微信管理節(jié)本信息填寫完畢后保存;

          接收數(shù)據(jù)URL固定,如:http://review.finedevelop.com:8081/ReportServer?op=weixin,將這個(gè)URL寫入到右邊微信企業(yè)號管理平臺(tái)的回調(diào)URL處;

          點(diǎn)擊右側(cè)微信的保存了,如果驗(yàn)證成功,則效果如下:

          3、微信用戶與報(bào)表用戶關(guān)聯(lián)

          15年7月份FineReport與微信集成時(shí),需要通過OAuth2接口獲取微信用戶,并且在后臺(tái)根據(jù)微信用戶匹配對應(yīng)的報(bào)表用戶及密碼,實(shí)現(xiàn)報(bào)表的單點(diǎn)登錄。

          15年8月份對此進(jìn)行了改進(jìn),在FineReport提供的微信管理中,增加微信成員的管理,可以通過界面化綁定微信成員與報(bào)表用戶,通過后臺(tái)登錄報(bào)表。

          不需要實(shí)現(xiàn)OAuth2接口獲取微信用戶、不需要后臺(tái)匹配報(bào)表用戶及密碼、也不需要在后臺(tái)實(shí)現(xiàn)單點(diǎn)登陸,真正實(shí)現(xiàn)無縫集成,下面就來看看是如何用的。

          進(jìn)入FineReport報(bào)表管理平臺(tái)fs,點(diǎn)擊“微信管理”節(jié)點(diǎn),除了基本信息外,增加了“微信成員管理”,點(diǎn)擊效果如下:

          表格中會(huì)自動(dòng)讀取微信企業(yè)號通訊錄中的所有成員,并且在每次打開該頁面時(shí)刷新為最新的;

          默認(rèn)“微信成員與報(bào)表用戶相同”,因?yàn)榇蟛糠智闆r下,微信成員名和報(bào)表用戶名是統(tǒng)一的;

          如果您的微信成員名與報(bào)表用戶名是不一樣的,此時(shí),可以取消勾選“微信成員與報(bào)表用戶相同”設(shè)置,此時(shí)報(bào)表用戶名,可以將微信成員與報(bào)表用戶進(jìn)行關(guān)聯(lián),如下圖:

          4、掛報(bào)表

          在微信企業(yè)號管理平臺(tái)中,進(jìn)入應(yīng)用>回調(diào)模式,設(shè)置自定義菜單:

          添加事件類型選擇跳轉(zhuǎn)到網(wǎng)頁,url鏈接規(guī)則如下:

          https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxx&redirect_uri=xxxxx&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 

          鏈接中需要包含以下參數(shù):

          • appid:企業(yè)的應(yīng)用ID即CorpID
          • redirect_uri:授權(quán)后重定向的回調(diào)鏈接地址,報(bào)表訪問url,需要使用urlencode對鏈接進(jìn)行處理
          •  response_type:返回類型,此時(shí)固定為:code
          • scope:應(yīng)用授權(quán)作用域,此時(shí)固定為:snsapi_base
          • state:重定向后會(huì)帶上state參數(shù),企業(yè)可以填寫a-zA-Z0-9的參數(shù)值
          • wechat_redirect:微信終端使用此參數(shù)判斷是否需要帶上身份信息

          例如,正常報(bào)表訪問url為:

          http://review.finedevelop.com:8081/WeiXin/ReportServer?reportlet=WeiXin/swll.cpt

          將url中ReportServer換成WeiXinServer,替換后url為

          http://review.finedevelop.com:8081/WeiXin/WeiXinServer?reportlet=WeiXin/swll.cpt

          這個(gè)連接需要進(jìn)行urlencode(utf-8編碼),可以到http://51tools.info/urlencode.aspx轉(zhuǎn)換一下,編碼后url為:

          http%3a%2f%2freview.finedevelop.com%3a8081%2fWeiXin%2fWeiXinServer%3freportlet%3dWeiXin%2fswll.cpt

          最終,微信中網(wǎng)頁鏈接地址為:

          https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxx&redirect_uri=http%3a%2f%2freview.finedevelop.com%3a8081%2fWeiXin%2fWeiXinServer%3freportlet%3dWeiXin%2fswll.cpt&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 

          這樣報(bào)表就掛好了,可以通過手機(jī)進(jìn)入微信應(yīng)用,查看效果。

          5、微信單點(diǎn)登錄及權(quán)限控制

          • 單點(diǎn)登錄

          我們在微信應(yīng)用中掛上了報(bào)表,在手機(jī)上,您可以看到是不需要登陸,直接可以查看結(jié)果的。而如果您使用手機(jī)瀏覽器訪問相同的報(bào)表,您會(huì)發(fā)現(xiàn),是需要登錄的。那是因?yàn)?,通過2.3將微信成員與報(bào)表用戶關(guān)聯(lián)后,通過微信企業(yè)應(yīng)用進(jìn)入查看報(bào)表時(shí),在FineReport后臺(tái),我們會(huì)使用微信的OAuth2接口進(jìn)行用戶驗(yàn)證并獲取對應(yīng)微信成員名,然后關(guān)聯(lián)報(bào)表用戶并自動(dòng)登錄,從而實(shí)現(xiàn)微信單點(diǎn)登陸。

          • 權(quán)限控制

          微信應(yīng)用的菜單是在微信中管理,所以哪些成員可以看到的哪些報(bào)表這是在微信中控制。比如您可以創(chuàng)建多個(gè)報(bào)表應(yīng)用,每個(gè)應(yīng)用的查看權(quán)限選擇不同的成員或組。

          用戶在微信中打開報(bào)表,是否可以查看報(bào)表的內(nèi)容,以及可以查看的數(shù)據(jù)這部分是在FineReport報(bào)表端控制的,控制方法與PC端是一樣的,比如可以通過角色控制可查看的報(bào)表,可以在報(bào)表模板中通過sql語句通過用戶名過濾來實(shí)現(xiàn)不同用戶看到的數(shù)據(jù)不同等等。

          6、定時(shí)發(fā)送消息至成員

          開發(fā)服務(wù)器可以主動(dòng)的發(fā)送消息給企業(yè)成員,比如使用FineReport定時(shí)器生成報(bào)表后,發(fā)送消息給相應(yīng)的人員進(jìn)行查看。進(jìn)入FineReport管理平臺(tái),添加定時(shí)任務(wù):

          到輸出設(shè)置這步,比如我們將定時(shí)生成的結(jié)果掛在“定時(shí)結(jié)果”這個(gè)目錄下面,并且命名為test:

          通知與存檔選擇推送微信消息,例如下設(shè)置,這樣定時(shí)任務(wù)結(jié)束后,Saber這個(gè)微信成員以及產(chǎn)品部門的所有成員都可以收到消息:

          • 定時(shí)生成結(jié)果的文件名:對應(yīng)發(fā)送消息的標(biāo)題名
          • 企業(yè)應(yīng)用ID:發(fā)消息至哪個(gè)應(yīng)用,如何查看應(yīng)用ID上述已經(jīng)講過了
          •  微信用戶:發(fā)消息給哪些成員,下拉框中會(huì)自動(dòng)讀取微信通訊錄中的所有成員,多個(gè)成員之間用|分割,比如Jane|Saber
          • 部門ID:發(fā)消息給某個(gè)部門的所有成員,該屬性與微信用戶是并的關(guān)系,不同部門之間也用|分割
          • 消息內(nèi)容:定義消息的正文內(nèi)容
          • 定時(shí)結(jié)果訪問連接:勾選的話會(huì)在消息正文最后加上定時(shí)生成的結(jié)果連接,點(diǎn)擊后就可以直接打開定時(shí)結(jié)果;不選的話則只發(fā)送純文本消息。

          定時(shí)任務(wù)設(shè)置好后,比如任務(wù)每天都會(huì)執(zhí)行,每次執(zhí)行后就會(huì)推送消息給對應(yīng)的成員,效果如下:

          點(diǎn)擊鏈接就可以看到定時(shí)生成的結(jié)果

          主頁型應(yīng)用

          就是定義一個(gè)主頁url,然后打開應(yīng)用的時(shí)候直接跳轉(zhuǎn)到對應(yīng)的應(yīng)用url界面,結(jié)合新版本的fs目錄,就可以實(shí)現(xiàn)微信集成后,打開報(bào)表應(yīng)用,直接顯示出報(bào)表目錄,目錄菜單的權(quán)限就可以在報(bào)表端來控制。

          需要2016-04-01以后的報(bào)表服務(wù)器jar包,和微信管理插件

          1、創(chuàng)建報(bào)表微信企業(yè)應(yīng)用

          管理員登錄微信企業(yè)號,根據(jù)提示新建企業(yè)型應(yīng)用

          2、主頁型應(yīng)用具體配置

          登陸FineReport管理平臺(tái),點(diǎn)擊管理系統(tǒng)>微信管理節(jié)點(diǎn),填寫企業(yè)id和管理組憑證密鑰:

          注:token和encodingaeskey可以不需要填寫,這兩個(gè)參數(shù)為消息型應(yīng)用才需要用到。

          FineReport中微信管理節(jié)本信息填寫完畢后保存。

          主頁型應(yīng)用中,設(shè)置主頁url,主頁url規(guī)則如下:

          https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxx&redirect_uri=xxxxx&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 

          鏈接中需要包含以下參數(shù):

          • appid:企業(yè)的應(yīng)用ID即CorpID
          •  redirect_uri:授權(quán)后重定向的回調(diào)鏈接地址,報(bào)表訪問url,需要使用urlencode對鏈接進(jìn)行處理
          • response_type:返回類型,此時(shí)固定為:code
          •  scope:應(yīng)用授權(quán)作用域,此時(shí)固定為:snsapi_base
          •  state:重定向后會(huì)帶上state參數(shù),企業(yè)可以填寫a-zA-Z0-9的參數(shù)值
          • wechat_redirect:微信終端使用此參數(shù)判斷是否需要帶上身份信息

          例如,fs登錄url為http://www.finereporthelp.com:8889/h5/ReportServer?op=fs

          這個(gè)連接需要進(jìn)行urlencode,編碼后url為:

          http%3a%2f%2fwww.finereporthelp.com%3a8889%2fh5%2fReportServer%3fop%3dfs

          最終,微信中網(wǎng)頁鏈接地址為:

          https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxae62313e1fa9279b&redirect_uri=http%3a%2f%2fwww.finereporthelp.com%3a8889%2fh5%2fReportServer%3fop%3dfs&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect  

          3、微信用戶和報(bào)表用戶關(guān)聯(lián)

          點(diǎn)擊系統(tǒng)管理>微信管理>微信成員管理,將微信賬號和報(bào)表用戶賬號進(jìn)行關(guān)聯(lián),配置就完成了:

          微信企業(yè)號管理平臺(tái)使用

          1、需要關(guān)注的參數(shù)

          • CorpID

          登錄微信企業(yè)號管理平臺(tái),點(diǎn)擊設(shè)置,可以看到當(dāng)前微信企業(yè)號的賬號信息,其中就有我們要的企業(yè)ID,如下圖:

          • Secret

          登錄微信企業(yè)號管理平臺(tái),點(diǎn)擊設(shè)置,進(jìn)入權(quán)限管理,選擇開發(fā)管理員,最下面就可以看到CorpID及開發(fā)憑據(jù)Secret:

          •  應(yīng)用ID

          因?yàn)橐粋€(gè)企業(yè)號中是可以有創(chuàng)建多個(gè)應(yīng)用的,如果后臺(tái)想主動(dòng)發(fā)送消息等,需要明確是發(fā)往那個(gè)應(yīng)用,此時(shí)就需要應(yīng)用ID,我們可以進(jìn)入微信企業(yè)管理平臺(tái),進(jìn)入應(yīng)用中心,點(diǎn)擊應(yīng)用,就可以看到應(yīng)用ID了:

          • 部門ID

          后臺(tái)想主動(dòng)發(fā)消息給某個(gè)部門的所有成員時(shí),會(huì)通過部門ID來指定部門,可以進(jìn)入微信企業(yè)管理平臺(tái),點(diǎn)擊通訊錄,鼠標(biāo)移上對應(yīng)的部門,點(diǎn)擊后面的小箭頭,就可以看到當(dāng)前部門ID了:

          2、應(yīng)用權(quán)限控制

          登錄微信企業(yè)號管理平臺(tái),進(jìn)入應(yīng)用中心,選擇應(yīng)用比如報(bào)表應(yīng)用,可以看到該應(yīng)用對應(yīng)的應(yīng)用管理組:

          點(diǎn)擊左側(cè)設(shè)置按鈕,進(jìn)入權(quán)限管理:

          選擇應(yīng)用的管理組,如我們這邊是“開發(fā)管理員”,給這個(gè)管理組開啟應(yīng)用的發(fā)消息和管理的權(quán)限,這樣我們才能在開發(fā)服務(wù)器端主動(dòng)的向該應(yīng)用發(fā)送消息、管理菜單等操作,否則后臺(tái)調(diào)用微信接口的時(shí)候,會(huì)報(bào)沒有權(quán)限。

          posted on 2016-10-28 14:00 喝水居然長肉 閱讀(181) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 蓝田县| 修水县| 西青区| 晋江市| 阿拉善左旗| 石阡县| 株洲市| 喀喇| 濉溪县| 井研县| 延长县| 金塔县| 丰镇市| 长泰县| 海阳市| 抚顺市| 石楼县| 科尔| 博罗县| 潍坊市| 宁夏| 罗江县| 江安县| 平舆县| 鄂伦春自治旗| 六盘水市| 海阳市| 鲁甸县| 永丰县| 毕节市| 河曲县| 东平县| 承德市| 禹城市| 始兴县| 桑日县| 石阡县| 泸水县| 兴义市| 墨竹工卡县| 综艺|