You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Web API中Stripe支付API配置、DI集成及密钥无效问题

.NET Core中Stripe SDK配置问题解决指南

一、解决密钥无效问题

针对测试密钥已赋值但创建订阅时提示无效的问题,可按以下步骤排查:

  • 验证资源归属一致性:确保使用的sk_test_xxx测试密钥与price_xxx价格ID属于同一个Stripe测试账号。跨账号的密钥和资源ID组合会直接触发无效错误。
  • 检查密钥完整性:确认StripeConfiguration.ApiKey的赋值内容与Stripe后台复制的测试密钥完全一致,无多余空格、换行或字符截断。
  • 确认配置执行时机:保证StripeConfiguration.ApiKey的赋值操作在所有Stripe服务实例创建之前完成。如果配置代码执行过晚,会导致创建SubscriptionService时使用默认空密钥。
  • 尝试显式传递密钥:若全局配置未生效,可通过显式传入StripeClient的方式验证问题根源:
var stripeClient = new StripeClient(env.STRIPE_API_KEY);
var service = new SubscriptionService(stripeClient);
var subscription = service.Create(options);

二、正确的依赖注入注册方式

在Program.cs中,推荐通过注册IStripeClient单例实例来实现Stripe服务的依赖注入,符合.NET Core的设计规范:

builder.Services.AddSingleton<IStripeClient>(sp =>
{
    var configuration = sp.GetRequiredService<IConfiguration>();
    var apiKey = configuration.GetValue<string>("STRIPE_API_KEY");
    return new StripeClient(apiKey);
});

后续在业务服务中,直接注入IStripeClient并创建对应Stripe服务类即可:

public class SubscriptionManagementService
{
    private readonly IStripeClient _stripeClient;

    public SubscriptionManagementService(IStripeClient stripeClient)
    {
        _stripeClient = stripeClient;
    }

    public async Task<Subscription> CreateUserSubscriptionAsync(YourRequestType request)
    {
        var options = new SubscriptionCreateOptions
        {
            Customer = request.PaymentDetails.CustomerId,
            Items =
            [
                new SubscriptionItemOptions { Price = "price_1Opxxxxxxxx..." }
            ],
        };

        var service = new SubscriptionService(_stripeClient);
        return await service.CreateAsync(options);
    }
}

这种方式的优势:

  • 统一管理StripeClient实例,避免重复创建资源
  • 遵循依赖注入原则,便于单元测试和服务扩展
  • 可灵活添加自定义配置(如日志、HttpClient设置等)

内容的提问来源于stack exchange,提问作者Choco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:42:11