# ddes-openapi-sdk-go
**Repository Path**: didiopensource/ddes-openapi-sdk-go
## Basic Information
- **Project Name**: ddes-openapi-sdk-go
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-17
- **Last Updated**: 2025-09-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
DiDi OpenApi SDK for Go
## 开发前准备
使用GO-SDK接入服务前,请确保你已在[滴滴企业开放平台](https://open.es.xiaojukeji.com/)创建了应用并安装了Go环境。
## 安装
使用 `go get` 下载安装 SDK
```sh
go get -u github.com/didi/ddes-openapi-sdk-go@latest
```
## 快速使用
开始使用前请确保已注册账号并获取到client_id、client_secret、sign_key、company_id、接口加密传输的Key等基础信息;
### 创建客户端
```go
package main
import (
"github.com/didi/ddes-openapi-sdk-go"
"github.com/didi/ddes-openapi-sdk-go/core"
)
func main() {
clientId, clientSecret, signKey := "your client_id", "your client_secret", "your sign_key"
client, err := didi.NewClientWithOption(clientId, clientSecret, signKey, &core.Option{
EnableTokenCache: true, // 启用token缓存后将由SDK进行access token的获取、缓存和更新;
LogLevel: core.LogLevelDebug, // 查看调试信息
})
if err != nil {
// handle error
panic(err)
}
// TODO handle business
}
```
**core.Option参数说明**
```go
option := core.Option{
BaseUrl: "", // 请求地址,不设置则访问生产环境,需访问测试环境时可传入测试环境地址;
RequestTimeOut: 0, // 超时设置
EnableTokenCache: false, // 是否启用token缓存
TokenCache: nil, // 自定义缓存实现,不传则使用默认实现
EnableEncryption: false, // 是否启用接口传输加密
SignMethod: 1, // 签名方式(1:MD5 2:SHA256)
EncryptionOption: &core.EncryptionOption{
Ent: 1, // 0 普通传输,1 AES128位加密传输, 2 AES256位加密传输
Key: "your key(AES128Key/AES256Key)",
}, // 加密传输配置参数
LogLevel: core.LogLevelDebug, // 日志级别
Logger: nil, // 自定义日志实现,不传则使用默认实现
}
```
### 启用加密传输
```go
package main
import (
"github.com/didi/ddes-openapi-sdk-go"
"github.com/didi/ddes-openapi-sdk-go/core"
"os"
)
func main() {
clientId, clientSecret, signKey := "your client_id", "your client_secret", "your sign_key"
client, err := didi.NewClientWithOption(clientId, clientSecret, signKey, &core.Option{
EnableTokenCache: true,
EnableEncryption: true, // 是否启用加密传输
// 加密传输配置参数
EncryptionOption: &core.EncryptionOption{
Ent: 1, // 1: Md5 2: sha256
Key: "your key(md5Key/sha256Key)",
},
LogLevel: core.LogLevelDebug,
})
if err != nil {
// handle error
panic(err)
}
// TODO handle business
}
```
### 自定义序列化
参考示例代码路径:sample/serializer_sample.go
**1、实现Serializer序列化接口**
```go
// 待实现的序列化接口
type Serializer interface {
Serialize(interface{}) ([]byte, error)
Deserialize([]byte, interface{}) error
}
// 自定义实现
type MySerializer struct{}
func (serializer *MySerializer) Serialize(v interface{}) ([]byte, error) {
// TODO 自定义实现
// 示例:
jsonData, err := json.Marshal(v)
return jsonData, err
}
func (serializer *MySerializer) Deserialize(bytes []byte, v interface{}) error {
// TODO 自定义实现
// 示例:
return json.Unmarshal(bytes, v)
}
```
**2、全局自定义序列化**
```go
// 替换全局序列化实现
func globalSerializer() {
clientId, clientSecret, signKey := os.Getenv("CLIENT_ID"), os.Getenv("CLIENT_SECRET"), os.Getenv("SIGN_KEY")
client, err := didi.NewClientWithOption(clientId, clientSecret, signKey, &core.Option{
EnableTokenCache: true,
LogLevel: core.LogLevelDebug,
Serializer: &MySerializer{}, // 全局使用自定义序列化
})
if err != nil {
// handle error
panic(err)
}
// TODO handle business
}
```
**3、只针对单个请求的自定义序列化**
```go
// 替换单个请求的序列化
func singleSerializer() {
clientId, clientSecret, signKey := os.Getenv("CLIENT_ID"), os.Getenv("CLIENT_SECRET"), os.Getenv("SIGN_KEY")
client, err := didi.NewClientWithOption(clientId, clientSecret, signKey, &core.Option{
EnableTokenCache: true,
LogLevel: core.LogLevelDebug,
})
if err != nil {
// handle error
panic(err)
}
authorizeApiResp, err := client.AuthService.V1.Auth.Authorize(context.Background(), nil, &core.ReqOption{
Serializer: &MySerializer{}, // 仅针对本次请求的自定义序列化
})
if err != nil {
return
}
// TODO handle business
}
```
## 示例
### 接口认证(获取access_token)
```go
package main
import (
"context"
"github.com/didi/ddes-openapi-sdk-go"
"github.com/didi/ddes-openapi-sdk-go/core"
v1 "github.com/didi/ddes-openapi-sdk-go/service/auth/v1"
"log"
)
func main() {
clientId, clientSecret, signKey := "your client_id", "your client_secret", "your sign_key"
client, err := didi.NewClientWithOption(clientId, clientSecret, signKey, &core.Option{
LogLevel: core.LogLevelDebug, // 查看调试信息
})
if err != nil {
// handle errors
panic(err)
}
apiReq := v1.NewAuthorizeApiReqBuilder().
AuthorizeRequest(
v1.NewAuthorizeRequestBuilder().
GrantType("client_credentials").
Build()).
Build()
authorizeApiResp, err := client.AuthService.V1.Auth.Authorize(context.Background(), apiReq, nil)
if err != nil {
log.Fatal(err)
return
}
// TODO handle business
}
```
### 更多示例
| 示例模块 | 示例代码路径 | 包含接口 | 接口地址 |
| ------------ | ------------------------------ | --------------------------------- | --------------------------------------------- |
| 接口认证 | sample/auth_sample.go | 接口认证(获取access_token) | /river/Auth/authorize |
| 行后授权 | sample/afterapproval_sample.go | 行后审批结果同步 | /river/AfterApproval/createPersonalReceipt |
| | | 行后审批完订单查询个人付款单 | /river/AfterApproval/getPersonalReceiptOrder |
| 审批对接 | sample/approval_sample.go | 创建申请单(已按业务拆分) | /river/Approval/create |
| | | 修改申请单(已按业务拆分) | /river/Approval/update |
| | | 取消申请单 | /river/Approval/cancel |
| | | 查询审批单列表 | /river/Approval/getOrder |
| | | 查询申请单详情 | /open-apis/v1/approval/detail |
| | | 外部审批处理 | /river/Approval/pass |
| 外部审批处理 | sample/outapproval_sample.go | 外部通知审批单状态变更 | /river/OutApproval/Status |
| 财税信息 | sample/bill_sample.go | 账单列表 | /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/budgetcenter_sample.go | 部门或项目查询 | /river/BudgetCenter/get |
| | | 部门或项目新增 | /river/BudgetCenter/add |
| | | 部门或项目修改 | /river/BudgetCenter/edit |
| | | 部门或项目停用 | /river/BudgetCenter/del |
| 城市 | sample/city_sample.go | 国家查询(全量获取国际ID) | /river/DemeterAres/Country/index |
| | | 全量开城城市列表查询 | /open-apis/v1/city/list |
| 地点 | sample/workspace_sample.go | 地点新增 | /open-apis/v1/workplace/create |
| | | 地点删除 | /open-apis/v1/workplace/del |
| | | 地点修改 | /open-apis/v1/workplace/update |
| 外部出行人 | sample/traveler_sample.go | 外部出行人新增 | /open-apis/v1/traveler/create |
| | | 外部出行人修改 | /open-apis/v1/traveler/update |
| | | 外部出行人删除 | /open-apis/v1/traveler/del |
| 角色 | sample/role_sample.go | 角色查询 | /river/Role/get |
| 制度 | sample/regulation_sample.go | 制度列表 | /river/Regulation/get |
| | | 制度详情 | /river/Regulation/detail |
| 职级 | sample/rank_sample.go | 职级新增 | /open-apis/v1/rank/create |
| | | 职级更新 | /open-apis/v1/rank/update |
| | | 职级删除 | /open-apis/v1/rank/del |
| | | 职级查询 | /river/Rank/getRanks |
| 订单 | sample/order_sample.go | 订单号列表查询 | /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/member_sample.go | 用户查询~员工列表(批量查询) | /river/Member/get |
| | | 用户查询~员工明细 | /river/Member/detail |
| | | 员工限额查询 | /river/Member/getQuota |
| | | 用户新增 | /river/Member/single |
| | | 用户修改 | /river/Member/edit |
| | | 用户删除 | /river/Member/del |
| 单点页面 | sample/login_sample.go | 单点请求 | /river/Login/getLoginEncryptStr |
| 公司主体 | sample/legalentity_sample.go | 公司主体查询 | /river/LegalEntity/get |
| | | 公司主体新增 | /river/LegalEntity/add |
| | | 公司主体修改 | /river/LegalEntity/edit |
| | | 公司主体停用 | /river/LegalEntity/del |
| 拓展 | sample/extend_sample.go | 拓展信息批量创建 | /river/ExtendInfo/BatchSync |
| | | 档案状态处理 | /river/ExtendInfo/Status |
| | | 拓展信息查询 | /river/ExtendInfo/Get |