如何將報表系統集成到微信中?

来源:http://www.cnblogs.com/laoA188/archive/2016/10/28/6007658.html
-Advertisement-
Play Games

如今,隨著信息技術的不斷發展,很多公司採用微信企業號來進行企業與員工之間的聯繫。其實微信企業號中右很多獨立的應用。 那麼如何可以將報表系統集成到微信中呢?這裡分享一下在微信企業號中創建獨立的報表應用,並且將微信賬號單點登錄到帆軟報表軟體FineReport的許可權對接。 ...


如今,隨著信息技術的不斷發展,很多公司採用微信企業號來進行企業與員工之間的聯繫。其實微信企業號中右很多獨立的應用。

那麼如何可以將報表系統集成到微信中呢?這裡分享一下在微信企業號中創建獨立的報表應用,並且將微信賬號單點登錄到帆軟報表軟體FineReport的許可權對接。

報表伺服器環境準備

1、報表伺服器環境要求

報表伺服器必須是能夠訪問外網,並且如果是http協議則訪問埠不限,如果是https協議訪問埠必須包含443;同時伺服器的版本必須是8.0及以上的版本;而且jdk也必須是1.6及以上的版本。

2、微信管理插件安裝

為了簡化微信集成,FineReport開發了微信管理插件,將微信的相關配置從後臺轉為前臺可視化界面操作,實現了微信集成基本信息配置、內置回調URL驗證、同步微信通訊錄並與報表用戶關聯實現單點登錄以及定時發送消息至微信成員。FineReport還在開發常見的管理界面。

  •  修改web.xml文件

打開伺服器報表工程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>
  • 安裝後的效果

安裝微信管理插件後,打開報表管理平臺,管理系統下會增加“微信管理”,微信相關的配置管理都將在這個節點中去配置:

同時,設置定時任務的最後一步輸出設置中,會增加“推送微信消息”:

3、手機瀏覽器報表插件

微信集成的企業應用中打開的只能是HTML5頁面,不能使用FineReport新版移動APP的原生解析功能。FineReport開發了手機瀏覽器HTML5瀏覽方式,實現手機瀏覽器中報表的自適應、參數界面分離等效果。

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

報表伺服器請使用jdk1.6或以上的版本。需要將commons-codec-1.9.jar包拷貝到報表伺服器\WEB-INF\lib下麵,如果已經存在其他版本,則可以不需要再導入;

5、更換JCE無限制許可權策略文件

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

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

消息型應用

1、創建報表微信企業應用

管理員登錄微信企業號,根據提示新建應用,創建後消息型應用,進入應用,可以看到應用的基本信息,其中需要關註的信息有

  • 應用ID:微信號中可能有很多個應用,後臺開發的時候需要根據應用ID來決定是在哪個應用中進行響應
  • 可見範圍:微信許可權控制
  • 應用模式:應用模式主要分成兩種: 

1、普通模式:這個模式下不能調用微信的介面,只能設置固定的菜單及恢復的消息;如果需要的微信應用比較簡單,菜單都是固定的,可以用這種模式,但是報表就無法綁定用戶了,查看報表的時候就需要先登錄(除非報表不做許可權控制);

2、回調模式:開發者可以通過企業號提供的介面,獲取微信用戶信息,實現自動回覆、自定義菜單等個性化功能。

2、回調模式設置

原理說明:我們在應用中需要調用微信開放的介面做開發,所以選擇“回調模式”,這樣微信伺服器會在客戶手機和開發者伺服器間架起一個橋梁,通過消息的傳遞和響應,實現與用戶的交互操作:

上面這個流程走通,需要微信伺服器和開發者伺服器先建立通信,這樣才能構建一個完整的鏈路。進入回調模式,開啟模式後,可以看到,下麵的功能都是不可用狀態,需要設置好回調URL及密碼後才能用的。

我們點開修改,會看到有3個參數,都是我們需要關註的:

  • URL:開發伺服器接收微信收企業號伺服器推送請求的地址,支持http或https協議,這個URL就相當於開發伺服器的後臺引擎,微信伺服器推送的請求都是到這個地址,另外註意,這個地址必須是外網可以訪問的,且如果是http協議,埠支持80等埠,https協議埠必需包含443;
  • Token:可由企業任意填寫也可以隨機獲取,用於生成簽名;
  • EncodingAESKey:用於消息體的加密,是AES密鑰的Base64編碼,點擊隨機獲取就可以獲得。

驗證時,企業號會向驗證url發送一個get請求,例如:

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

消息中會有四個參數,並且會以AES方式加密:

  • msg_signature:消息體簽名
  • timestamp:時間戳
  • nonce:隨機數字串
  • echostr:隨機加密字元串

開發伺服器需要解析出Get請求的參數,對參數進行解密,然後使用之前的Token、EncodingAESKey這兩個值進行驗證,成功後,微信伺服器與開發伺服器間的通信就建立起來了。
具體步驟如下:

進入微信管理後臺,進入應用>回調模式,修改回調URL及秘鑰,隨機生成Token和EncodingAESKey,先不要點保存;

登陸FineReport管理平臺,點擊管理系統>微信管理節點:

點擊後,我們將微信企業號的基本信息配置好,如下左圖為FineReport中的配置界面,右圖為微信中的回調URL配置界面:

將之前在微信管理平臺中生成Token及EncodingAESKey這兩個值拷貝到左側FineReport的基本信息中;

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

FineReport中微信管理節本信息填寫完畢後保存;

接收數據URL固定,如:http://review.finedevelop.com:8081/ReportServer?op=weixin,將這個URL寫入到右邊微信企業號管理平臺的回調URL處;

點擊右側微信的保存了,如果驗證成功,則效果如下:

3、微信用戶與報表用戶關聯

15年7月份FineReport與微信集成時,需要通過OAuth2介面獲取微信用戶,並且在後臺根據微信用戶匹配對應的報表用戶及密碼,實現報表的單點登錄。

15年8月份對此進行了改進,在FineReport提供的微信管理中,增加微信成員的管理,可以通過界面化綁定微信成員與報表用戶,通過後臺登錄報表。

不需要實現OAuth2介面獲取微信用戶、不需要後臺匹配報表用戶及密碼、也不需要在後臺實現單點登陸,真正實現無縫集成,下麵就來看看是如何用的。

進入FineReport報表管理平臺fs,點擊“微信管理”節點,除了基本信息外,增加了“微信成員管理”,點擊效果如下:

表格中會自動讀取微信企業號通訊錄中的所有成員,並且在每次打開該頁面時刷新為最新的;

預設“微信成員與報表用戶相同”,因為大部分情況下,微信成員名和報表用戶名是統一的;

如果您的微信成員名與報表用戶名是不一樣的,此時,可以取消勾選“微信成員與報表用戶相同”設置,此時報表用戶名,可以將微信成員與報表用戶進行關聯,如下圖:

4、掛報表

在微信企業號管理平臺中,進入應用>回調模式,設置自定義菜單:

添加事件類型選擇跳轉到網頁,url鏈接規則如下:

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

鏈接中需要包含以下參數:

  • appid:企業的應用ID即CorpID
  • redirect_uri:授權後重定向的回調鏈接地址,報表訪問url,需要使用urlencode對鏈接進行處理
  •  response_type:返回類型,此時固定為:code
  • scope:應用授權作用域,此時固定為:snsapi_base
  • state:重定向後會帶上state參數,企業可以填寫a-zA-Z0-9的參數值
  • wechat_redirect:微信終端使用此參數判斷是否需要帶上身份信息

例如,正常報表訪問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

這個連接需要進行urlencode(utf-8編碼),可以到http://51tools.info/urlencode.aspx轉換一下,編碼後url為:

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

最終,微信中網頁鏈接地址為:

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 

這樣報表就掛好了,可以通過手機進入微信應用,查看效果。

5、微信單點登錄及許可權控制

  • 單點登錄

我們在微信應用中掛上了報表,在手機上,您可以看到是不需要登陸,直接可以查看結果的。而如果您使用手機瀏覽器訪問相同的報表,您會發現,是需要登錄的。那是因為,通過2.3將微信成員與報表用戶關聯後,通過微信企業應用進入查看報表時,在FineReport後臺,我們會使用微信的OAuth2介面進行用戶驗證並獲取對應微信成員名,然後關聯報表用戶並自動登錄,從而實現微信單點登陸。

  • 許可權控制

微信應用的菜單是在微信中管理,所以哪些成員可以看到的哪些報表這是在微信中控制。比如您可以創建多個報表應用,每個應用的查看許可權選擇不同的成員或組。

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

6、定時發送消息至成員

開發伺服器可以主動的發送消息給企業成員,比如使用FineReport定時器生成報表後,發送消息給相應的人員進行查看。進入FineReport管理平臺,添加定時任務:

到輸出設置這步,比如我們將定時生成的結果掛在“定時結果”這個目錄下麵,並且命名為test:

通知與存檔選擇推送微信消息,例如下設置,這樣定時任務結束後,Saber這個微信成員以及產品部門的所有成員都可以收到消息:

  • 定時生成結果的文件名:對應發送消息的標題名
  • 企業應用ID:發消息至哪個應用,如何查看應用ID上述已經講過了
  •  微信用戶:發消息給哪些成員,下拉框中會自動讀取微信通訊錄中的所有成員,多個成員之間用|分割,比如Jane|Saber
  • 部門ID:發消息給某個部門的所有成員,該屬性與微信用戶是並的關係,不同部門之間也用|分割
  • 消息內容:定義消息的正文內容
  • 定時結果訪問連接:勾選的話會在消息正文最後加上定時生成的結果連接,點擊後就可以直接打開定時結果;不選的話則只發送純文本消息。

定時任務設置好後,比如任務每天都會執行,每次執行後就會推送消息給對應的成員,效果如下:

點擊鏈接就可以看到定時生成的結果

主頁型應用

就是定義一個主頁url,然後打開應用的時候直接跳轉到對應的應用url界面,結合新版本的fs目錄,就可以實現微信集成後,打開報表應用,直接顯示出報表目錄,目錄菜單的許可權就可以在報表端來控制。

需要2016-04-01以後的報表伺服器jar包,和微信管理插件

1、創建報表微信企業應用

管理員登錄微信企業號,根據提示新建企業型應用

2、主頁型應用具體配置

登陸FineReport管理平臺,點擊管理系統>微信管理節點,填寫企業id和管理組憑證密鑰:

註:token和encodingaeskey可以不需要填寫,這兩個參數為消息型應用才需要用到。

FineReport中微信管理節本信息填寫完畢後保存。

主頁型應用中,設置主頁url,主頁url規則如下:

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

鏈接中需要包含以下參數:

  • appid:企業的應用ID即CorpID
  •  redirect_uri:授權後重定向的回調鏈接地址,報表訪問url,需要使用urlencode對鏈接進行處理
  • response_type:返回類型,此時固定為:code
  •  scope:應用授權作用域,此時固定為:snsapi_base
  •  state:重定向後會帶上state參數,企業可以填寫a-zA-Z0-9的參數值
  • wechat_redirect:微信終端使用此參數判斷是否需要帶上身份信息

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

這個連接需要進行urlencode,編碼後url為:

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

最終,微信中網頁鏈接地址為:

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、微信用戶和報表用戶關聯

點擊系統管理>微信管理>微信成員管理,將微信賬號和報表用戶賬號進行關聯,配置就完成了:

微信企業號管理平臺使用

1、需要關註的參數

  • CorpID

登錄微信企業號管理平臺,點擊設置,可以看到當前微信企業號的賬號信息,其中就有我們要的企業ID,如下圖:

  • Secret

登錄微信企業號管理平臺,點擊設置,進入許可權管理,選擇開發管理員,最下麵就可以看到CorpID及開發憑據Secret:

  •  應用ID

因為一個企業號中是可以有創建多個應用的,如果後臺想主動發送消息等,需要明確是發往那個應用,此時就需要應用ID,我們可以進入微信企業管理平臺,進入應用中心,點擊應用,就可以看到應用ID了:

  • 部門ID

後臺想主動發消息給某個部門的所有成員時,會通過部門ID來指定部門,可以進入微信企業管理平臺,點擊通訊錄,滑鼠移上對應的部門,點擊後面的小箭頭,就可以看到當前部門ID了:

2、應用許可權控制

登錄微信企業號管理平臺,進入應用中心,選擇應用比如報表應用,可以看到該應用對應的應用管理組:

點擊左側設置按鈕,進入許可權管理:

選擇應用的管理組,如我們這邊是“開發管理員”,給這個管理組開啟應用的發消息和管理的許可權,這樣我們才能在開發伺服器端主動的向該應用發送消息、管理菜單等操作,否則後臺調用微信介面的時候,會報沒有許可權。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先一個android項目,然後編譯和打包,將.java文件編譯為.class,.class編譯為.dex,將所有文件打包為一個apk,只編譯代碼,不編譯資源。 .apk裡面的.arsc是資源的索引,當資源比較多的時候,可以索引。 signing-簽名,系統在確認應用被覆蓋之前,除了檢測包名是否一致 ...
  • button的點擊效果無疑是非常簡單的,以致於我懶到當UI告訴我說在點擊的時候button字體的顏色也要隨著背景改變的時候我毫不猶豫的告訴他讓他切兩個圖過來,後來想想著實是不太靠譜,於是瞭解了一下如何添加button點擊的字體顏色變化效果。 1.首先你要在你的color文件下加入幾個你需要的色值,註 ...
  • 1:iOS項目配置文件info.plist文件解析 2:iOS最新的許可權設置 3:關於openURL 蘋果在iOS 2中引入了openURL:方法來進行APP間的跳轉。不過在iOS 9中,相關的canOpenURL在iOS 10中,蘋果已棄用了openURL,轉而用openURL:options:c ...
  • MenuPopwindow: 1 package com.cloudeye.android.cloudeye.view; 2 3 import android.app.Activity; 4 import android.content.Context; 5 import android.graph ...
  • Android Studio常用快捷鍵 Android Studio日常開發常用快捷鍵. 快捷鍵版本: Mac OS X 10.5+ 搜索查看類 | 用途 | Mac快捷鍵 | |: |: | | 搜索所有文件 | double Shift | | 搜索文件 | Cmd + Shift + O | ...
  • 實現的效果比較簡單類似於微信打開網頁,頭部有個進度條顯示載入進度 下載地址:http://download.csdn.net/detail/qq_29774291/9666941 1.在安卓端載入一個網頁 2.顯示網頁開始載入和載入的進度;不過在有時會出現onPageStarted等多次調用的情況, ...
  • 前幾天將我的Xcode升到了8,但是在運行程式時,會列印很多沒有用的信息,如下圖: Xcode8運行程式時列印的亂碼 Xcode8運行程式時列印的亂碼 於是各種尋求答案,找到如下答案: Edit Scheme-> Run -> Arguments, 在Environment Variables裡邊添 ...
  • 本文是轉載的,轉載地址: "大白話解釋Strategy模式和State模式的區別" 先上圖: 本質上講,策略模式和狀態模式做得是同一件事:去耦合。怎麼去耦合?就是把乾什麼(語境類)和怎麼乾(策略介面)分開,互不依賴。打個比方,下麵是我一天的行程: 但問題來了,啪啪啪是個技術活,有著名的48式,今天到 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...