【问题标题】:Invoicer PDF gives null but Membership does not give PDF null发票人 PDF 给出 null 但会员资格不给出 PDF null
【发布时间】:2021-06-03 05:07:53
【问题描述】:

我现在的问题。这是我必须使客户可以购买只支付一次的物品。因此将 Invoice id 和 PDf 分配给数据库。

现在我只能在 PDF 为空时获取发票 ID。

我已经阅读了更多关于此的内容。 Invoice Id return with null after change using Stripe

var options = new ProductCreateOptions
{
    Name = "Starter Setup",
};

var service = new ProductService();
var product = service.Create(options);

var optionsA = new PriceCreateOptions
{
    Product = product.Id,
    UnitAmount = 2000,
    Currency = "usd",
};

var serviceA = new PriceService();
var price = serviceA.Create(optionsA);

var optionsB = new CustomerCreateOptions
{
    Email = model.Mail,
    Name = model.FuldName,
    Source = token
};

var serviceB = new CustomerService();
var customer = serviceB.Create(optionsB);

var optionsC = new InvoiceItemCreateOptions
{
    Customer = customer.Id,
    Price = price.Id,
};

var serviceC = new InvoiceItemService();
var invoiceItem = serviceC.Create(optionsC);

var invoiceId = invoiceItem.Id;

var serviceE = new InvoiceService();
var f = serviceE.Get(invoiceId);

var pdf = f.InvoicePdf;// This here gives zero.

如果我这样做,我会解决这个问题。我在这里得到了我想要的发票 ID,但发票上没有显示它为零。

{
"id": "ii_1IR4UtFnB7TvDVRrzPwWo8ZW",
  "object": "invoiceitem",
  "amount": 2000,
  "currency": "usd",
  "customer": "cus_J3Aqpyt4PwqCcN",
  "date": 1614815575,
  "description": "Starter Setup",
  "discountable": true,
  "discounts": [
  ],
  "invoice": null,
  "livemode": false,
  "metadata": {
  },
....
}

有了这个,我的想法是我是否能够以某种方式使我成为会员,然后立即停止,但发票上说购买的只是一件物品,而不是几个月。

我这样做的方式与我这样做的会员资格有关。

var createCustomer = new CustomerCreateOptions
{
    Source = token,
    Name = model.FuldName,
    Email = model.Mail
};

var addService = new CustomerService();
var customer = addService.Create(createCustomer);

var optionsProduct = new ProductCreateOptions
{
    Name = $"Single buy - {DateTime.Now} - Kursus Id : {id}",
    Type = "service",
};
var serviceProduct = new ProductService();
Product product = serviceProduct.Create(optionsProduct);

var optionsPlan = new PlanCreateOptions
{
    Currency = "dkk",
    Interval = Helpers.Stripe.interval,
    Nickname =
        $"Single buy - {DateTime.Now} - Kursus Id : {id}",
    Amount = amount,
    Product = product.Id,
    IntervalCount = 1
};
var servicePlan = new PlanService();
Plan plan = servicePlan.Create(optionsPlan);

var items = new List<SubscriptionItemOptions>()
{
    new SubscriptionItemOptions()
    {
        Plan = plan.Id,
        Quantity = 1
    },
};
var createSubscruptionA = new SubscriptionCreateOptions
{
    Customer = customer.Id,
    Items = items,
    OffSession = true,
};
var addserviceA = new SubscriptionService();
Subscription subscription = addserviceA.Create(createSubscruptionA);

var invoiceId = subscription.LatestInvoiceId;
var service = new InvoiceService();
var pdf = service.Get(invoiceId).InvoicePdf;

我想通过这个实现的。我可以获取 PDF 和 Invoice id,因为我将来会在我的系统中使用它等。

编辑

var optionsB = new CustomerCreateOptions
{
    Email = model.Mail,
    Name = model.FuldName,
    Source = token
};

var serviceB = new CustomerService();
var customer = serviceB.Create(optionsB);

var optionsC = new InvoiceItemCreateOptions
{
    Customer = customer.Id,
    Price = price.Id,
};

var serviceC = new InvoiceItemService();
var invoiceItem = serviceC.Create(optionsC);

var invoiceId = invoiceItem.Id;

var invoiceOptions = new InvoiceCreateOptions
{
    Customer = customer.Id,
    AutoAdvance = true,
};
var invoiceService = new InvoiceService();
var invoice = invoiceService.Create(invoiceOptions);

【问题讨论】:

    标签: c# stripe-payments


    【解决方案1】:

    对于一次性发票,您需要为客户创建发票项目(正如您所做的那样),但重要的是,您需要 create an Invoice 包含这些项目。

    此行不适合您要完成的工作:

    var invoiceId = invoiceItem.Id;
    

    相反,您需要按照上面链接的文档中所示创建发票:

    var invoiceOptions = new InvoiceCreateOptions
    {
      Customer = "cus_123",
      AutoAdvance = true,
    };
    var invoiceService = new InvoiceService();
    var invoice = invoiceService.Create(invoiceOptions);
    

    在您finalize 之后,Invoice 对象将有一个invoice_pdf URL (docs)。

    var service = new InvoiceService();
    service.FinalizeInvoice(
      "in_123"
    );
    

    【讨论】:

    • 好的,当我尝试按照您告诉我的操作时,我收到一条错误消息,提示“无需为客户开具发票”-stripe.com/docs/error-codes/invoice-no-customer-line-items
    • 是的,您需要先创建发票项目,然后为同一客户创建发票。
    • 好的@nolan H。我已经更新/编辑了我的代码。所以你可以看到我做了什么。还是我误解了它的原理?
    • 好的,现在结果如何?它在工作吗?如果没有,会发生什么?
    • 发票项目创建成功了吗?您是否查看过您的开发人员日志以查看它是成功还是返回了错误? dashboard.stripe.com/test/logs
    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2021-08-21
    • 2018-01-30
    相关资源
    最近更新 更多