Stripe API - 收据清单

时间:2014-06-20 20:35:10

标签: rest stripe-payments

我正在使用Stripe API,我想向客户提供他们的发票历史列表以及相关的收据。

我无法在Stripe API(https://stripe.com/docs/api?lang=php)中找到任何可以获取客户收据列表的地方。有什么我想念的吗?

3 个答案:

答案 0 :(得分:0)

Each invoice includes a charge property,其中包含最后一次充电的ID。这将是当前/最终付款尝试(对于未成功支付的发票)或成功付款(对于付款发票)。

这使您可以轻松使用费用和发票数据向用户显示收据,但“收据”本身更像是应用程序方面的概念;它的需求和表现因应用而异。

获得数据后,您可以随意提交收据。

理想情况下,我建议在本地缓存这些记录。如果您正在接收webhook,这几乎是无痛的。然后,您可以建模(并搜索!)最符合您需求的本地收据记录,然后您的客户可以获得快速计费显示的好处,并且我们都可以从Stripe的API端点上获得更少的负载。

答案 1 :(得分:0)

真的不会太难。首先,您将获得所有发票:

https://stripe.com/docs/api?lang=php#invoice_object https://stripe.com/docs/api?lang=php#list_customer_invoices

每张发票都有一个“客户”属性,因此您只需在其中搜索具有与您的客户ID匹配的客户ID的发票。

每张发票都有一个“receipt_number”属性,所以你应该好好去!

答案 2 :(得分:0)

我能够在 Java 和 Apache IO/Lang 库中以一种稍微有点hacky 的方式做到这一点。

<块引用>

注意 - 此解决方案使用 Java,但总体思路在任何其他语言中都应该很容易使用。

我在 pom.xml 文件中添加了以下内容:-

  <dependencies>

    <dependency>
      <groupId>com.stripe</groupId>
      <artifactId>stripe-java</artifactId>
      <version>19.24.0</version>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.10.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.12.0</version>
    </dependency>

    ...

  </dependencies>

步骤如下:-

  1. 使用 Stripe API 返回费用对象列表(参考 https://stripe.com/docs/api/charges/list)。
  2. 迭代每个收费对象并记下 receipt_url(参考 https://stripe.com/docs/api/charges/object)。
  3. 将收据页面 (HTML) 下载到 String,例如使用 IOUtils.toString
  4. 提取收据下载网址(其中包含 invrc_xxx,例如 https://dashboard.stripe.com/emails/receipts/invrc_NmIZClQPPEELg1J0QvNJ6sJQ/pdf)。我使用了一个基本的 StringUtils.substringBetween 调用来提取它。 <块引用>

    注意: 将 HTML 页面转换为 XML 并通过 XPath 提取 会更专业。

  5. 使用例如在本地下载此 URL 为 PDF FileUtils.copyURLToFile

代码如下:-

import com.stripe.Stripe;
import com.stripe.model.Charge;
import com.stripe.model.ChargeCollection;
import com.stripe.param.ChargeListParams;

import java.io.File;
import java.net.URL;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

public class StripeReceiptDownloader {

    public static void main(String[] args) throws Exception {
        if (args.length != 1) {
            System.out.println("Missing Stripe API key");
            System.exit(-1);
        }
        Stripe.apiKey = args[0];

        File downloadFolder = new File("stripe-receipts");

        // Return a list of charges and loop through each
        ChargeCollection charges = Charge.list(ChargeListParams.builder().setLimit(3L).build());
        for (Charge charge : charges.getData()) {

            // Download HTML page from receipt_url in charge object
            String receiptPageContents = IOUtils.toString(new URL(charge.getReceiptUrl()));

            // Extract invcrc ID 
            String invrcId = StringUtils.substringBetween(receiptPageContents, "invrc_", "/pdf");
            String receiptPdfDownload = "https://dashboard.stripe.com/emails/receipts/invrc_" + invrcId + "/pdf";

            String filename = invrcId + ".pdf";   // you could also use fields from charge object to give better context to filename
            File receiptFile = new File(downloadFolder, filename);

            System.out.println("Downloading [ " + receiptPdfDownload + " ] to [ " + receiptFile + " ]");
            FileUtils.copyURLToFile(new URL(receiptPdfDownload), receiptFile);
        }
    }

}

这会将收据下载到指定的文件夹并输出如下内容:-

Downloading [ https://dashboard.stripe.com/emails/receipts/invrc_1J2lQPQvELg6sNJNmIZECPJQ/pdf ] to [ stripe-receipts\1J2lQPQvELg6sNJNmIZECPJQ.pdf ]
Downloading [ https://dashboard.stripe.com/emails/receipts/invrc_1ItqEg6L62JELNmIZDMzBrY7/pdf ] to [ stripe-receipts\1ItqEg6L62JELNmIZDMzBrY7.pdf ]
Downloading [ https://dashboard.stripe.com/emails/receipts/invrc_1IzmM1aJNIZ6fTEELgt07wYW/pdf ] to [ stripe-receipts\1IzmM1aJNIZ6fTEELgt07wYW.pdf ]