Giter Site home page Giter Site logo

niltor / open-pdd-net-sdk Goto Github PK

View Code? Open in Web Editor NEW
160.0 14.0 48.0 4.14 MB

拼多多开放平台DotNet SDK

Home Page: https://www.nuget.org/packages/MSDev.PddOpenSdk/

License: Apache License 2.0

C# 99.38% HTML 0.40% Smarty 0.22%
openplatform pinduoduo dotnet sdk dotnetcore dotnet-sdk nuget

open-pdd-net-sdk's Introduction

说明文档

publish

NuGet NuGet

open-pdd-net-sdk,拼多多开放平台 DotNet SDK。

特别说明

  • 6.0版本开始,目标框架统一调整到.NET6.
  • 7.0版本,同时支持.NET6.NET7.
  • 8.0版本,支持.NET8,.NET6.NET7.

更新说明

更新文档已经迁移到CHANGELOG.md

类库说明

核心类库 MSDev.PddOpenSdk 支持 .NET6.0+.NET Standard2.0 的项目,控制台、客户端等类型项目可使用。

ASP.NET Core 项目请使用 Nuget 包 MSDev.PddOpenSdk.AspNetCore,可直接通过注入服务的方式使用。

Console项目

该项目是通过官方接口获取并自动生成所有请求模型类、返回模型类以及请求服务类,生成后部分类名会有重名,更改成不同的类名即可。

执行方法,打开Console目录,然后执行dotnet run命令即可。

执行成功后,可使用Visual Studio自带的代码清理,对所有文件进行代码格式化操作。

使用说明

PddOpenSdk 核心类库使用

适用于客户端、控制台等程序。支持 NET6.0+.NET Standard2.0 ,安装 Nuget 包 MSDev.PddOpenSdk

Web应用请使用MSDev.PddOpenSdk.AspNetCore

使用示例

最新示例代码

using MSDev.PddOpenSdk;
using PddOpenSdk.Models.Request.Ddk;
using System.Text.Json;

// 替代下面配置信息
var client = new PddClient(new ClientConfig
{
    ClientId = "YourClientId",
    ClientSecret = "YourClientSecret",
    CallbackUrl = "YourCallbackUrl"
});

// 需要先拿到授权返回的code
var code = "";
// 使用code换取token
var token = await client.GetAccessTokenAsync(code);

if (token == null)
{
    Console.WriteLine(client.ErrorResponse.ErrorMsg);
}
else
{
    Console.WriteLine("token:"+ token.AccessToken); 
}
// 接口请求
var result = await client.DdkApi.GetDdkGoodsRecommendAsync(
    new GetDdkGoodsRecommend
    {
        CatId = 20100
    });

var response = result.GoodsBasicDetailResponse;
Console.WriteLine(JsonSerializer.Serialize(response));

ASP.NET Core 项目使用

先安装Nuget 包 MSDev.PddOpenSdk.AspNetCore

最新示例代码

  • 在 Startup.cs 中注入服务
services.Configure<PddOptions>(Configuration.GetSection("Pdd"));
services.AddPdd();
  • appsettings.json配置项参考:
"Pdd": {
    "ClientId": "",
    "ClientSecret": "",
    "CallbackUrl": "",
    // 心跳间隔
    "HeartBeatSeconds": 5
}
  • 然后在控制器使用注入服务
readonly PddService _pdd;
public YourController(PddService pdd)
{
    _pdd = pdd;
}

在控制器中使用

/// <summary>
/// 测试获取token
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public async Task<IActionResult> Callback(string code)
{
    var token = await _pdd.GetAccessTokenAsync(code);
    return Content(token.AccessToken);
}

/// <summary>
/// 多租户测试
/// </summary>
/// <returns></returns>
public async Task<ActionResult> MultiTenantAsync()
{
    var service = new PddService(new PddOptions
    {
        ClientId = "",
        ClientSecret = "",
        CallbackUrl = "",
        // 也可直接将token
        // AccessToken=""

    });
    // 如果没有token,可通过该方法获取token
    await service.GetAccessTokenAsync(code: "");
    var result = await service.DdkApi.GetDdkGoodsRecommendAsync(
        new GetDdkGoodsRecommendRequestModel
        {
            CatId = 20100
        });
    return Json(result);
}
  • 图片上传示例
    var filePath = Path.Combine("images", "logo.png");
    byte[] bytes = System.IO.File.ReadAllBytes(filePath);

    // 构造图片上传内容
    string base64 = "data:image/png;base64," + Convert.ToBase64String(bytes);
    var model = new UploadGoodsImageRequestModel
    {
        Image = base64
    };
    var result = await _pdd.GoodsApi.UploadGoodsImageAsync(model)

使用socket消息订阅服务

  • StartUp.cs添加PddOption选项。

        // 获取选项
        services.Configure<PddOptions>(Configuration.GetSection("Pdd"));
  • 创建一个XXXHostService类,继承PddSocketHostServiceBase

  • 重写XXXHostServiceOnMessage方法,以进行消息的自定义处理。

  • Program.cs中添加启用服务的代码,如:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            }).ConfigureServices(services =>
            {
                services.AddHostedService<XXXHostService>();
            });

XXXHostService 类可参考Sample项目。

  • 心跳检测间隔可在appsetting.json配置中进行配置,可参考Sample项目中的配置。 此外可在自定义的XXXHostService类中的构造方法中设置HeartBeartSeconds值,会覆盖配置中的值。

所有方法名与官方文档保持一致,并有中文注释提醒,只是更改了命名规范,非常容易查找使用。

问题反馈

欢迎通过以下方式反馈问题:

open-pdd-net-sdk's People

Contributors

azure-pipelines[bot] avatar cherrs avatar gitter-badger avatar leo-cjw avatar newdre avatar niltor avatar sunhelter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

open-pdd-net-sdk's Issues

多账号的支持

1 PddCommonApi.ClientId = "ID";
PddCommonApi.ClientSecret = "Secret"; 我想一个平台 多个店铺。可以支持下不。我们下属的公司都是单独的店铺 不想部署好几套

模型问题汇集

问题描述

由于所有的请求和返回模型都是根据官方文档 中的描述生成的。

但是由于官方文档的更新或更新不及时,造成与实际返回不同,而导致请求或响应无法正常解析。

本Issue就是用来收集 该类问题。大家遇到相关的问题,可以在该问题下回复进行反馈。

问题列表

SDK 更新计划

对于 2.4+版本

  • 添加对图片文件类型上传的支持
  • bug修复及改进

预计10月份完成

关于6.x版本
从6.x版本开始,将基于.net 6进行开发,版本号同步到6.x,相关依赖包也会同步到6.x,
会包含2.x版本的功能.
计划新增特性:

  • 添加对图片文件类型上传的支持
  • 移除JSON.Net依赖,使用System.Text.Json 替代。
  • HttpClient的改进,使用工厂模式,或让使用者自己传入HttpClient实例。
  • 简化所有请求和返回类型的名称
  • 使用C#10语法对代码进行精简
  • 消息服务的ack处理
  • 针对Asp.net core 6 中的minimal API提供支持。

6.x版本将于11月.net 6 正式发布后开始,两个月内完成。

.Net 5.0使用MSDev.PddOpenSdk.AspNetCore (2.3.5),时会报签名错误

问题原因应该是这个
image
这边是netstandard2.1的
而代码里边
open-pdd-net-sdk\PddOpenSdk\PddOpenSdk\Services\PddCommonApi.cs 165行
`
#if NET452
var Unix = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
dic.Add("timestamp", (long)(DateTime.UtcNow - Unix).TotalMilliseconds);
#endif
#if NETSTANDARD2_0
dic.Add("timestamp", DateTimeOffset.Now.ToUnixTimeSeconds());

#endif
这边没有判断netstandard2.1的,所以请求的时候就缺少了timestamp参数,导致报错 我改成这样就好了
#if NET452
var Unix = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
dic.Add("timestamp", (long)(DateTime.UtcNow - Unix).TotalMilliseconds);
#endif
#if NETSTANDARD2_0
dic.Add("timestamp", DateTimeOffset.Now.ToUnixTimeSeconds());

#endif
#if NETSTANDARD2_1
dic.Add("timestamp", DateTimeOffset.Now.ToUnixTimeSeconds());
#endif
`

SDK 路线图

对于 2.4+版本

  • 添加对图片文件类型上传的支持
  • bug修复及改进

预计10月份完成

关于6.x版本
从6.x版本开始,将基于.net 6进行开发,版本号同步到6.x,相关依赖包也会同步到6.x,
会包含2.x版本的功能.
计划新增特性:

  • 添加对图片文件类型上传的支持
  • HttpClient的改进,将使用HttpClientFactory优化请求连接
  • 简化所有请求和返回类型的名称
  • 使用C#10语法对代码进行精简

6.x版本将于11月.net 6 正式发布后开始,两个月内完成。

ErrorResponse 类json 反序列化的问题

error_response 他返回的是 error_response 开头 而不是value

public class ErrorResponse
{
[JsonProperty("error_response")]
public Error_Response Value { get; set; }
}

public class Error_Response
{
    public string Error_msg { get; set; }
    public string Sub_msg { get; set; }
    public object Sub_code { get; set; }
    public int Error_code { get; set; }
    public string Request_id { get; set; }
}

//{"error_response":{"error_msg":"access_token已过期","sub_msg":"access_token已过期","sub_code":"10019","error_code":10019,"request_id":"16049932570666783"}}

}

更新7.0后订单列表查询和订单详情无效

OrderApi.GetOrderInformationAsync
对应pdd.order.information.get订单详情接口

OrderApi.GetOrderListAsync
对应pdd.order.list.get订单列表查询接口

更新7.0版后这两个订单查询函数丢失了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.