關於php釘釘sdk使用方法的信息

本文目錄一覽:

php 使用釘釘機器人推送消息

群機器人是釘釘群的高級擴展功能。群機器人可以將第三方服務的信息聚合到群聊中,實現自動化的信息同步。目前,大部分機器人在添加後,還需要進行Webhook配置,才可正常使用(配置說明詳見操作流程中的幫助鏈接)。

例如:

通過聚合GitHub,GitLab等源碼管理服務,實現源碼更新同步。

通過聚合Trello,JIRA等項目協調服務,實現項目信息同步。

另外,群機器人支持Webhook協議的自定義接入,支持更多可能性,例如:你可將運維報警通過自定義機器人聚合到釘釘群實現提醒功能。

消息發送太頻繁會嚴重影響群成員的使用體驗,大量發消息的場景(譬如系統監控報警)可以將這些信息進行整合,通過markdown消息以摘要的形式發送到群里。

每個機器人每分鐘最多發送20條。如果超過20條,會限流10分鐘。

登錄釘釘PC客戶端(請升級至最新版),操作入口:

窗口右上角點擊【頭像】,進入」機器人管理「, 可對所有機器人進行統一管理。

進入一個釘釘群,在群的頂部功能欄中,點擊【群設置】,進入菜單可以看到【群機器人】的入口,點擊進入「群機器人」的管理面板後,可以進行添加、編輯和刪除群機器人的操作。

我們這裡使用最後一個webhook

步驟一,在機器人管理頁面選擇「自定義」機器人,輸入機器人名字並選擇要發送消息的群。如果需要的話,可以為機器人設置一個頭像。點擊「完成添加」,完成後會生成Hook地址,如下圖:

步驟二,點擊「複製」按鈕,即可獲得這個機器人對應的Webhook地址,其格式如下:

(1)獲取到Webhook地址後,用戶可以向這個地址發起HTTP POST 請求,即可實現給該釘釘群發送消息。注意,發起POST請求時,必須將字符集編碼設置成UTF-8。

(2)當前自定義機器人支持文本 (text)、鏈接 (link)、markdown(markdown)、ActionCard、FeedCard消息類型,大家可以根據自己的使用場景選擇合適的消息類型,達到最好的展示樣式。

(3)自定義機器人發送消息時,可以通過手機號碼指定「被@人列表」。在「被@人列表」裡面的人員收到該消息時,會有@消息提醒(免打擾會話仍然通知提醒,首屏出現「有人@你」)。

(4)當前機器人尚不支持應答機制 (該機制指的是群里成員在聊天@機器人的時候,釘釘回調指定的服務地址,即Outgoing機器人)。

thinkphp怎麼引用釘釘配置文件包

創建微應用的時候把地址指向你下載的demo包就行,然後把配置文件config.php裡面的欄位值換成你自己的

釘釘群會話怎麼用php實現,用text消息

後端代碼

push.php

?php

use Workerman\Worker;

require_once ‘./Workerman/Autoloader.php’;

// 初始化一個worker容器,監聽1234埠

$worker = new Worker(‘websocket://0.0.0.0:1234’);

// 這裡進程數必須設置為1

$worker-count = 1;

// worker進程啟動後建立一個內部通訊埠

$worker-onWorkerStart = function($worker)

{

    // 開啟一個內部埠,方便內部系統推送數據,Text協議格式 文本+換行符

    $inner_text_worker = new Worker(‘Text://0.0.0.0:5678’);

    $inner_text_worker-onMessage = function($connection, $buffer)

    {

        global $worker;

        // $data數組格式,裡面有uid,表示向那個uid的頁面推送數據

        $data = json_decode($buffer, true);

        $uid = $data[‘uid’];

        // 通過workerman,向uid的頁面推送數據

        $ret = sendMessageByUid($uid, $buffer);

        // 返回推送結果

        $connection-send($ret ? ‘ok’ : ‘fail’);

    };

    $inner_text_worker-listen();

你可以去後盾人平台看看,裡面的東西不錯

如何使用sdk來快速開發app

一、基於Android系統的例子

1、準備工作:

使用Eclipse新建一個Android項目,根據要求提示填寫相關信息,然後構建APP框架(詳細圖文可在百度經驗查找:怎樣創建安卓項目?)

2、這裡使用的是一個比分SDK,要了解所用的SDK,可獲取整個示例工程以及對應的APK安裝包進行運行。運行工程可以通過以下兩種方式進行運行:

a. 直接安裝比分SDK Demo.apk至手機進行運行

b. 在Eclipse中導入並運行比分SDKDemo工程

(資源包獲取自戳:體育大數據 – 數據中心)

3、提供你的應用程序包名和簽名,到體育大數據 – 首頁留言申請應用程序的APP_KEY,得到開放介面。完成後在應用中添加SDK所需要的許可權,打開AndroidManifest.xml文件,將SDK需要的許可權添加到該文件中即可:

uses-permission android:name=”android.permission.INTERNET” /

uses-permission android:name=”android.permission.ACCESS_WIFI_STATE” /

uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” /

uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” /

4、用一個簡單的APP框架,內嵌進去一個現成的比分SDK,就可以達成以下效果:

PS. 現在要做出一個有內容的APP,用第三方提供的現成SDK直接嵌入是最方便的,只要你能找到適合的SDK,就會節省很多精力和時間。還需要其他什麼SDK可自行網上查找。試完Android系統的,有興趣可以再嘗試下IOS系統,前提你是土豪,哦不,是你的電腦要是Mac系統。

二、基於IOS系統的例子

1、準備工作:

同上,還是要先創建一個IOS項目,這回使用的是xcode,詳細圖文可以繼續問度娘。

2、引入SMSDK.framework

將所需的SMSDK.framework拷貝到工程所在文件夾下。

在 TARGETS-Build Phases- Link Binary With Libaries中點擊「+」按鈕,在彈出的窗口中點擊「Add Other」按鈕,選擇SMSDK.framework文件添加到工程中。

2、引入所需的第三方庫(7M SDK需要在XCode工程引入以下的第三方類庫以確保項目能夠正確運行)

通過CocoaPods安裝,將以下語句添加進工程的Podfile,然後打開終端在工程目錄執行pod install命令,運行[工程名稱].xcworkspace,開始工作!

pod ‘Reachability’

pod ‘Masonry’

pod ‘ReactiveCocoa’

pod ‘AFNetworking’

pod ‘CocoaLumberjack’

pod ‘Nimbus/Core’, ‘1.0.0’

pod ‘Nimbus/AttributedLabel’, ‘1.0.0’

3、引入資源bundle

需要在Xcode工程中引入SMSDK.bundle,確保SMSDK圖片能正常顯示

4、環境配置

在TARGETS-Build Settings-Other Linker Flags 中添加-ObjC。

效果如圖:

第一次這麼認真地回答一個問題,恰好用到了這個SDK,如有做體育項目的朋友也有需要,可自行搜索sportsdt,其他就不多說了。

phpsdk怎麼開始開發?

你有自己的網站,想開發一個php的sdk,然後開放出去給別人調用。

你已經下載了別人的sdk,然後想基於該sdk開發自己的應用。

第一種情況,無非是寫一些開放介面,讓別人可以對你網站進行有限的讀寫操作。

第二種情況很常見。最常見的就是我們下載微博的sdk,然後開發自己的應用。如果是這樣,你可以多參考sdk的wiki頁面,上面一般都有實例代碼。

最外層包含:配置文件, 鑒權和一些公共的函數。

HTTP 目錄主要包含了一些對 http 進行封裝的類,這塊你可以不用關心。

Storage 目錄主要包含兩大塊:Bucket 中文件的管理和文件的上傳。

Processing 目錄主要包含文件的處理,文件處理又包含兩個方面:同步處理和非同步處理。

Cdn 目錄主要包含了 CDN 的相關 API ,有文件的刷新和預取,CDN 日誌的下載等方法。

php怎麼獲取釘釘員工授權信息?

做過一個E應用,使用lumen框架,和你的思路是一樣的,新用戶點進去就自動授權註冊應用,數據存到我們自己的資料庫中,不依賴釘釘,我們還同步了部門信息,如果粘貼複製和下面的那個同學一樣,看上去你也會覺得懵,方法都是封裝好了的。

建議你這樣試試看:

 獲取AccessToken:

後端通過corpid,corpsecret請求介面gettoken?corpid=idcorpsecret=secrect獲取AccessToken

獲取釘釘用戶userid:

前端需要相應的處理,攜帶authCode請求,加上AccessToken這兩個參數請求介面/user/getuserinfo?access_token=access_tokencode=authCode這個

獲取釘釘用戶詳情:

使用access_token和上一步的釘釘userid 請求介面 /user/get?access_token=ACCESS_TOKENuserid=

插入釘釘用戶的數據到你的 資料庫中

我們這樣做的:

/**

* 釘釘免登陸獲獲取用信息

* @param $authCode

* @param $url

* @return array

*/

static function outhLogin($authCode, $url)

{

if (empty($authCode) || empty($url)) {

return self::returnError(‘1101’, self::$errorArray[‘1101’]);

}

$accessToken = ComponentDingtalk::getPcAccessToken();

if ($accessToken[‘code’]) {

self::logError(__CLASS__ . ‘-‘ . __FUNCTION__, ‘獲取access_token失敗’);

return self::returnError(‘1102’, self::$errorArray[‘1102’]);

}

$dingUserId = ComponentDingtalk::getDingUserid($accessToken[‘data’], $authCode);

if ($dingUserId[‘code’]) {

self::logError(__CLASS__ . ‘-‘ . __FUNCTION__, ‘用戶userid獲取失敗(調用釘釘API)’);

return self::returnError(‘1103’, self::$errorArray[‘1103’]);

}

$dinguserInfo = ComponentDingtalk::getDingUserInfo($accessToken[‘data’], $dingUserId[‘data’]);

if ($dinguserInfo[‘code’]) {

self::logError(__CLASS__ . ‘-‘ . __FUNCTION__, ‘用戶信息獲取失敗(調用釘釘API)’);

return self::returnError(‘1104’, self::$errorArray[‘1004’]);

}

$userInfo = $dinguserInfo[‘data’];

return self::transaction(function () use ($accessToken, $userInfo, $url) {

if (\count($userInfo[‘department’]) 1) {

$departIdArr = [];

$departNameArr = [];

for ($i = 0, $iMax = \count($userInfo[‘department’]); $i $iMax; $i++) {

$departInfo[$i] = ServerDepartment::getByDdDepartid($userInfo[‘department’][$i]);

$departIdArr[] = $departInfo[$i][‘id’];

$departNameArr[] = $departInfo[$i][‘name’];

}

$depart[‘id’] = implode(‘,’, $departIdArr);

$depart[‘name’] = implode(‘,’, $departNameArr);

} else {

$ddDepartmentId = implode(‘,’, $userInfo[‘department’]);

$depart = ServerDepartment::getByDdDepartid($ddDepartmentId);

}

//插入用戶

$user = ServerEmployee::getByDdUserid($userInfo[‘userid’]);

if ($user $user[‘status’] == 2) {

return self::returnError(‘1105’, self::$errorArray[‘1105’]);

}

if (empty($user)) {

$roleId = 0;

$departId = $depart[‘id’];

$name = $userInfo[‘name’];

$mobile = $userInfo[‘mobile’];

$departName = $depart[‘name’];

$position = $userInfo[‘position’];

$ddUserid = $userInfo[‘userid’];

$ddStatus = $userInfo[‘active’] ? 1 : 2;

$ddInfo = json_encode($userInfo, JSON_UNESCAPED_UNICODE);

$tokenOverAt = (int)(time() + $_ENV[‘PROJECT_apiAppTokenOverTime’]);

$token = self::_createToken($userInfo[‘userid’], $tokenOverAt);

$status = 1;

$userId = ServerEmployee::insert($roleId, $departId, $name, $mobile, $departName, $position, $ddUserid, $ddStatus, $ddInfo, $token, $tokenOverAt, $status);

if (!$userId) {

self::logError(__CLASS__ . ‘-‘ . __FUNCTION__, ‘用戶初始化創建失敗’);

return self::returnError(‘1106’, self::$errorArray[‘1106’]);

}

}

$userId = $userId ?? $user[‘id’];

// 更新Token

$id = $userId;

$roleId = $user[‘roleId’];

$departId = $depart[‘id’];

$name = $userInfo[‘name’];

$mobile = $userInfo[‘mobile’];

$departName = $depart[‘name’];

$position = $userInfo[‘position’];

$ddUserid = $userInfo[‘userid’];

$ddStatus = $userInfo[‘active’] ? 1 : 2;

$ddInfo = json_encode($userInfo, JSON_UNESCAPED_UNICODE);

$tokenOverAt = (int)(time() + $_ENV[‘PROJECT_apiAppTokenOverTime’]);

$token = self::_createToken($userInfo[‘userid’], $tokenOverAt);

$status = 1;

$updateParams = ServerEmployee::update($id, $roleId, $departId, $name, $mobile, $departName, $position, $ddUserid, $ddStatus, $ddInfo, $token, $tokenOverAt, $status);

if (!$updateParams) {

self::logError(__CLASS__ . ‘-‘ . __FUNCTION__, ‘用戶信息更新失敗’ . json_encode($updateParams, JSON_UNESCAPED_UNICODE) . ‘/’ . json_encode([$id, $roleId, $departId, $name, $mobile, $depart, $position, $ddUserid, $ddStatus, $ddInfo, $token, $tokenOverAt, $status]));

return self::returnError(‘1107’, self::$errorArray[‘1107’]);

}

// 前端的配置信息

// 獲取jsTicket

$jsTicket = ComponentDingtalk::getPcJsTicket($accessToken[‘data’]);

if ($jsTicket[‘code’]) {

self::logError(__CLASS__ . ‘-‘ . __FUNCTION__, ‘獲取jsTicket失敗(調用釘釘API)’);

return self::returnError(‘1111’, self::$errorArray[‘1111’]);

}

// 組裝簽名數據

$curUrl = $url;;

$nonceStr = uniqid(”, true);

$agentId = $_ENV[‘PROJECT_ddInterfaceAgentID’];

$timeStamp = time();

$corpId = $_ENV[‘PROJECT_ddInterfaceCorpId’];

$signature = ComponentDingtalk::getSign($jsTicket[‘data’], $nonceStr, $timeStamp, $curUrl);

$config = array(

‘url’ = urldecode($curUrl),

‘nonceStr’ = $nonceStr,

‘agentId’ = $agentId,

‘timeStamp’ = $timeStamp,

‘corpId’ = $corpId,

‘signature’ = $signature

);

// 獲取當前角色的許可權

$roleInfo = ServerRole::getById($roleId);

// 當前用戶的頂級部門(不含根部門)

$departInfo = ServerDepartment::getById($departId);

if ($departInfo[‘parentid’] == 1) {  // 二級部門(總經辦)

$departRootId = $departId;

$departRootName = $departName;

} else {

$sonDepart = ServerDepartment::getById($departInfo[‘parentid’]);//分組

if ($sonDepart[‘parentid’] == 1) {

$departRootId = $sonDepart[‘id’];

$departRootName = $sonDepart[‘name’];

} else {

$grandsonDepart = ServerDepartment::getById($sonDepart[‘parentid’]);//部門

if ($grandsonDepart[‘parentid’] == 1) {

$departRootId = $grandsonDepart[‘id’];

$departRootName = $grandsonDepart[‘name’];

} else {

$grandchildDepart = ServerDepartment::getById($grandsonDepart[‘parentid’]);//分公司

$departRootId = $grandchildDepart[‘id’];

$departRootName = $grandchildDepart[‘name’];

}

}

}

$company = ServerDepartment::get([‘parentid’ = 0, ‘dd_departid’ = 1]);

return self::returnSuccess(array(

‘id’ = $userId,

‘name’ = $name,

‘token’ = $token,

‘tokenOverAt’ = $tokenOverAt,

‘config’ = $config,

‘power’ = $roleInfo[‘power’] ?? ”,

‘departId’ = $departId,

‘departName’ = $departName,

‘departRootId’ = $departRootId,

‘departRootName’ = $departRootName,

‘company’ = $company[‘name’],

));

}, function (\Exception $e) {

echo $e-getMessage();

self::logError(__CLASS__ . ‘-‘ . __FUNCTION__, $e-getMessage());

return self::returnError(‘1108’, self::$errorArray[‘1108’]);

});

}

原創文章,作者:JVBV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149863.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JVBV的頭像JVBV
上一篇 2024-11-05 16:54
下一篇 2024-11-05 16:54

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變數、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29
  • 利用Java SDK發送騰訊雲簡訊

    Java SDK是一種利用Java語言編寫的軟體開發工具包,是Java開發中非常重要的一環。下面將介紹如何使用Java SDK發送騰訊雲簡訊。 一、引入SDK依賴 首先,在你的Ja…

    編程 2025-04-29
  • Python下載到桌面圖標使用方法用法介紹

    Python是一種高級編程語言,非常適合初學者,同時也深受老手喜愛。在Python中,如果我們想要將某個程序下載到桌面上,需要注意一些細節。本文將從多個方面對Python下載到桌面…

    編程 2025-04-29
  • Python匿名變數的使用方法

    Python中的匿名變數是指使用「_」來代替變數名的特殊變數。這篇文章將從多個方面介紹匿名變數的使用方法。 一、作為佔位符 匿名變數通常用作佔位符,用於代替一個不需要使用的變數。例…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 百度地區熱力圖的介紹和使用方法

    本文將詳細介紹百度地區熱力圖的使用方法和相關知識。 一、什麼是百度地區熱力圖 百度地區熱力圖是一種用於展示區域內某種數據分布情況的地圖呈現方式。它通過一張地圖上不同區域的顏色深淺,…

    編程 2025-04-29
  • Java 監控介面返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控介面返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • Matlab中addpath的使用方法

    addpath函數是Matlab中的一個非常常用的函數,它可以在Matlab環境中增加一個或者多個文件夾的路徑,使得Matlab可以在需要時自動搜索到這些文件夾中的函數。因此,學會…

    編程 2025-04-29

發表回復

登錄後才能評論