添加第三方模塊, 後台需要填寫以下選項
第三方地址: 輸入 第三方模塊的 URL 地址,第三方返回的內容必須 XML 模塊的格式
客户端 ID: 此 ID 由數據源方提供
簽名加密方式: 目前支持 MD5 加密方式,也可以不使用簽名,由數據源方提供
通信密鑰: 從 URL 地址獲得數據時的密鑰,如果數據源不需要密鑰可以為空。此密鑰由數據源方提供
提交的時候程序會使用 import_block 函數 去服務端請求配置
其間 該函數會調用 create_sign_url 函數 生成簽名
- function create_sign_url($para, $key = '', $signtype = ''){
- ksort($para);
- $url = http_build_query($para);
- if(!empty($signtype) && strtoupper($signtype) == 'MD5') {
- $sign = md5(urldecode($url).$key);
- $url = $url.'&sign='.$sign;
- } else {
- $url = $url.'&sign='.$key;
- }
- return $url;
- }
create_sign_url 會將第一個參數 url 參數的數組 $para(包括:clientid 、 op 、 charset) 用 ksort 排序
然後 用 http_build_query 函數轉義生成 url 的參數 連上後台設置的 通信密鑰 進行 md5 加密後生成的 sign
然後拼接着請求的參數
如 charset=gbk&clientid=100000&op=getconfig&sign=ce09add6aaadfcc58f7d6140dc55fa09
如果後台沒有設置加密方式 sign 為後台設置的通信密鑰
請求的參數與後台設置的 第三方地址 拼成完成的向第三請求的地址
使用 dz 的 dfsockopen 函數請求第三方服務端
服務端需要返回 xml 有 Title 和 Data 兩部分的配置
其中 Title 分部是固定的且區分大小寫:<item id="Title"><![CDATA[Discuz! Block]]></item>
Data 分部主要包括 5 個屬性:
a 、 version: 版本號 (必需)
b 、 name: 模塊名 (必需)
c 、 fields: 可顯示的字段, 在模塊樣式中使用 (必需)
* name 為該字段的顯示名稱
* formtype 決定編輯單條數據時該字段的顯示方式: 類型有: text, textarea, date, title, summary, pic;
* datatype 決定該字段的數據展示,類型有: string, int, date, title, summary, pic;
d 、 getsetting: 可設置和接收的參數 (必需)
* title 為顯示的名稱
* type 為表單類型, 有: text, password, number, textarea, radio, select, mselect, mradio, mcheckbox, calendar;
f 、 style: 內置的顯示樣式 (非必需)
前台模塊更新 除了向第三方請求數據時除了會以 POST 方式向第三方服務端傳遞後台設置的參數外 還會以 POST 的方式附加傳遞以下參數:* op=getdata ,此參數表示客户端要請求數據;
* clientid ,客户端 ID(服務器分配給客户端的 ID);
* op=getdata ,此參數表示客户端要請求數據;
* items ,為用户指定顯示的模塊數據條數;
* bannedids ,為用户選擇屏蔽某數據時記錄在模塊中的該數據 id,多個 id 以半角分號 (,) 分隔。 應該在獲取數據時屏蔽該數據;
* charset,客户端的數據編碼
* sign ,數據簽名,如果服務器端沒有設置通信密鑰則此值為空
第三方服務端返回數據的 data 中應該包含 上面配置中可顯示的字段 fields 指定的所有字段。並附加以下字段:* id 標誌該數據的
id,如果用户屏蔽某數據時,會將該數據的 id 以 POST 的方式變量名為 bannedids,多個 id 以半角逗號 (,) 分隔提交到服務器端
* picflag 如果有圖片,則該值標誌圖片的類型,0 為 url 、 1 為本地、 2 為 ftp 遠程;如果圖片是 Discuz! X 系統中的圖片可以情況設置為 1 或 2,其它情況為 0
需要注意: 除 id,title, url, pic, picflag, summary 幾個字段外,其它字段需要放到 fields 數組裏。