开发者学堂课程【钉钉应用云开发实战营:Serverless 云应用访问钉钉开放平台】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/909/detail/14403
Serverless 云应用访问钉钉开放平台
目录
1.如何访问开放平台
2.如何调用服务端 API
一. 如何访问开放平台
首先创建钉钉会议室预定。
强调组织必须选为演示团队。
点击会议室预定
然后进行配置
进入应用开发:
一个云应用,部署在云端
钉钉开放平台处于钉钉开放主页状态。在自己的应用访问钉钉的开发平台。
这样网络应该相通。则部署在阿里云上的云应用。网络环境需要有出口网关。
钉钉开放平台本不属于公网状态。则需要有一个先前的条件。部署此应用需要访问公网的能力。访问公网的能力,目前的函数计算。会有一个孤网状态。去访问公网的能力。
例如服务型的应用。
通过 SAE 部署:
运输于用户专属网内部。专有网络,没有访问公网的能力。
如果访问自己的数据库,在 vpc 内部买的 RPS ,访问自己公网上的数据库。
Java 代码介绍
包括服务层,控制层等,
前端代码处。
这是一个编译出来的。它的原代码为 project
下载出来,修订前端代码
编译出来的代码
现在进行部署
操作进议:A 网关分组超过限额。
需安释故 api 分组出来。有3种解
方案:
1、您可以停止未使用的应用;
2、您可以移步
https: //rosnext.console.aliyun.com/cn-shanghai/stacks 把废弃的名称删除。
3、或者移步到
https://apigateway.consolewaliyun.com/#/ cn-shanghai/groups/listH除过期的 api 分组;
4、请确保平台吊顶选择了正确的组织!
切换团队进行:再次部署操作!
[2021-04-2819:54:28]应用:会议宝预定
TEST环境「基础服务准备任务]资源栈没有变化,无需重新部署
[2021-34-28 19:54:19]应用:会议室预定
[基础服务沮备任务] ROS 偏差检测完或!
[2821-84-2819:54:23]应用:会谈室预定
[基础服务准备任务]执行成功!
[2021-84-28 19:54:24]应用:会议室预定
开始执行[ API 网关编排任务]
[2221-04-28 19:54;24]应用:会议空预定
[ API 网关编排任务]开始 ROS 梓差检测..-
[2021-04-28 19:54;24]应用:会议室预定
[ API 网关编排任务】 Detect stack drift when it is in (CREATE。FATLED) is not supported .外部系统错误玛
:NotSupported 外部系统错误消息:Detect stack drift when it is in (CREATE,FAILED) is not supported.,将忽略该错误!
[2021-04-28 19:54:25]应用:会议室预定
将删除资源栈: wbgw_2021042800885218 ..-
[2821-54-2819:54:29]应用:会议室预定
资源楼: wbgw_2心2164288680521E 剧除成功!
[2021-04-2819:54:33]应用:会议室预定旳开始执行[ VPC 网络煌排任务]
[2021-84-26 19:54:33]应用:会议室预定
[ API 网关编排任务1执行配功!
[2021-34-2日19:54:33]应用:会议室预定
初始化 APIGateway 或功。
二级域名为 http://843459c1e1d04c9785a5e239880a88ec-
cn-shanghai.alicloudapi.co
[2021-04-28 19:54:33]应用:会议室预定
开始执行[ VPC 网络编排任务]
再次进行覆盖!
[2021- 04-28 19:55:421 应用:会议室预定
城名:
https ://test1yj fbm809 17syo0o03h. workbenchapi.com绑定到 API 网关 =级域名
http://843459c1e1d04c9785a5e239880a88ec-cn-shanghai.alicloudapi.com 成功!
请使用
https://test 1yj fbm80917syqoo83h.workbenchapi.com 进行测试验证(还需要
进行 QNAME 解析, 且域名生效有延迟,如果无法访问请耐心等待)
[2021-04- -2日19:55:42] 应用:会议室预定
TEST 环境的域名 test1yj fbm8B0917syqo o03h . workbenchapl.com CNAME 到 API 网关的二级域名
843459c1e1d04c9785a 5e239880a8ec-cn-shanghai. alicloudapi.com 尚未生效, 请稍等片刻!当命令行工具 dig/ns lookup/ping 等指令发现正确的解析记录后, 即可直接通过
城名正常访问该应用了。
[2021-84-28 19:55:42] 应用: 会议室预定云开发应用[ TEST ]环境部属成功!
继续观看页面:进行访问。
Api 需要加白名单,服务端公网在此配置。
函数计算没有固定 IP 地址,拥有访问公网能力。
进入超级管理员:
进入——跳转页面——读取参数——授权——启动应用信息
response = client. execute( request, accesstoken)
accesstoken :具有时效性,防止他人任意窃取。通过调用钉钉公共 api 获取。
//从持久化存储中读取
string accessToken = getF romCache ( admin ? "adminToken" :” access Token", "access_ token"):
if (accessToken != null) {
return ServiceResult ,
success( accessToken);
DefaultDingTalkClient cllent = new Def aultDingTalkClient (admin ? UrlConstant.URl ADMIN GET TOKEN : URL GET TOKEN):
if (adnin) (
apissoGettokenRequest request = new 0apiSsoGet tokenRequest();
//企业Id
request . setCorpid(appConfig. getCorpId());
//秘钢ssosecret
//这里必须填写专属的SS0sec ret.
request. setCorpsecret (appConfig. getSsoSeret());
request. sethttpMethod("GET");
0apiSsoGettokenResponse response = null:
try {
response = client . execute( request);
} catch (AplException e) {
Log . error("getAccessToken failed", e);
return ServiceResult. failure(e . getErrCode(), e. getErrMsg()
每种方法请求参数是不一样的。
通过授权码换取用户基本信息。可以知道用户身份。应用随而建立登陆台。根据用户操作进行保存。
二.如何调用服务端 API
首先开发部署,新建应用配置。如下图:
开始部署..-
发送部吾任务完成...
[2021-04-28 19:48:;23]应用:会议室预定―云应用[ TEST ]环境开始部署
[2021-04-28 19:48:30]应用:会议预室定您可以在 Flow 查看详细日志
https://flow.aliyun . com/pipelines/1312632/current?channel=wo rkbench
[2021-34-2B 19:48:23]应用:会议室预定 开始执行[项目构建任务]
[2021-04-2B 19:48:34]应用:会议室预定 java镜像构建-申请运行环境(日5}执行成功
[2021-04-2B 19:48:38]应用:会议室预定 java镜像构建-克隆代码(2s)执行成功
[2021-04-2B 19:48:38]应用:会议室预定 java镜像构建-清理工作区[2s)执行成功
………
可能出现以下问题:
操作运议: API 网关分组超过限额,需宝释故 api 分组出来。有3种解决方案:
1、您可以停止未选用的应用;
2.您可以移步
https: / /rosnext.console. aliyun.com/cn-shanghai/stacks 把废弃的名称形如 wbd *******************的资源线删除;
3. 或者移步到
https://apigateway.con5ole,aliyun.com/#/ cn-shanghai/groups/list删除过期的 api 分组;
4、请确保平台吊顶选择了正确的组织!
三.如何调用服务端 API
请求方式:接口使用的 HTTP 方法和请求协议。所有接口都使用HTTPS协议。
请求地址∶接口的请求地址。钉钉服务端接口的访问域名为―https: /oapi.dingtalk.com。请求参数使用"&"分隔。请求地址中的大写单词是需要替换的变量值。
请求包体/参数说明︰提供请求参数示例及说明,参数说明包括字段含义、取值范围,开发者在设计数据结构时,应参考该定义范围。返回结果/参数说明:提供返回参数示例及说明。
注意:
所有接口在调用失败时都会返回 errcode 和 errmsg 。开发奢可根据 errcode 和 errmsg 排查问题。
请不要仅根据 errmsg 判断调用是否成功。当请求返回结果中返回了 errcode 且不为0时可判断为请求失败。errmsg 是对 errcode 的说明,供开发者参考排查问题。
我们对接口的返回字段做了简化处理,如果字段的值为空或者 null,将不返回该字段。
接口调用流程
如下图所示,在调用钉钉服务媚接口前,您需要完成以下准备工作:
1.添加接口调用权限。应用创建后默认只开放登录和消息通知接口的调用权限,您需要根据开发需要,添加对应的接口使用权限。详细
信息请参考添加接口调用权限。
2.获取应用的 access_foken 。access_token 相当于是身份凭证。调用接口时,通过 access_token 来鉴权调用者身份。
企业内部应用请参考获取 access_token
第三方企业应用请参考获取第三方应用凭证
调用方式
钉钉开放平台提供了 API Explorer 和 SDK 方便开发者调用服务端APl。
●API Explorer: .
API Explorer是可视化在线 API 调用工具,可实时查看 API 请求和返回结果
访问地址: https://open-dev.dingtalk .com/apiExploer#/?
devType=org&a pi= dingtalkoapigettoken.
●SDK:
钉钉开放平台提供了 Java. PHP. Python、 .NET SDK 供开发者使用。单击服务端SDK下载。
四.服务端 SDK 下载
SDK 请求示例
”下面是使用 SDK 调用 API 的请求示例:
●Java
DingTalkClient client = new DefaultDingTalkclient( "https://oapi. dingtalk. com/usex/get");
oapiUserGetRequegt req = new oaplUserGetRequest( ) ;
req. setUserid("userid1");
点击纠错
req. setHttpMethod( "GET");
oapluserGetResponse rsp = client .execute (reg,accessToken) ;
●PHP
include "TopSdk . php" ;
// DingTalkConstant: :$METHOD_ GET 要与下面调用接口ur1要求的保持一致
$c - new DingTalkClient (DingTa lkConstant : :$CALL_ TYPE_ OAPI, DingTalkConstant : : SMETHOD_ GET.
DingTalkConstant : :$F0RMAT_ JSON);
$req = new oapiUserGetRequest( );
$req- >setUserid ("userid1" );
$resp=$c->execute($req,$accesToken, " https:/ /oapi .dingtalk . com/user/get" );
var_ _dump (Sresp)
●Python .
import dingtalk .api
request = dingtalk. api. OapiGettokenRequest( "https://oapi.dingtalk .com/user/get")
request. userid- "userid1"
sresp- se->exeeute($req, saeeessToken, https:/ /oapi .dingtalk. con/user/get" );
var_ dimp($resp)
”Fythgr!
import dingtalk .api
点击纠错
request = dingtalk. api .
oapiGettokenRequest[ "httpst//oapi.dingtalk。com/umer/geL"I
request. userid= "user⊥d1,
response = requeat.getkesponse()
irint (respons6)
●.NET
IDingTalkclient client = new Defaul tDingTalkc1 ient ( "https; //oapi .cdingtalk . com/user/get");
oapiuserGetRequeat req = nev oapiUaerGetRequest( );
reg.userid - "ueeridI";
Teq. SetattpMethod("GET");
oapiUaerGetReaponse rsp = client. Execute(reqr acceseToken)
请求示例说明:
1.定义 Client 对象,设置接口地址 UR 。一般情况, 无需拼接 URL 后面的参数,比如 access token ; 需要注意部分Post 接口,需要在 URi 后拼接除 acce5s_ 51oken 外的个别参数。
2:构造 Request 对象,接口对应的 requestx 对象,一般 规则是 Oapi+接口 Path 驼峰形式+Request ,如/user/get接口,请求对象是 QanillcorGerPecuact 。
3、调用 Request 的方法设置参数,注意参数 HttpMethod ,默认是 POST . 如果是 GET 类型接口,需要这样设置requests etHttpMethod!"GET").
4.调用 clienL.execute 执行,其中 asess stoken 同样可以使用 SOK 获取到。同时,/gettoken, /sns/gettoken, iservice/get suite. token 筹狱取 token 的接口在调用execute时。元需再传 token 参数。
5.执行后得到 Response 对象,是与 Request 对应的,然后可获取执行结果。
SDK 下载
环境依赖
●Java SDK 需要依赖 Java SE/EE 1.5及以上
●.NET SDK 需要依赖. NET Framework 2.0及以上(不支持 Windows Phone 平台)
下载地址:
●Java 版本:点击下载
●PHP 版本:点击下载
●Python 版本:点击下载
●Python3 版本: 点击下载
●.NET 版本:点击下载
●.NETCore版本: 点击下载
文档格式约定
每个接口文档会按照如下格式提供信息: .
请求方式: GET/POST (HTTPS}
口
请求地址:
https t//oapi . dingtalk . com/ gettoken?appkey-APP KEY6appsecret-APP SECRET
请求包体:
参数说明:
返回结果:
示例
●请求方式:接口使用的 HTTP 方法和请求协议。所有接口都使用 HTTPS 协议。
●请求地址:接口的请求地址。钉钉服务端接口的访问域名为 https ://0api . dingtalk.com 。请求参数使用“&”分隔。请求地址中的大写单词是需要替换的变量值。
●请求包体/参数说明:提供请求参数示例及说明,参数说明包括字段含义、取值范围,开发者在设计数据结构时,应参考该定义范围。
●返回结果/参数说明:提供返回参数示例及说明。