論壇後臺門戶第三訪模組
新增第三方模組, 後臺需要填寫以下選項

第三方地址: 輸入 第三方模組的 URL 地址,第三方返回的內容必須 XML 模組的格式
客戶端 ID: 此 ID 由資料來源方提供
簽名加密方式: 目前支援 MD5 加密方式,也可以不使用簽名,由資料來源方提供
通訊金鑰: 從 URL 地址獲得資料時的金鑰,如果資料來源不需要金鑰可以為空。此金鑰由資料來源方提供

提交的時候程式會使用 import_block 函式 去服務端請求配置

其間 該函式會呼叫 create_sign_url 函式 生成簽名

  1. function create_sign_url($para, $key = '', $signtype = ''){
  2.         ksort($para);
  3.         $url = http_build_query($para);
  4.         if(!empty($signtype) && strtoupper($signtype) == 'MD5') {
  5.                 $sign = md5(urldecode($url).$key);
  6.                 $url = $url.'&sign='.$sign;
  7.         } else {
  8.                 $url = $url.'&sign='.$key;
  9.         }
  10.         return $url;
  11. }

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 陣列裡。