关于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/n/149863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JVBVJVBV
上一篇 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

发表回复

登录后才能评论