{"id":29007199,"url":"https://github.com/niltor/open-pdd-net-sdk","last_synced_at":"2025-06-25T13:07:35.821Z","repository":{"id":33977079,"uuid":"147523186","full_name":"niltor/open-pdd-net-sdk","owner":"niltor","description":"拼多多开放平台DotNet SDK","archived":false,"fork":false,"pushed_at":"2025-02-26T09:41:07.000Z","size":4634,"stargazers_count":169,"open_issues_count":1,"forks_count":48,"subscribers_count":12,"default_branch":"dev","last_synced_at":"2025-06-01T08:49:05.672Z","etag":null,"topics":["dotnet","dotnet-sdk","dotnetcore","nuget","openplatform","pinduoduo","sdk"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/MSDev.PddOpenSdk/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/niltor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-05T13:35:54.000Z","updated_at":"2025-05-24T12:58:31.000Z","dependencies_parsed_at":"2024-01-09T04:02:27.251Z","dependency_job_id":"8b00ee58-7308-4aa0-bc6e-06d6f0c7118f","html_url":"https://github.com/niltor/open-pdd-net-sdk","commit_stats":{"total_commits":241,"total_committers":9,"mean_commits":26.77777777777778,"dds":0.04149377593360992,"last_synced_commit":"9058b39ef0955c4ae3119c45cd525b1c38633623"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/niltor/open-pdd-net-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niltor%2Fopen-pdd-net-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niltor%2Fopen-pdd-net-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niltor%2Fopen-pdd-net-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niltor%2Fopen-pdd-net-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/niltor","download_url":"https://codeload.github.com/niltor/open-pdd-net-sdk/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niltor%2Fopen-pdd-net-sdk/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261879323,"owners_count":23223739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","dotnet-sdk","dotnetcore","nuget","openplatform","pinduoduo","sdk"],"created_at":"2025-06-25T13:07:35.001Z","updated_at":"2025-06-25T13:07:35.798Z","avatar_url":"https://github.com/niltor.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 说明文档\n\n[![publish](https://github.com/niltor/open-pdd-net-sdk/actions/workflows/publish.yml/badge.svg?branch=nuget)](https://github.com/niltor/open-pdd-net-sdk/actions/workflows/publish.yml)\n\n[![NuGet](https://img.shields.io/nuget/v/MSDev.PddOpenSdk.AspNetCore.svg?style=flat-square\u0026label=nuget)](https://www.nuget.org/packages/MSDev.PddOpenSdk.AspNetCore/)\n[![NuGet](https://img.shields.io/nuget/dt/MSDev.PddOpenSdk.AspNetCore.svg)](https://www.nuget.org/packages/MSDev.PddOpenSdk.AspNetCore/)\n\nopen-pdd-net-sdk，拼多多开放平台 DotNet SDK。\n\n## 特别说明\n\n- `6.0`版本开始，目标框架统一调整到`.NET6`.\n- `7.0`版本，同时支持`.NET6` 和`.NET7`.\n- `8.0`版本，支持`.NET8`,`.NET6` 和`.NET7`.\n\n## 更新说明\n\n更新文档已经迁移到[`CHANGELOG.md`](https://github.com/niltor/open-pdd-net-sdk/blob/v6/docs/CHANGELOG.md)。\n\n## 类库说明\n\n核心类库 `MSDev.PddOpenSdk` 支持 `.NET6.0+`及`.NET Standard2.0` 的项目，控制台、客户端等类型项目可使用。\n\nASP.NET Core 项目请使用 Nuget 包 `MSDev.PddOpenSdk.AspNetCore`，可直接通过注入服务的方式使用。\n\n## Console项目\n\n该项目是通过官方接口获取并自动生成所有请求模型类、返回模型类以及请求服务类，生成后部分类名会有重名,更改成不同的类名即可。\n\n执行方法，打开Console目录，然后执行`dotnet run`命令即可。\n\n执行成功后，可使用Visual Studio自带的代码清理，对所有文件进行代码格式化操作。\n\n## 使用说明\n\n### PddOpenSdk 核心类库使用\n\n适用于客户端、控制台等程序。支持 `NET6.0+`及`.NET Standard2.0` ，安装 Nuget 包 `MSDev.PddOpenSdk`。\n\nWeb应用请使用`MSDev.PddOpenSdk.AspNetCore`。\n\n### 使用示例\n\n最新[示例代码](https://github.com/niltor/open-pdd-net-sdk/tree/v6/src/ConsoleSample)。\n\n```csharp\nusing MSDev.PddOpenSdk;\nusing PddOpenSdk.Models.Request.Ddk;\nusing System.Text.Json;\n\n// 替代下面配置信息\nvar client = new PddClient(new ClientConfig\n{\n    ClientId = \"YourClientId\",\n    ClientSecret = \"YourClientSecret\",\n    CallbackUrl = \"YourCallbackUrl\"\n});\n\n// 需要先拿到授权返回的code\nvar code = \"\";\n// 使用code换取token\nvar token = await client.GetAccessTokenAsync(code);\n\nif (token == null)\n{\n    Console.WriteLine(client.ErrorResponse.ErrorMsg);\n}\nelse\n{\n    Console.WriteLine(\"token:\"+ token.AccessToken); \n}\n// 接口请求\nvar result = await client.DdkApi.GetDdkGoodsRecommendAsync(\n    new GetDdkGoodsRecommend\n    {\n        CatId = 20100\n    });\n\nvar response = result.GoodsBasicDetailResponse;\nConsole.WriteLine(JsonSerializer.Serialize(response));\n\n```\n\n### ASP.NET Core 项目使用\n\n先安装Nuget 包 `MSDev.PddOpenSdk.AspNetCore`。\n\n最新[示例代码](https://github.com/niltor/open-pdd-net-sdk/tree/dev/src/Sample)。\n\n- 在 Startup.cs 中注入服务\n\n```csharp\nservices.Configure\u003cPddOptions\u003e(Configuration.GetSection(\"Pdd\"));\nservices.AddPdd();\n```\n\n- `appsettings.json`配置项参考:\n\n```json\n\"Pdd\": {\n    \"ClientId\": \"\",\n    \"ClientSecret\": \"\",\n    \"CallbackUrl\": \"\",\n    // 心跳间隔\n    \"HeartBeatSeconds\": 5\n}\n```\n\n- 然后在控制器使用注入服务\n\n```csharp\nreadonly PddService _pdd;\npublic YourController(PddService pdd)\n{\n    _pdd = pdd;\n}\n```\n\n#### 在控制器中使用\n\n```csharp\n/// \u003csummary\u003e\n/// 测试获取token\n/// \u003c/summary\u003e\n/// \u003cparam name=\"code\"\u003e\u003c/param\u003e\n/// \u003creturns\u003e\u003c/returns\u003e\npublic async Task\u003cIActionResult\u003e Callback(string code)\n{\n    var token = await _pdd.GetAccessTokenAsync(code);\n    return Content(token.AccessToken);\n}\n\n/// \u003csummary\u003e\n/// 多租户测试\n/// \u003c/summary\u003e\n/// \u003creturns\u003e\u003c/returns\u003e\npublic async Task\u003cActionResult\u003e MultiTenantAsync()\n{\n    var service = new PddService(new PddOptions\n    {\n        ClientId = \"\",\n        ClientSecret = \"\",\n        CallbackUrl = \"\",\n        // 也可直接将token\n        // AccessToken=\"\"\n\n    });\n    // 如果没有token，可通过该方法获取token\n    await service.GetAccessTokenAsync(code: \"\");\n    var result = await service.DdkApi.GetDdkGoodsRecommendAsync(\n        new GetDdkGoodsRecommendRequestModel\n        {\n            CatId = 20100\n        });\n    return Json(result);\n}\n```\n\n- 图片上传示例\n\n```csharp\n    var filePath = Path.Combine(\"images\", \"logo.png\");\n    byte[] bytes = System.IO.File.ReadAllBytes(filePath);\n\n    // 构造图片上传内容\n    string base64 = \"data:image/png;base64,\" + Convert.ToBase64String(bytes);\n    var model = new UploadGoodsImageRequestModel\n    {\n        Image = base64\n    };\n    var result = await _pdd.GoodsApi.UploadGoodsImageAsync(model)\n```\n\n#### 使用socket消息订阅服务\n\n- 在`StartUp.cs`添加`PddOption`选项。\n\n    ```csharp\n        // 获取选项\n        services.Configure\u003cPddOptions\u003e(Configuration.GetSection(\"Pdd\"));\n    ```\n\n- 创建一个`XXXHostService`类，继承`PddSocketHostServiceBase`。\n- 重写`XXXHostService`的`OnMessage`方法，以进行消息的自定义处理。\n- 在`Program.cs`中添加启用服务的代码，如：\n\n    ```csharp\n    public static IHostBuilder CreateHostBuilder(string[] args) =\u003e\n        Host.CreateDefaultBuilder(args)\n            .ConfigureWebHostDefaults(webBuilder =\u003e\n            {\n                webBuilder.UseStartup\u003cStartup\u003e();\n            }).ConfigureServices(services =\u003e\n            {\n                services.AddHostedService\u003cXXXHostService\u003e();\n            });\n    ```\n\n`XXXHostService` 类可参考[Sample](https://github.com/niltor/open-pdd-net-sdk/tree/dev/src/Sample/MyHostService.cs)项目。\n\n- 心跳检测间隔可在`appsetting.json`配置中进行配置，可参考`Sample`项目中的配置。\n此外可在自定义的`XXXHostService`类中的构造方法中设置`HeartBeartSeconds`值，会覆盖配置中的值。\n\n\u003e 所有方法名与官方文档保持一致，并有中文注释提醒，只是更改了命名规范，非常容易查找使用。\n\n## 问题反馈\n\n欢迎通过以下方式反馈问题:\n\n- 提交 GitHub Issues\n- Email： \u003czpty@outlook.com\u003e（优先处理）\n- QQ 群：737822525\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniltor%2Fopen-pdd-net-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniltor%2Fopen-pdd-net-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniltor%2Fopen-pdd-net-sdk/lists"}