Microsoft Dynamics 365 基于 Dataverse Web API(OData v4),实现 ICrmService 统一接口。
包信息
| 项 | 值 |
|---|---|
| NuGet 包 | Bitzsoft.Integrations.Crm.Dynamics365 |
| 实现接口 | ICrmService |
| Provider ID | dynamics-365 |
| 鉴权方式 | Azure AD Client Credentials OAuth2(Bearer),外部换令牌后直接传入 |
| API 协议 | OData v4(application/json) |
| 默认 BaseUrl | 无(需配置,形如 https://{org}.crm.dynamics.com/api/data/v9.2) |
| 区域 | Global |
本实现直接接收已获取的 Access Token,适用于令牌由外部 Token 管理器统一刷新的场景。凭据通过 Azure 应用注册的 ClientId / ClientSecret 获取访问令牌。
配置字段
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
AccessToken | string | 是 | — | Azure AD 访问令牌(由 Client Credentials 流程在外部获取) |
BaseUrl | string | 是 | — | API 基地址,形如 https://{org}.crm.dynamics.com/api/data/v9.2 |
HttpClientName | string | 否 | CrmDynamics365 | 业务 HttpClient 命名 |
配置 JSON 示例
{ "Crm": { "Dynamics365": { "AccessToken": "eyJ0eXAiOiJKV1Qi...", "BaseUrl": "https://myorg.crm.dynamics.com/api/data/v9.2" } }}DI 注册
// 从配置节注册(默认节名 Crm:Dynamics365)services.AddDynamics365Crm(configuration);
// 或用回调单独配置services.AddDynamics365Crm(options =>{ options.AccessToken = "eyJ0eXAiOiJKV1Qi..."; options.BaseUrl = "https://myorg.crm.dynamics.com/api/data/v9.2";});使用示例
public class OpportunityService{ private readonly ICrmService _crm;
public OpportunityService(ICrmService crm) => _crm = crm;
public Task<List<CrmOpportunity>> ListOpenAsync() => _crm.ListOpportunitiesAsync(new ListOpportunitiesRequest { Stage = "Open" });
public Task<CrmResult> AdvanceStageAsync(string opportunityId, string nextStage) => _crm.UpdateOpportunityStageAsync(opportunityId, nextStage);}依赖
| 包 | 说明 |
|---|---|
Bitzsoft.Integrations.Crm | 客户关系管理服务抽象层 |
Bitzsoft.Integrations.Core | 公共基座 |
Bitzsoft.Integrations.OData | OData v4 查询支持 |
已知限制
- 本包不内置令牌刷新逻辑,Access Token 须由外部 Token 管理器定期刷新后更新配置。