久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

返回列表 發帖
查看: 2502|回復: 0

discuz X2中DIY的第三方C/S擴展

83

主題

-6

回帖

329

積分

爐火純青

貢獻
2 點
金幣
241 個
樓主
發表于 2019-6-1 16:41:46 | 只看樓主 |倒序瀏覽 |閱讀模式
*************************************************
** 本教程基于版本:Discuz! X 2.0                                         **
*************************************************

論壇后臺門戶第三訪模塊
添加第三方模塊,后臺需要填寫以下選項

第三方地址: 輸入 第三方模塊的 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 數組里。



回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

  • 關注公眾號
  • 有償服務微信
  • 有償服務QQ

手機版|小黑屋|Discuz! 官方交流社區 ( 皖ICP備16010102號 |皖公網安備34010302002376號 )|網站地圖|star

GMT+8, 2025-7-1 21:27 , Processed in 0.037327 second(s), 7 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2025 Discuz! Team.

關燈 在本版發帖
有償服務QQ
有償服務微信
返回頂部
快速回復 返回頂部 返回列表