Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

27 Commits

Repository files navigation

滴滴企业级开放接口SDK[Java版本]

概述


  • 滴滴企业级开发接口SDK,便捷调用开放平台API,目前包括以下服务:
    • 接口认证[auth]
    • 审批 [行前(approval)、行后(afterapproval)、外部(outapproval)]
    • 账单 [bill]
    • 成本中心 [budgetcenter]
    • 城市信息 [city]
    • 扩展信息 [extend]
    • 公司主体 [legalentity]
    • 单点登录 [login]
    • 用户信息 [member]
    • 订单 [order]
    • 职级 [rank]
    • 制度 [regulation]
    • 角色 [role]
    • 外部人员 [traveler]
    • 工作地点 [workplace] 具体可以访问 管理API对接文档(2024版) 查看。

运行环境


  • JDK 1.8

安装方法


1、Maven 仓库

<dependency>
<groupId>com.xiaoju.sdk</groupId>
<artifactId>ddes-open-sdk</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>

2、手动下载

  • 1、下载最新的源码
  • 2、使用Maven命令打包:mvn clean install
  • 3、将生成的jar包引入到项目中

快速使用

流程概述

调用API的流程如下:

  1. 创建应用
  2. 获取访问凭证
  3. 设置IP白名单 [前3步参考:接入前必读]
  4. 调用API

SDK配置参数说明(com.xiaoju.open.sdk.didies.core.Config)

配置项配置方式描述
clientId必填客户端 ID,用于身份认证。
clientSecret必填客户端密钥,用于身份认证。
signKey必填签名密钥,用于请求签名。
baseUrl可选,默认值:https://api.es.xiaojukeji.com接口请求的基础 URL。
grantType可选,默认值:client_credentialsOAuth 认证的授权类型,默认使用客户端凭证模式。
unauthorizedRetryTimes可选,默认值:2因 Token 失效导致接口请求失败时的重试次数。
unauthorizedRetryInterval可选,默认值:1000(毫秒)Token 失效重试的时间间隔,默认1秒。
httpTransport可选,默认自动创建 RestHttpTransport 实例自定义 HTTP 请求实现类,需实现 IHttpTransport 接口。未设置时使用默认实现。
signMethod可选,默认值:MD5签名方法,可选枚举值(如 MD5SHA256,默认MD5)。
enableHoldToken可选,默认值:true是否开启自动获取并持有 Token(如未开启,需用自己管理token在每个接口中设置,推荐开启)。
enableRequestLog可选是否开启请求日志打印。需配合 logLevel 使用。
logLevel可选请求日志的打印级别(需开启 enableRequestLog),可选枚举如 DEBUGINFO
enableAES可选,默认值:false是否启用 AES 加密(此加密为整体加密,开启整体加密时人员信息不需要额外加密)。
aesKey条件必填(当 enableAEStrue 时需设置)AES 加密使用的密钥。
encryptType可选,默认值:NORMAL加密类型。默认不加密(NORMAL),启用 AES 时可选择 AES128AES256
connectTimeout可选,默认值:3000(毫秒)网络连接超时时间(单位由 timeoutUnit 决定)。
callTimeOut可选,默认值:3000(毫秒)接口调用超时时间(单位由 timeoutUnit 决定)。
timeoutUnit可选,默认值:MILLISECONDS超时时间单位(如 MILLISECONDSSECONDS 等)。

说明:

  1. 必填项:clientIdclientSecretsignKey 必须通过代码手动设置(如 setClientId("your-id"))。

  2. 条件必填:aesKey 仅在启用 AES 加密(enableAES=true)时需设置。

  3. 默认行为:
    httpTransport 未设置时,自动使用 RestHttpTransport 实现类。

    • 接口整体加密默认关闭(enableAES=false),签名方法默认使用 MD5

  4. 超时配置:connectTimeoutcallTimeOut 的单位由 timeoutUnit 统一控制,默认毫秒。

  5. 依赖关系:
    logLevel 仅在 enableRequestLog=true 时生效。

    encryptType 的具体值需根据 EncryptTypeEnum 枚举定义选择(如 NORMAL 表示不加密)。


使用示例

1、以查询公司主体为例,更多示例请参考:samplemodule

publicclassTest {
publicstaticvoidmain(String[] args) {
Configconfig = Config.builder()
.clientId("your_client_id")
.clientSecret("your_client_secret")
.signKey("your_sign_key")
.signMethod(SignMethodEnum.MD5) // 默认使用MD5签名,可选SHA256签名,具体和对接人确认
.build();
ApiClientclient = newApiClient(config);
getLegalEntityTest(client);
}
/** * 公司主体查询 * <p> * 说明: * 查询公司在滴滴侧的具体信息; * 通过获取的信息用于确认相关的配置信息,可以用于同步滴滴ES后台的信息; * 只返回有效的公司信息。不包含禁用和过期的公司主体信息。需要返回全部的,是不是需要重新封接口。 */publicstaticvoidgetLegalEntityTest(ApiClientclient) throwsException {
GetLegalEntityRequestrequest = GetLegalEntityRequest.builder()
.companyId("替换成自己的companyId")
.legalEntityId("xxx")
.build();
GetLegalEntityApiReplyresponse = client.legalentity().v1().getLegalEntity(request);
if (response != null) {
System.out.println(JacksonUtils.toJson(response));
}
System.out.println("getAdjustBillDataResultTest end");
}
}

2、使用整体加密

publicclassEncryptTest {
publicstaticvoidmain(String[] args) {
Configconfig = Config.builder()
.clientId("your_client_id")
.clientSecret("your_client_secret")
.signKey("your_sign_key")
.enableAES(true) // 启用整体加密[默认为false]
.aesKey("your_aes_key") // 设置AES密钥[enableAES为false的时候,该值无效]
.encryptType(EncryptTypeEnum.AES128) // 设置加密方式[enableAES为false的时候,该值无效]
.build();
ApiClientclient = newApiClient(config);
// 接口的调用不需要任何额外的操作,SDK会自动处理加密和解密getLegalEntityTest(client);
}
/** * 公司主体查询 * <p> * 说明: * 查询公司在滴滴侧的具体信息; * 通过获取的信息用于确认相关的配置信息,可以用于同步滴滴ES后台的信息; * 只返回有效的公司信息。不包含禁用和过期的公司主体信息。需要返回全部的,是不是需要重新封接口。 */publicstaticvoidgetLegalEntityTest(ApiClientclient) throwsException {
GetLegalEntityRequestrequest = GetLegalEntityRequest.builder()
.companyId("替换成自己的companyId")
.legalEntityId("xxx")
.build();
GetLegalEntityApiReplyresponse = client.legalentity().v1().getLegalEntity(request);
if (response != null) {
System.out.println(JacksonUtils.toJson(response));
}
System.out.println("getAdjustBillDataResultTest end");
}
}

3、更多示例

示例模块示例代码路径包含接口接口地址
接口认证sample/AuthSample.java接口认证(获取access_token)/river/Auth/authorize
行后授权sample/AfterapprovalSample.java行后审批结果同步/river/AfterApproval/createPersonalReceipt
行后审批完订单查询个人付款单/river/AfterApproval/getPersonalReceiptOrder
审批对接sample/ApprovalSample.java创建申请单(已按业务拆分)/river/Approval/create
修改申请单(已按业务拆分)/river/Approval/update
取消申请单/river/Approval/cancel
查询审批单列表/river/Approval/getOrder
查询申请单详情/open-apis/v1/approval/detail
外部审批处理/river/Approval/pass
外部审批处理sample/OutapprovalSample.java外部通知审批单状态变更/river/OutApproval/Status
财税信息sample/BillSample.java账单列表/river/Bill/get
已出账单(已按业务类型拆分)/river/Bill/detail
未出账单(已按业务类型拆分)/river/Bill/getNotGeneratedBillDetail
网约车,出租车交易明细/river/Bill/transactionDetail
账单汇总查询-商旅、网约车、出租车/river/Bill/summary
网约车、商旅账单树查询/river/Bill/getBillStructure
商旅、网约车账单确认/river/Bill/confirm
调账提交/river/Bill/adjustBillData
调账结果查询/river/Bill/queryAdjustBillDataResult
部门或项目sample/BudgetcenterSample.java部门或项目查询/river/BudgetCenter/get
部门或项目新增/river/BudgetCenter/add
部门或项目修改/river/BudgetCenter/edit
部门或项目停用/river/BudgetCenter/del
城市sample/CitySample.java国家查询(全量获取国际ID)/river/DemeterAres/Country/index
全量开城城市列表查询/open-apis/v1/city/list
地点sample/WorkspaceSample.java地点新增/open-apis/v1/workplace/create
地点删除/open-apis/v1/workplace/del
地点修改/open-apis/v1/workplace/update
外部出行人sample/TravelerSample.java外部出行人新增/open-apis/v1/traveler/create
外部出行人修改/open-apis/v1/traveler/update
外部出行人删除/open-apis/v1/traveler/del
角色sample/RoleSample.java角色查询/river/Role/get
制度sample/RegulationSample.java制度列表/river/Regulation/get
制度详情/river/Regulation/detail
职级sample/RankSample.java职级新增/open-apis/v1/rank/create
职级更新/open-apis/v1/rank/update
职级删除/open-apis/v1/rank/del
职级查询/river/Rank/getRanks
订单sample/OrderSample.java订单号列表查询/open-apis/v1/order/list
机票订单详情查询/api-gateway/g/flight/orderDetail
酒店订单详情查询/api-gateway/g/hotel/orderDetail
火车票订单详情查询/api-gateway/g/train/orderDetail
用车订单详情查询/river/Order/detail
用车列表/river/Order/get
机票预估价获取/api-gateway/g/flight/info/estimatePrice
火车票直达列表/api-gateway/train/queryLeftTicket
火车票中转车次列表/api-gateway/g/train/transfer/queryLeftTicket
用户sample/MemberSample.java用户查询~员工列表(批量查询)/river/Member/get
用户查询~员工明细/river/Member/detail
员工限额查询/river/Member/getQuota
用户新增/river/Member/single
用户修改/river/Member/edit
用户删除/river/Member/del
单点页面sample/LoginSample.java单点请求/river/Login/getLoginEncryptStr
公司主体sample/LegalentitySample.java公司主体查询/river/LegalEntity/get
公司主体新增/river/LegalEntity/add
公司主体修改/river/LegalEntity/edit
公司主体停用/river/LegalEntity/del
拓展sample/ExtendSample.java拓展信息批量创建/river/ExtendInfo/BatchSync
档案状态处理/river/ExtendInfo/Status
拓展信息查询/river/ExtendInfo/Get

📢注意: 请替换代码中的clientIdclientSecretsignKey为实际的值,以及替换实际入参中的companyId


特殊说明

1、接口中以obj结尾的字段均为SDK特有字段,在文档中无Obj结尾,文档中为字段类型为json-string,SDK中可直接使用对象,SDK自动完成对象转为json-string的过程。

如(仅保留了特殊处理的Obj字段及源字段信息):

publicclassCreateApprovalRequestextendsBaseReq {
/** * 扩展信息,扩展信息,自定义字段;最长不大于 500 字符;(必须为json字符串);默认为空字符 */@JsonProperty("extra_info")
privateStringextraInfo;
/** * 扩展信息。转成json赋值给extra_info字段 */@JsonProperty("extra_info__obj__")
privateMap<String, String> extraInfoObj;
/** * 扩展信息list,自定义字段,最长不大于 500 字符,将extend_field_list转为 json 字符串,三个字段仅作为备注性字段。详见extend_field_list */@JsonProperty("extend_field_list")
privateStringextendFieldList;
/** * extendFieldListObj */@JsonProperty("extend_field_list__obj__")
privateExtendFieldListextendFieldListObj;
/** * 差旅单行程信息,差旅单行程信息,将travel_detail的值转为 json 字符串,approval_type &#x3D; 1 时必传。 */@JsonProperty("travel_detail")
privateStringtravelDetail;
/** * travelDetailObj */@JsonProperty("travel_detail__obj__")
privateTravelDetailtravelDetailObj;
/** * 差旅预算总额,差旅预算控制,一个申请单对应一个总预算纬度,一次只能全部或者选择部分品类。 */@JsonProperty("travel_budget")
privateStringtravelBudget;
/** * travelBudgetObj */@JsonProperty("travel_budget__obj__")
privateTravelBudgettravelBudgetObj;
/** * 差旅管控,差旅管控,目前仅支持市内用车每日限额设置(为json字符串类型,具体看请求示例) */@JsonProperty("travel_management")
privateStringtravelManagement;
/** * travelManagementObj */@JsonProperty("travel_management__obj__")
privateTravelManagementtravelManagementObj;
/** * 出行人信息,出行人信息,不传时默认出行人为申请人,将passenger_list 转为 json 数组字符串。详见passenger_list */@JsonProperty("passenger_list")
privateStringpassengerList;
/** * 出行人信息,可使用脚本将其转换为json后赋值给 passenger_list 字段 */@JsonProperty("passenger_list__obj__")
privateList<TripPassenger> passengerListObj;
/** * 多成本中心(array),序号1对应远成本中心字段,依然支持滴滴内部主键ID。使用部门CODE主键,和项目时名称和code作为主键。 */@JsonProperty("budget_center_list")
privateStringbudgetCenterList;
/** * 差旅预算总额,可使用脚本将其转换为json后赋值给 budget_center_list 字段 */@JsonProperty("budget_center_list__obj__")
privateList<BudgetCenterListItem> budgetCenterListObj;
}

上述实体在使用时,可直接通过已Obj结尾的属性赋值,实际传调用接口时,SDK会自动将Obj结尾的属性转为json字符串,赋值给原属性传递给滴滴企业级。

About

No description, website, or topics provided.

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages