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