Quickbooks API - 如何使用存储的信用卡创建费用
Quickbooks API - How to create a charge using stored credit card
我想知道如何使用已存储的信用卡创建费用。
使用 /card api 我已成功将卡片存储在 QuickBooks Online 中并在 return 中收到了卡片 ID。
现在我想对存储的卡进行收费。对于创建费用,我看到有 2 种方法可以提供卡的详细信息。
- 提供明确的卡详细信息,如卡号、有效期等
- 通过使用卡片令牌。但即使是为了检索卡令牌,我们也需要向 /tokens api 调用提供明确的卡详细信息。
我尝试使用卡的 ID 检索存储的卡,然后在 Charge 中使用 returned 卡的详细信息,但没有成功。
所以我想知道如何使用存储的信用卡创建费用,而不需要每次都提供明确的卡详细信息。
UPDATE
我已尝试按照测试代码进行操作,但出现 'card.number is invalid' 错误。
public Charge createCharge(Context context, String requestId) {
String uri = "https://sandbox.api.intuit.com/quickbooks/v4/payments/charges";
PaymentService paymentService = new PaymentService();
Charge charge = new Charge();
CreditCard card = null;
try {
card = paymentService.getCreditCard(context, getRequestId(), "https://sandbox.api.intuit.com/quickbooks/v4/customers/{customer_id}/cards/{card_id}");
} catch (Exception e) {
e.printStackTrace();
}
charge.setCard(card);
charge.setAmount(new BigDecimal(10.55));
charge.setCurrency("USD");
try {
charge = paymentService.createCharge(context, getRequestId(), charge, uri);
return charge;
} catch (Exception e) {
}
}
Error com.intuit.ipp.exception.BadRequestException: ERROR CODE:PMT-4000, ERROR MESSAGE:card.number is invalid., ERROR DETAIL:card.number, MORE ERROR DETAIL:HttpStatusCode=400; Type=invalid_request; MoreInfo=Credit/Debit card number format, InfoLink=https://developer.intuit.com/v2/docs?redirectID=PayErrors
我使用卡 ID 检索的卡中的卡号(显然)被混淆了,格式为 "xxxxxxxxxxxx1111",因此 /charges api 抱怨它无效。
使用此 API 端点存储卡详细信息 ("create a card"):
您会得到一个唯一的 id
值。
使用此 API 端点创建费用:
确保为 cardOnFile
传递从第一个 API 调用返回的 id
值。
您当前的代码不正确。在您应该将 cardOnFile
作为参数传递的地方,您传递的是 card
节点(它需要完整的卡号,而不是卡 id
值)。具体来说,这一行是不正确的:
charge.setCard(card);
我想知道如何使用已存储的信用卡创建费用。
使用 /card api 我已成功将卡片存储在 QuickBooks Online 中并在 return 中收到了卡片 ID。
现在我想对存储的卡进行收费。对于创建费用,我看到有 2 种方法可以提供卡的详细信息。
- 提供明确的卡详细信息,如卡号、有效期等
- 通过使用卡片令牌。但即使是为了检索卡令牌,我们也需要向 /tokens api 调用提供明确的卡详细信息。
我尝试使用卡的 ID 检索存储的卡,然后在 Charge 中使用 returned 卡的详细信息,但没有成功。
所以我想知道如何使用存储的信用卡创建费用,而不需要每次都提供明确的卡详细信息。
UPDATE
我已尝试按照测试代码进行操作,但出现 'card.number is invalid' 错误。
public Charge createCharge(Context context, String requestId) {
String uri = "https://sandbox.api.intuit.com/quickbooks/v4/payments/charges";
PaymentService paymentService = new PaymentService();
Charge charge = new Charge();
CreditCard card = null;
try {
card = paymentService.getCreditCard(context, getRequestId(), "https://sandbox.api.intuit.com/quickbooks/v4/customers/{customer_id}/cards/{card_id}");
} catch (Exception e) {
e.printStackTrace();
}
charge.setCard(card);
charge.setAmount(new BigDecimal(10.55));
charge.setCurrency("USD");
try {
charge = paymentService.createCharge(context, getRequestId(), charge, uri);
return charge;
} catch (Exception e) {
}
}
Error com.intuit.ipp.exception.BadRequestException: ERROR CODE:PMT-4000, ERROR MESSAGE:card.number is invalid., ERROR DETAIL:card.number, MORE ERROR DETAIL:HttpStatusCode=400; Type=invalid_request; MoreInfo=Credit/Debit card number format, InfoLink=https://developer.intuit.com/v2/docs?redirectID=PayErrors
我使用卡 ID 检索的卡中的卡号(显然)被混淆了,格式为 "xxxxxxxxxxxx1111",因此 /charges api 抱怨它无效。
使用此 API 端点存储卡详细信息 ("create a card"):
您会得到一个唯一的 id
值。
使用此 API 端点创建费用:
确保为 cardOnFile
传递从第一个 API 调用返回的 id
值。
您当前的代码不正确。在您应该将 cardOnFile
作为参数传递的地方,您传递的是 card
节点(它需要完整的卡号,而不是卡 id
值)。具体来说,这一行是不正确的:
charge.setCard(card);