我正在使用Stripe API,我想向客户提供他们的发票历史列表以及相关的收据。
我无法在Stripe API(https://stripe.com/docs/api?lang=php)中找到任何可以获取客户收据列表的地方。有什么我想念的吗?
答案 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>
步骤如下:-
receipt_url
(参考 https://stripe.com/docs/api/charges/object)。String
,例如使用 IOUtils.toStringinvrc_xxx
,例如 https://dashboard.stripe.com/emails/receipts/invrc_NmIZClQPPEELg1J0QvNJ6sJQ/pdf)。我使用了一个基本的 StringUtils.substringBetween 调用来提取它。
<块引用>
注意: 将 HTML 页面转换为 XML 并通过 XPath 提取 会更专业。
代码如下:-
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 ]