无需为订阅开具发票 - 在审核购买时创建发票

Posted

技术标签:

【中文标题】无需为订阅开具发票 - 在审核购买时创建发票【英文标题】:Nothing to invoice for subscription - create an invoice when the purchase is reviewed 【发布时间】:2021-06-01 12:08:30 【问题描述】:

现在我正在尝试在审核购买后创建发票。

如果客户购买了会员资格,我希望将发票 ID 分配给我的数据库,因为 webhook 能够通过链接将 pdf 发票分配给数据库。

当我尝试在代码中最后生成发票时。然后我不幸遇到了这个错误。

无需为订阅开具发票

Stripe Error link

当我查看 Stripe 日志时,这来自错误。

   
      "error": 
        "code": "invoice_no_subscription_line_items",
        "doc_url": "https://stripe.com/docs/error-codes/invoice-no-subscription-line-items",
        "message": "Nothing to invoice for subscription",
        "param": "subscription",
        "type": "invalid_request_error"
      
    

因此,我的请求 POST 正文是这样的:


  "customer": "cus_J2ltIOWhr2BSGX",
  "subscription": "sub_J2lto4EVvcfToq"

在这里你可以看到我如何发布请求到条带。

var createCustomer = new CustomerCreateOptions

    Source = token,
    Name = model.FuldName,
    Email = model.Mail
;

var addService = new CustomerService();
var customer = await addService.CreateAsync(createCustomer);

var optionsProduct = new ProductCreateOptions

    Name = $"Membership - DateTime.Now",
    Type = "service",
;
var serviceProduct = new ProductService();
Product product = await serviceProduct.CreateAsync(optionsProduct);

var optionsA = new PriceCreateOptions

    UnitAmount = amount,
    Currency = "dkk",
    Recurring = new PriceRecurringOptions
    
        Interval = Helpers.Stripe.interval,
    ,
    Product = product.Id,
;
var serviceA = new PriceService();
var price = await serviceA.CreateAsync(optionsA);

var options = new SubscriptionCreateOptions

    Customer = customer.Id,
    Items = new List<SubscriptionItemOptions>
    
        new SubscriptionItemOptions
        
            Price = price.Id,
        ,
    ,
;
var service = new SubscriptionService();
var subscription = await service.CreateAsync(options);

var optionsI = new InvoiceCreateOptions

    Customer = customer.Id,
    Subscription = subscription.Id
;
var serviceI = new InvoiceService();
var invoice = await serviceI.CreateAsync(optionsI);//I NEED INVOICE ID FROM HERE!

我试着看这里。

Adding shipping to first subscription invoice using stripe

EIDT:

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

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

                        var options = new ChargeCreateOptions
                        
                            Amount = amount,
                            Currency = "dkk",
                            Description = $"Købt kursus DateTime.Now",
                            Customer = customer.Id,
                        ;
                        var service = new ChargeService();
                        Charge charge = service.Create(options);

【问题讨论】:

【参考方案1】:

如果您使用订阅,系统会根据结算周期为您自动生成发票。

如果打印出刚刚创建的 Subscription 对象,您可以在 latest_invoice 下找到 Invoice ID。

-- 关于一次性付款的更新--

费用和发票是 Stripe API 中的两个独立概念。收费非常简单,其唯一目的是创建和付款。发票更复杂,并且除了付款之外还具有附加功能(行项目、自动功能、税收等)。任何一个都可以使用,但这实际上取决于您的业务需求。

如果您想使用发票进行一次性付款,则需要更改您的代码来创建它们(请参阅https://stripe.com/docs/api/invoices/create)。您的代码目前仅适用于 Charges - 这些不是 Stripe 的计费产品的一部分,不会自动生成发票。

【讨论】:

omg...很好,感谢您的帮助!祝你有美好的一天! 您是否知道,例如,您是否也使用过收费。如何获取您的发票 ID?我将它用于客户必须能够支付一次且仅一次。 :) 您是在创建费用还是一次性发票?我问是因为仅创建费用不会生成发票。 好的,这意味着我必须以相同的方式进行操作,并在设置中进行一些更改或什么? @karbi :) 如果您总是需要发票,您应该创建一次性发票而不是费用。这里有一个简短的指南:stripe.com/docs/billing/invoices/create

以上是关于无需为订阅开具发票 - 在审核购买时创建发票的主要内容,如果未能解决你的问题,请参考以下文章

普通增值税发票会计科目怎么写?

laravel spark中如何创建本地发票?

普通发票怎样记帐?税款应计入哪个会计科目?

PayPal 订阅 - 缺少 PDT 发票

对方开来的抵扣联发票与送货单上的不符,还有采购订单数量金额与送货单也不符合怎么办?

开具增值税发票建造者模式 + 原型模式