### After-Sales Management - Get After-Sales List Source: https://context7.com/zsmhub/xhs-sdk/llms.txt Retrieves a list of after-sales service requests for a store. Supports filtering by order ID, after-sales status, after-sales type, and time range. Useful for after-sales ticket processing and data statistics. ```APIDOC ## POST /api/aftersales/list ### Description Queries the list of after-sales applications for a store, supporting filtering by order ID, after-sales status, after-sales type, and time range. Used for after-sales ticket processing and data statistics. ### Method POST ### Endpoint /api/aftersales/list ### Parameters #### Query Parameters - **PageNo** (integer) - Required - The page number. - **PageSize** (integer) - Required - The number of items per page. - **OrderId** (string) - Optional - The order ID to filter by. - **Statuses** (array[integer]) - Optional - A list of after-sales status codes to filter by (e.g., `xhs_sdk.AfsStatusWaitAudit`, `xhs_sdk.AfsStatusWaitBack`). - **ReturnTypes** (array[integer]) - Optional - A list of after-sales type codes to filter by (e.g., `xhs_sdk.AfsReturnTypeReturn`, `xhs_sdk.AfsReturnTypeExchange`). - **StartTime** (integer) - Optional - The start timestamp for filtering by time. - **EndTime** (integer) - Optional - The end timestamp for filtering by time. - **TimeType** (integer) - Required - The type of time to filter by: 1 for application time, 2 for update time. ### Request Example ```json { "PageNo": 1, "PageSize": 20, "Statuses": [ 1, // `xhs_sdk.AfsStatusWaitAudit` (Pending Audit) 3 // `xhs_sdk.AfsStatusWaitBack` (Pending Return) ], "ReturnTypes": [ 1, // `xhs_sdk.AfsReturnTypeReturn` (Return/Refund) 2 // `xhs_sdk.AfsReturnTypeExchange` (Exchange) ], "StartTime": 1678886400, // Example timestamp "EndTime": 1710422400, // Example timestamp "TimeType": 1 } ``` ### Response #### Success Response (200) - **TotalCount** (integer) - Total number of after-sales orders. - **MaxPageNo** (integer) - The maximum page number. - **AfterSaleBasicInfos** (array[object]) - List of after-sales basic information. - **ReturnsId** (string) - After-sales ID. - **OrderId** (string) - Order ID. - **ReturnType** (integer) - After-sales type. - **Status** (integer) - After-sales status. - **ApplyTime** (integer) - Application timestamp. - **ExpectedRefundAmountYuan** (float) - Expected refund amount in Yuan. #### Response Example ```json { "code": 0, "message": "success", "data": { "TotalCount": 50, "MaxPageNo": 3, "AfterSaleBasicInfos": [ { "ReturnsId": "afs_987654321", "OrderId": "order_12345678", "ReturnType": 1, "Status": 1, "ApplyTime": 1700000000, "ExpectedRefundAmountYuan": 99.99 } // ... more after-sales info ] } } ``` ``` -------------------------------- ### 初始化小红书 SDK 客户端 (Go) Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 初始化 API 调用客户端和 OAuth 认证客户端是使用 SDK 的第一步。API 客户端用于调用业务接口,OAuth 客户端用于处理授权流程。需要提供应用的 appKey 和 appSecret。 ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func main() { // 应用凭证 appKey := "your_app_key" appSecret := "your_app_secret" // 创建业务接口调用客户端 apiClient := xhs_sdk.NewXhsClient(appKey, appSecret) // 创建 OAuth 授权客户端 oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) fmt.Printf("API客户端创建成功: %+v\n", apiClient) fmt.Printf("OAuth客户端创建成功: %+v\n", oauthClient) } ``` -------------------------------- ### 使用授权码获取小红书访问令牌 (Go) Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 使用授权码 (code) 换取访问令牌 (AccessToken) 和刷新令牌 (RefreshToken)。AccessToken 用于调用业务接口,RefreshToken 用于刷新 AccessToken。需要传入从回调中获取的 code。 ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func GetAccessToken() { appKey := "your_app_key" appSecret := "your_app_secret" // 从回调地址中获取的授权码,有效期 10 分钟 code := "authorization_code_from_callback" oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) accessToken, err := oauthClient.GetAccessToken(code) if err != nil { fmt.Printf("获取AccessToken失败: %v\n", err) return } fmt.Printf("AccessToken: %s\n", accessToken.Data.AccessToken) fmt.Printf("RefreshToken: %s\n", accessToken.Data.RefreshToken) fmt.Printf("过期时间(秒): %d\n", accessToken.Data.ExpiresIn) // 输出完整响应 fmt.Printf("完整响应: %+v\n", accessToken) } ``` -------------------------------- ### SDK 初始化 Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 创建 API 调用客户端和 OAuth 认证客户端,这是使用 SDK 的第一步。API 客户端用于调用业务接口,OAuth 客户端用于处理授权流程。 ```APIDOC ## 初始化 SDK 客户端 ### Description 创建 API 调用客户端和 OAuth 认证客户端,这是使用 SDK 的第一步。API 客户端用于调用业务接口,OAuth 客户端用于处理授权流程。 ### Method Initialization (Conceptual) ### Endpoint N/A ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func main() { // 应用凭证 appKey := "your_app_key" appSecret := "your_app_secret" // 创建业务接口调用客户端 apiClient := xhs_sdk.NewXhsClient(appKey, appSecret) // 创建 OAuth 授权客户端 oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) fmt.Printf("API客户端创建成功: %+v\n", apiClient) fmt.Printf("OAuth客户端创建成功: %+v\n", oauthClient) } ``` ### Response #### Success Response (200) - **apiClient** (*xhs_sdk.Client) - Initialized API client instance. - **oauthClient** (*xhs_sdk.OAuthClient) - Initialized OAuth client instance. #### Response Example ``` API客户端创建成功: &xhs_sdk.Client{...} OAuth客户端创建成功: &xhs_sdk.OAuthClient{...} ``` ``` -------------------------------- ### 获取订单列表 - Go Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 查询店铺的订单列表,支持按时间范围、订单状态、订单类型等条件筛选。适用于订单同步、数据统计等场景。注意时间类型限制:创建时间查询时间跨度不超过 24 小时,更新时间查询时间跨度不超过 30 分钟。 ```go package main import ( "encoding/json" "fmt" "time" xhs_sdk "github.com/zsmhub/xhs-sdk" "github.com/zsmhub/xhs-sdk/api" ) func GetOrderList() { appKey := "your_app_key" appSecret := "your_app_secret" accessToken := "your_access_token" // 构建请求参数 req := api.ReqGetOrderList{ StartTime: time.Now().Add(-24 * time.Hour).Unix(), // 开始时间(Unix时间戳) EndTime: time.Now().Unix(), // 结束时间(Unix时间戳) TimeType: xhs_sdk.OrderTimeType1, // 1:创建时间 2:更新时间 OrderType: 0, // 订单类型,0表示全部 OrderStatus: 0, // 订单状态,0表示全部 PageNo: 1, // 页码 PageSize: 20, // 每页数量 } var resp api.RespGetOrderList client := xhs_sdk.NewXhsClient(appKey, appSecret).SetAccessToken(accessToken) err := client.Post(req, &resp) if err != nil { fmt.Printf("获取订单列表失败: %v\n", err) return } fmt.Printf("订单总数: %d\n", resp.Data.Total) fmt.Printf("最大页数: %d\n", resp.Data.MaxPageNo) for i, order := range resp.Data.OrderList { fmt.Printf("\n订单 %d:\n", i+1) fmt.Printf(" 订单ID: %s\n", order.OrderId) fmt.Printf(" 订单状态: %d\n", order.OrderStatus) fmt.Printf(" 创建时间: %d\n", order.CreatedTime) fmt.Printf(" 支付时间: %d\n", order.PaidTime) } // 输出完整 JSON ret, _ := json.MarshalIndent(resp, "", " ") fmt.Printf("\n完整响应:\n%s\n", string(ret)) } ``` -------------------------------- ### 获取小红书 OAuth 授权链接 (Go) Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 生成小红书商家授权链接,引导商家完成应用授权。商家点击链接后会跳转到小红书授权页面,授权成功后会携带 code 参数回调到指定的 redirectUri。需要传入 redirectUri 和 state 参数。 ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func GetAuthorizationUrl() { appKey := "your_app_key" appSecret := "your_app_secret" // 授权成功后的回调地址 redirectUri := "https://yourdomain.com/callback" // 自定义状态参数,用于防止 CSRF 攻击 state := "random_state_string_123456" oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) authUrl := oauthClient.GetOAuthUrl(redirectUri, state) fmt.Printf("请访问以下链接完成授权:\n%s\n", authUrl) // 输出示例: https://ark.xiaohongshu.com/ark/authorization?appId=your_app_key&redirectUri=https%3A%2F%2Fyourdomain.com%2Fcallback&state=random_state_string_123456 } ``` -------------------------------- ### 订单发货 - Go Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 对已支付的订单进行发货操作,填写物流单号和物流公司信息。支持部分发货,可以分多次发货。 ```go package main import ( "fmt" "time" xhs_sdk "github.com/zsmhub/xhs-sdk" "github.com/zsmhub/xhs-sdk/api" ) func OrderDeliver() { appKey := "your_app_key" appSecret := "your_app_secret" accessToken := "your_access_token" req := api.ReqOrderDeliver{ OrderId: "order_id_12345678", // 订单ID ExpressNo: "YT1234567890123", // 物流单号 ExpressCompanyCode: "YT", // 物流公司编码(通过获取快递公司接口获取) ExpressCompanyName: "圆通速递", // 物流公司名称 DeliveringTime: time.Now().Unix(), // 发货时间(Unix时间戳) Unpack: false, // 是否需要开箱验货 SkuIdList: []string{}, // 部分发货时填写本次发货的SKU ID列表,全部发货则留空 } var resp api.RespOrderDeliver client := xhs_sdk.NewXhsClient(appKey, appSecret).SetAccessToken(accessToken) err := client.Post(req, &resp) if err != nil { fmt.Printf("订单发货失败: %v\n", err) return } fmt.Printf("发货成功: %s\n", resp.Data) } ``` -------------------------------- ### OAuth 授权 - 获取授权链接 Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 生成小红书商家授权链接,引导商家完成应用授权。商家点击链接后会跳转到小红书授权页面,授权成功后会携带 code 参数回调到指定地址。 ```APIDOC ## OAuth 授权 - 获取授权链接 ### Description 生成小红书商家授权链接,引导商家完成应用授权。商家点击链接后会跳转到小红书授权页面,授权成功后会携带 code 参数回调到指定地址。 ### Method GET (Conceptual) ### Endpoint N/A (SDK function generates a URL) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func GetAuthorizationUrl() { appKey := "your_app_key" appSecret := "your_app_secret" // 授权成功后的回调地址 redirectUri := "https://yourdomain.com/callback" // 自定义状态参数,用于防止 CSRF 攻击 state := "random_state_string_123456" oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) authUrl := oauthClient.GetOAuthUrl(redirectUri, state) fmt.Printf("请访问以下链接完成授权:\n%s\n", authUrl) } ``` ### Response #### Success Response (200) - **authUrl** (string) - The generated authorization URL for merchants to complete the OAuth flow. #### Response Example ``` 请访问以下链接完成授权: https://ark.xiaohongshu.com/ark/authorization?appId=your_app_key&redirectUri=https%3A%2F%2Fyourdomain.com%2Fcallback&state=random_state_string_123456 ``` ``` -------------------------------- ### 刷新小红书访问令牌 (Go) Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 使用 RefreshToken 刷新 AccessToken,避免令牌过期导致接口调用失败。建议在 AccessToken 过期前通过定时任务自动刷新,确保业务不中断。需要传入之前获取的 RefreshToken。 ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func RefreshAccessToken() { appKey := "your_app_key" appSecret := "your_app_secret" // 之前获取的 RefreshToken refreshToken := "your_refresh_token" oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) newToken, err := oauthClient.RefreshAccessToken(refreshToken) if err != nil { fmt.Printf("刷新AccessToken失败: %v\n", err) return } fmt.Printf("新的AccessToken: %s\n", newToken.Data.AccessToken) fmt.Printf("新的RefreshToken: %s\n", newToken.Data.RefreshToken) fmt.Printf("过期时间(秒): %d\n", newToken.Data.ExpiresIn) } ``` -------------------------------- ### 售后管理 - 获取售后列表 (Go) Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 查询店铺的售后申请列表,支持按订单ID、售后状态、售后类型、时间范围等条件进行筛选。此功能需要 XHS SDK 并且依赖于正确的应用密钥、密钥和访问令牌。输入为筛选条件,输出为售后申请列表。适用于售后工单处理和数据统计。 ```go package main import ( "encoding/json" "fmt" "time" xhs_sdk "github.com/zsmhub/xhs-sdk" "github.com/zsmhub/xhs-sdk/api" ) func GetAfterSaleList() { appKey := "your_app_key" appSecret := "your_app_secret" accessToken := "your_access_token" req := api.ReqListAfterSaleInfos{ PageNo: 1, // 页码 PageSize: 20, // 每页数量 OrderId: "", // 订单ID,可选 Statuses: []int64{ xhs_sdk.AfsStatusWaitAudit, // 待审核 xhs_sdk.AfsStatusWaitBack, // 待用户寄回 }, ReturnTypes: []int64{ xhs_sdk.AfsReturnTypeReturn, // 退货退款 xhs_sdk.AfsReturnTypeExchange, // 换货 }, StartTime: time.Now().Add(-30 * 24 * time.Hour).Unix(), // 开始时间 EndTime: time.Now().Unix(), // 结束时间 TimeType: 1, // 时间类型: 1-申请时间 2-更新时间 } var resp api.RespListAfterSaleInfos client := xhs_sdk.NewXhsClient(appKey, appSecret).SetAccessToken(accessToken) err := client.Post(req, &resp) if err != nil { fmt.Printf("获取售后列表失败: %v\n", err) return } fmt.Printf("售后单总数: %d\n", resp.Data.TotalCount) fmt.Printf("最大页数: %d\n", resp.Data.MaxPageNo) for i, afs := range resp.Data.AfterSaleBasicInfos { fmt.Printf("\n售后单 %d:\n", i+1) fmt.Printf(" 售后ID: %s\n", afs.ReturnsId) fmt.Printf(" 订单ID: %s\n", afs.OrderId) fmt.Printf(" 售后类型: %d\n", afs.ReturnType) fmt.Printf(" 售后状态: %d\n", afs.Status) fmt.Printf(" 申请时间: %d\n", afs.ApplyTime) fmt.Printf(" 退款金额: %.2f 元\n", afs.ExpectedRefundAmountYuan) } ret, _ := json.MarshalIndent(resp, "", " ") fmt.Printf("\n完整响应:\n%s\n", string(ret)) } ``` -------------------------------- ### 订单管理 - 批量解密订单信息 (Go) Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 批量解密小红书平台订单中的敏感信息,如姓名、电话和地址。此功能需要 XHS SDK 并且依赖于正确的应用密钥、密钥和访问令牌。输入为加密数据列表,输出为解密后的数据。该函数用于保护用户隐私。 ```go package main import ( "encoding/json" "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" "github.com/zsmhub/xhs-sdk/api" ) func BatchDecryptOrderInfo() { appKey := "your_app_key" appSecret := "your_app_secret" accessToken := "your_access_token" req := api.ReqBatchDecrypt{ BaseInfos: []api.BaseInfo{ { DataTag: "order_id_12345678", // 订单ID EncryptedData: "encrypted_phone_data_xxx", // 加密的电话号码 }, { DataTag: "order_id_12345678", EncryptedData: "encrypted_address_data_yyy", // 加密的地址信息 }, }, ActionType: xhs_sdk.DecryptActionType2, // 操作类型: 1-单个查看 2-批量打单 3-三方下发 4-其他 AppUserId: "merchant_user_001", // 三方操作ID(服务商必填) } var resp api.RespBatchDecrypt client := xhs_sdk.NewXhsClient(appKey, appSecret).SetAccessToken(accessToken) err := client.Post(req, &resp) if err != nil { fmt.Printf("批量解密失败: %v\n", err) return } fmt.Printf("解密结果:\n") for i, data := range resp.Data.DataInfoList { fmt.Printf(" 数据 %d:\n", i+1) fmt.Printf(" 订单ID: %s\n", data.DataTag) fmt.Printf(" 加密数据: %s\n", data.EncryptedData) fmt.Printf(" 解密数据: %s\n", data.DecryptedData) if data.ErrorCode != 0 { fmt.Printf(" 错误: [%d] %s\n", data.ErrorCode, data.ErrorMsg) } } ret, _ := json.MarshalIndent(resp, "", " ") fmt.Printf("\n完整响应:\n%s\n", string(ret)) } ``` -------------------------------- ### OAuth 授权 - 获取访问令牌 Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 使用授权码换取访问令牌(AccessToken)和刷新令牌(RefreshToken)。AccessToken 用于调用业务接口,有效期通常为 30 天,RefreshToken 用于刷新 AccessToken。 ```APIDOC ## OAuth 授权 - 获取访问令牌 ### Description 使用授权码换取访问令牌(AccessToken)和刷新令牌(RefreshToken)。AccessToken 用于调用业务接口,有效期通常为 30 天,RefreshToken 用于刷新 AccessToken。 ### Method POST (Conceptual) ### Endpoint N/A (SDK function handles the request) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body - **code** (string) - Required - The authorization code obtained from the callback. ### Request Example ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func GetAccessToken() { appKey := "your_app_key" appSecret := "your_app_secret" // 从回调地址中获取的授权码,有效期 10 分钟 code := "authorization_code_from_callback" oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) accessToken, err := oauthClient.GetAccessToken(code) if err != nil { fmt.Printf("获取AccessToken失败: %v\n", err) return } fmt.Printf("AccessToken: %s\n", accessToken.Data.AccessToken) fmt.Printf("RefreshToken: %s\n", accessToken.Data.RefreshToken) fmt.Printf("过期时间(秒): %d\n", accessToken.Data.ExpiresIn) // 输出完整响应 fmt.Printf("完整响应: %+v\n", accessToken) } ``` ### Response #### Success Response (200) - **Data** (object) - Contains token information. - **AccessToken** (string) - The access token for API calls. - **RefreshToken** (string) - The refresh token for obtaining new access tokens. - **ExpiresIn** (integer) - The token's expiration time in seconds. #### Response Example ```json { "message": "success", "code": "OK", "data": { "access_token": "your_access_token", "refresh_token": "your_refresh_token", "expires_in": 2592000 } } ``` ``` -------------------------------- ### 获取订单详情 - Go Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 查询单个订单的完整信息,包括收货地址、商品明细、价格信息、物流信息等。用于订单详情展示、发货处理等场景。 ```go package main import ( "encoding/json" "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" "github.com/zsmhub/xhs-sdk/api" ) func GetOrderDetail() { appKey := "your_app_key" appSecret := "your_app_secret" accessToken := "your_access_token" req := api.ReqGetOrderDetail{ OrderId: "order_id_12345678", // 订单ID } var resp api.RespGetOrderDetail client := xhs_sdk.NewXhsClient(appKey, appSecret).SetAccessToken(accessToken) err := client.Post(req, &resp) if err != nil { fmt.Printf("获取订单详情失败: %v\n", err) return } fmt.Printf("订单ID: %s\n", resp.Data.OrderId) fmt.Printf("订单状态: %d\n", resp.Data.OrderStatus) fmt.Printf("收货人: %s\n", resp.Data.ReceiverName) fmt.Printf("收货电话: %s\n", resp.Data.ReceiverPhone) fmt.Printf("收货地址: %s\n", resp.Data.ReceiverAddress) fmt.Printf("订单总金额: %d 分\n", resp.Data.TotalPayAmount) fmt.Printf("\n商品明细:\n") for i, sku := range resp.Data.SkuList { fmt.Printf(" 商品 %d:\n", i+1) fmt.Printf(" SKU ID: %s\n", sku.SkuId) fmt.Printf(" 商品名称: %s\n", sku.SkuName) fmt.Printf(" 数量: %d\n", sku.SkuQuantity) fmt.Printf(" 实付金额: %d 分\n", sku.TotalPaidAmount) } ret, _ := json.MarshalIndent(resp, "", " ") fmt.Printf("\n完整响应:\n%s\n", string(ret)) } ``` -------------------------------- ### 处理小红书消息推送回调 (Go) Source: https://github.com/zsmhub/xhs-sdk/blob/main/README.md 设置Echo服务器以接收和处理来自小红书的消息推送。支持应用授权回调和消息推送回调,并提供消息体解析示例。 ```go e := echo.New() e.GET("/message/auth", func(c echo.Context) error { // 打印消息推送请求体,便于调试 // requestBody, _ := ioutil.ReadAll(c.Request().Body) // fmt.Printf("xhs auth : uri=%s, req=%s\n", c.Request().RequestURI, string(requestBody)) code := c.Param("code") state := c.Param("state") fmt.Printf("code=%s, state=%s\n", code, state) return c.JSON(http.StatusOK, message.MessageResp{ Success: true, ErrorCode: 0, ErrorMsg: "", }) }).Name = "应用授权回调地址" e.POST("/message/push", func(c echo.Context) error { // 打印消息推送请求体,便于调试 // requestBody, _ := ioutil.ReadAll(c.Request().Body) // fmt.Printf("xhs push : uri=%s, req=%s\n", c.Request().RequestURI, string(requestBody)) var req []message.Message _ = c.Bind(&req) for _, v := range req { vJson, _ := json.Marshal(v) fmt.Printf("msg=%s\n", vJson) // 消息data解析示例 if v.MsgTag == (message.MsgFulfillmentStatusChange{}.MsgTag()) { // 方案一 //var resp message.MsgFulfillmentStatusChange //if err := v.DecodeData(&resp); err != nil { // fmt.Println(err) // continue //} else { // fmt.Printf("resp=%+v\n", resp) //} // 方案二 resp, err := message.MsgFulfillmentStatusChange{}.DecodeData(v.Data) if err != nil { fmt.Println(err) continue } else { fmt.Printf("resp=%+v\n", resp) } } } return c.JSON(http.StatusOK, message.MessageResp{ Success: true, ErrorCode: 0, ErrorMsg: "", }) }).Name = "应用推送回调地址" ``` -------------------------------- ### OAuth 授权 - 刷新访问令牌 Source: https://context7.com/zsmhub/xhs-sdk/llms.txt 使用 RefreshToken 刷新 AccessToken,避免令牌过期导致接口调用失败。建议在 AccessToken 过期前通过定时任务自动刷新,确保业务不中断。 ```APIDOC ## OAuth 授权 - 刷新访问令牌 ### Description 使用 RefreshToken 刷新 AccessToken,避免令牌过期导致接口调用失败。建议在 AccessToken 过期前通过定时任务自动刷新,确保业务不中断。 ### Method POST (Conceptual) ### Endpoint N/A (SDK function handles the request) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body - **refreshToken** (string) - Required - The refresh token obtained previously. ### Request Example ```go package main import ( "fmt" xhs_sdk "github.com/zsmhub/xhs-sdk" ) func RefreshAccessToken() { appKey := "your_app_key" appSecret := "your_app_secret" // 之前获取的 RefreshToken refreshToken := "your_refresh_token" oauthClient := xhs_sdk.NewXhsOAuthClient(appKey, appSecret) newToken, err := oauthClient.RefreshAccessToken(refreshToken) if err != nil { fmt.Printf("刷新AccessToken失败: %v\n", err) return } fmt.Printf("新的AccessToken: %s\n", newToken.Data.AccessToken) fmt.Printf("新的RefreshToken: %s\n", newToken.Data.RefreshToken) fmt.Printf("过期时间(秒): %d\n", newToken.Data.ExpiresIn) } ``` ### Response #### Success Response (200) - **Data** (object) - Contains token information. - **AccessToken** (string) - The newly obtained access token. - **RefreshToken** (string) - The new refresh token. - **ExpiresIn** (integer) - The new token's expiration time in seconds. #### Response Example ```json { "message": "success", "code": "OK", "data": { "access_token": "new_access_token", "refresh_token": "new_refresh_token", "expires_in": 2592000 } } ``` ``` -------------------------------- ### 安装 Go SDK Source: https://github.com/zsmhub/xhs-sdk/blob/main/README.md 使用go get命令安装小红书开放平台Go SDK。这是使用SDK前必须执行的步骤。 ```sh go get github.com/zsmhub/xhs-sdk ``` -------------------------------- ### 调用小红书开放平台API (Go) Source: https://github.com/zsmhub/xhs-sdk/blob/main/README.md 示例代码展示了如何使用小红书开放平台Go SDK进行OAuth URL生成、获取AccessToken以及调用GetExpressCompanyList API。需要AppKey、AppSecret和Code作为输入。 ```go func GetOAuthUrl(redirectUri, state string) { authUrl := xhs_sdk.NewXhsOAuthClient(AppKey, AppSecret).GetOAuthUrl(redirectUri, state) fmt.Printf("authUrl=%s\n", authUrl) } func GetAccessToken() { accessToken, err := xhs_sdk.NewXhsOAuthClient(AppKey, AppSecret).GetAccessToken(Code) if err != nil { fmt.Println(err) return } fmt.Printf("%+v\n", accessToken) } func GetExpressCompanyList() { var resp api.RespGetExpressCompanyList err := xhs_sdk.NewXhsClient(AppKey, AppSecret).SetAccessToken(AccessToken).Post(api.ReqGetExpressCompanyList{}, &resp) if err != nil { fmt.Println(err) return } ret, _ := json.Marshal(resp) fmt.Printf("%s\n", string(ret)) } ``` -------------------------------- ### Order Management - Batch Decrypt Order Information Source: https://context7.com/zsmhub/xhs-sdk/llms.txt This API endpoint allows for the batch decryption of sensitive information within orders, such as recipient names, phone numbers, and addresses. The Xiaohongshu platform encrypts privacy data, necessitating the use of this decryption interface to obtain plain text. ```APIDOC ## POST /api/orders/batch_decrypt ### Description Batch decrypts sensitive information in orders, including recipient name, phone number, and address. This is required because the Xiaohongshu platform encrypts privacy data. ### Method POST ### Endpoint /api/orders/batch_decrypt ### Parameters #### Request Body - **BaseInfos** (array[object]) - Required - List of order basic info objects to decrypt. - **DataTag** (string) - Required - Order ID. - **EncryptedData** (string) - Required - The encrypted data to decrypt (e.g., phone number, address). - **ActionType** (integer) - Required - The type of action. Use `xhs_sdk.DecryptActionType2` for batch order printing. - **AppUserId** (string) - Optional - Merchant user ID for third-party operations (required for service providers). ### Request Example ```json { "BaseInfos": [ { "DataTag": "order_id_12345678", "EncryptedData": "encrypted_phone_data_xxx" }, { "DataTag": "order_id_12345678", "EncryptedData": "encrypted_address_data_yyy" } ], "ActionType": 2, "AppUserId": "merchant_user_001" } ``` ### Response #### Success Response (200) - **Data** (object) - Response data. - **DataInfoList** (array[object]) - List of decrypted data information. - **DataTag** (string) - Order ID. - **EncryptedData** (string) - Original encrypted data. - **DecryptedData** (string) - Decrypted plain text data. - **ErrorCode** (integer) - Error code for this specific decryption. - **ErrorMsg** (string) - Error message for this specific decryption. #### Response Example ```json { "code": 0, "message": "success", "data": { "DataInfoList": [ { "DataTag": "order_id_12345678", "EncryptedData": "encrypted_phone_data_xxx", "DecryptedData": "+8613800138000", "ErrorCode": 0, "ErrorMsg": "" }, { "DataTag": "order_id_12345678", "EncryptedData": "encrypted_address_data_yyy", "DecryptedData": "浙江省杭州市滨江区", "ErrorCode": 0, "ErrorMsg": "" } ] } } ``` ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.