集成购买保护 API
本文介绍如何在 Microsoft Dynamics 365 欺诈保护中集成实时应用程序编程接口(API)。
若要利用完整的欺诈防护功能,必须将交易数据发送到实时欺诈防护 API。 在评估体验中,发送交易数据使你能够分析使用欺诈保护的结果。 在保护体验中,还可以根据已配置的规则执行决策。
根据使用欺诈保护的方式,可以使用以下购买保护 API 的不同集:
- 购买
- PurchaseStatus
- BankEvent
- 回充
- 退款
- UpdateAccount
- Label
API 集成阶段
购买保护 API 的集成分三个阶段进行:
登录
重要
必须是 Azure 租户中的全局管理员才能完成初始登录。
访问要使用的每个环境的以下门户。 如果系统提示你登录,请接受条款和条件。
创建 Microsoft Entra 应用程序
重要
必须是 Azure 租户中的应用程序管理员、云应用程序管理员或全局管理员才能完成此步骤。
若要获取调用 API 所需的令牌,必须配置并使用 Microsoft Entra 应用程序,如本节中所述。
配置 Microsoft Entra 应用程序
若要配置 Microsoft Entra 应用程序,请执行以下步骤。
在欺诈保护门户的左侧导航窗格中,选择“集成>创建 Microsoft Entra 应用程序>设置”。
完成页面以创建应用。 建议为要与欺诈保护集成的每个环境创建一个 Microsoft Entra 应用程序。
输入或选择以下必填字段的值:
- 应用程序显示名称 – 为应用程序提供描述性名称。 最大长度为 93 个字符。
- 身份验证方法 – 选择是要通过证书还是机密(密码)进行身份验证。
如果选择了证书身份验证方法,请执行以下步骤:
- 选择 “选择文件 ”以上传公钥。 (获取令牌时需要匹配的私钥。
- 选择“机密”以在创建应用程序后自动生成密码。
完成设置必填字段后,选择“ 创建应用程序”。 确认页根据所选的身份验证方法汇总了应用的名称、ID 和证书指纹或机密。
重要
保存机密或证书指纹信息以供将来参考。 机密仅显示一次。
创建另一个应用程序
若要创建另一个应用程序,请选择“ 创建另一个应用程序”。 可以根据需要创建任意数量的应用,以在每个环境中运行 API 调用。
管理现有的 Microsoft Entra 应用程序
创建 Microsoft Entra 应用后,可以通过 [Azure 门户](https://portal.azure.com/#blade/Microsoft_MicrosoftEntra ID_IAM/ActiveDirectoryMenuBlade/RegisteredApps)管理它们。 有关详细信息,请参阅如何以及为何将应用程序添加到 Microsoft Entra ID。
生成访问令牌
若要安全地将系统与欺诈保护集成,请获取 Microsoft Entra 令牌,并在每个 API 调用的标头中提供它。
注意
访问令牌的有效期限制为 60 分钟。 建议缓存并重复使用令牌,直到令牌即将过期。 然后,可以获取新的访问令牌。
获取令牌需要以下信息。
所需的 ID 和信息
- 环境 URI – 沙盒或生产环境的 URI 显示在欺诈保护门户中API 管理页的“配置”选项卡上。
- 目录(租户)ID – 此 ID 是 Azure 中租户域的全局唯一标识符(GUID)。 它显示在“欺诈保护”门户的“API 管理”页的“Azure 门户”和“配置”选项卡上。
- 应用程序(客户端)ID – 此 ID 标识已创建的用于调用 API 的 Microsoft Entra 应用。 从实时 API 确认页获取 ID,或稍后在Azure 门户中的应用注册下找到该 ID。 将为每个创建的应用提供一个 ID。
- 证书指纹或机密 – 从实时 API 确认页获取指纹或机密。
- 实例 ID – 此 ID 是欺诈保护中环境的 GUID。 它显示在欺诈保护仪表板上的“集成”磁贴中。
示例:演示如何使用证书或机密获取令牌的代码示例
以下 C# 代码示例提供了使用证书或机密获取令牌的示例。 将占位符替换为特定信息。 对于这两个 C# 示例,需要导入 Microsoft.Identity.Client NuGet 包。
有关其他语言的示例,请参阅 https://aka.ms/aaddev。
使用应用 ID 和私钥获取访问令牌
/// <summary>
/// Gets an access token using an app ID and private certificate key.
/// </summary>
/// <param name="tenantId">Directory (tenant) ID, in GUID format</param>
/// <param name="clientId">Application (client) ID</param>
/// <param name="certPath">File path to the certificate file (pfx) used to authenticate your application to Microsoft Entra ID</param>
/// <param name="certPassword">Password to access to the certificate file's private key</param>
public async Task<string> AcquireTokenWithCertificate(string tenantId, string clientId, string certPath, string certPassword)
{
var certificate = new X509Certificate2(certPath, certPassword);
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
.WithCertificate(certificate)
.Build();
var scopes = new string[] { "<API endpoint for INT or PROD>; should be https://api.dfp.microsoft-int.com/.default or https://api.dfp.microsoft.com/.default" };
try
{
var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
return result.AccessToken;
}
catch (MsalServiceException ex)
{
//Handle authentication exceptions
throw ex;
}
}
使用应用 ID 和机密获取访问令牌
/// <summary>
/// Gets an access token using an app ID and secret.
/// </summary>
/// <param name="tenantId">Directory (tenant) ID, in GUID format</param>
/// <param name="clientId">Application (client) ID</param>
/// <param name="clientSecret">The secret (password) used to authenticate the client (application) ID</param>
public async Task<string> AcquireTokenWithSecret(string tenantId, string clientId, string clientSecret)
{
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
.WithClientSecret(clientSecret)
.Build();
var scopes = new string[] { "<API endpoint for INT or PROD>; should be https://api.dfp.microsoft-int.com/.default or https://api.dfp.microsoft.com/.default" };
try
{
var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
return result.AccessToken;
}
catch (MsalServiceException ex)
{
//Handle authentication exceptions
throw ex;
}
}
每个情况下的 AuthenticationResult 对象都包含 AccessToken 值和一个 ExpiresOn 属性,该属性指示令牌何时失效。
POST 请求:
https://login.microsoftonline.com/<Microsoft Entra tenant ID>/oauth2/token
标头:
- Content-type:application/x-www-form-urlencoded
正文(键值):
- grant_type: client_credentials
- client_id:{上一步骤中的客户端 ID}
- client_secret: {上一步的机密}
- 资源:
https://api.dfp.microsoft.com
(对于 int,https://api.dfp.microsoft-int.com
)
响应:
- 使用响应中access_token的值作为下一步。
有关详细信息,请参阅以下 Azure 文档:
调用 API
若要调用 API,请执行以下步骤。
在每个请求上传递以下必需的 HTTP 标头。
标头名称 标头值 授权 对此标头使用以下格式。 (将 accesstoken 替换为 Microsoft Entra ID 返回的实际令牌值。
Bearer accesstoken
x-ms-correlation-id 在一起进行的每组 API 调用上发送新的 GUID 值。 x-ms-dfpenvid 发送实例 ID 的 GUID 值。 生成基于事件的有效负载。 使用系统中的相关信息填写事件数据。 有关所有受支持的事件的文档,请参阅 Dynamics 365 欺诈防护 API。
合并标头(包括访问令牌)和有效负载,然后将其发送到欺诈保护终结点。
POST 请求:
<Base URL>/v1.0/merchantservices/events/purchase
标头:
- x-ms-correlation-id: {A GUID,每个请求必须唯一}
- content-type: application/json
- 授权:{上一步骤中的令牌}
- x-ms-dfpenvid: {目标环境的环境 ID}
正文:
- 从共享 Swagger 页获取示例帐户保护请求正文。
注意
如果创建新环境,请在集成期间在 API 标头中包含环境 ID,以便正确路由事务。
API 调用中的 x-ms-dfpenvid 可以接受以下选项,并且行为相同。
- 对要调用的环境使用环境 ID。 ID 列在“环境 ID”字段中的“集成”页上。
- 使用从根目录到所调用的子环境(使用正斜杠(/)作为分隔符,使用客户 API ID 的完整 pat。 例如 /primary/XYZ。
- 使用从根目录到使用正斜杠(/)作为分隔符调用的子环境的环境 ID 或客户 API ID 的完整路径。 例如, 7b925ca8-d372-4245-bc5a-94b5fdb6c067/XYZ。
若要在创建环境时指定客户 API ID,请参阅文章“ 管理环境”。
最佳做法
- 每个 Microsoft Entra 令牌的有效期为 60 分钟。 建议将其缓存在较短的持续时间内并重复使用。
- 确保 HttpClient 具有保持连接。
- 始终传递 x-ms-dfpenvid 标头,并确保它指向要代表发送交易的商家的环境。
- 将机密存储在机密存储中。
- 始终传递 x-ms-correlation-id 标头,以便将来使用欺诈保护调试会话。
- 确保 x-ms-correlation-id 标头对于发送到欺诈保护的每个事务都是唯一的。
查看示例应用
有关其他参考,可以查看 示例商家应用 和随附的开发人员文档。 示例应用提供了如何调用欺诈保护 API 的示例,包括实时发送客户帐户更新、退款和退款等 API 事件。 每当可能提供此类链接时,示例应用的文档都链接到实际示例代码。 否则,代码示例直接存在于文档中。
有关如何配置示例站点以供使用的指导,请参阅 “配置示例站点”。