gpt4 book ai didi

java - Android Studio 中的 Stripe 集成

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:37 26 4
gpt4 key购买 nike

我正在努力将 Stripe 支付网关集成到我正在开发的 Android 应用程序中。我已按照 https://stripe.com/docs/mobile/android 上列出的步骤进行操作.

当我尝试创建新卡片时出现错误。

我在我的 Activity 中运行它

saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Card card = new Card(
// Get values from the form
cardNumber.getText().toString(),
getInteger(monthSpinner),
getInteger(yearSpinner),
cvc.getText().toString()
);
}
});

它使用 Card 模型。

卡片模型

package com.stripe.android.model;

import com.stripe.android.util.DateUtils;
import com.stripe.android.util.TextUtils;

public class Card extends com.stripe.model.StripeObject {
String number;
String cvc;
Integer expMonth;
Integer expYear;
String name;
String addressLine1;
String addressLine2;
String addressCity;
String addressState;
String addressZip;
String addressCountry;
String last4;
String type;
String fingerprint;
String country;

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public String getCVC() {
return cvc;
}

public void setCVC(String cvc) {
this.cvc = cvc;
}

public Integer getExpMonth() {
return expMonth;
}

public void setExpMonth(Integer expMonth) {
this.expMonth = expMonth;
}

public Integer getExpYear() {
return expYear;
}

public void setExpYear(Integer expYear) {
this.expYear = expYear;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAddressLine1() {
return addressLine1;
}

public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}

public String getAddressLine2() {
return addressLine2;
}

public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}

public String getAddressCity() {
return addressCity;
}

public void setAddressCity(String addressCity) {
this.addressCity = addressCity;
}

public String getAddressZip() {
return addressZip;
}

public void setAddressZip(String addressZip) {
this.addressZip = addressZip;
}

public String getAddressState() {
return addressState;
}

public void setAddressState(String addressState) {
this.addressState = addressState;
}

public String getAddressCountry() {
return addressCountry;
}

public void setAddressCountry(String addressCountry) {
this.addressCountry = addressCountry;
}

public String getLast4() {
if (!TextUtils.isBlank(last4)) {
return last4;
}
if (number != null && number.length() > 4) {
return number.substring(number.length() - 4, number.length());
}
return null;
}

public String getType() {
if (TextUtils.isBlank(type) && !TextUtils.isBlank(number)) {
if (TextUtils.hasAnyPrefix(number, "34", "37")) {
return "American Express";
} else if (TextUtils.hasAnyPrefix(number, "60", "62", "64", "65")) {
return "Discover";
} else if (TextUtils.hasAnyPrefix(number, "35")) {
return "JCB";
} else if (TextUtils.hasAnyPrefix(number, "30", "36", "38", "39")) {
return "Diners Club";
} else if (TextUtils.hasAnyPrefix(number, "4")) {
return "Visa";
} else if (TextUtils.hasAnyPrefix(number, "5")) {
return "MasterCard";
} else {
return "Unknown";
}
}
return type;
}

public String getFingerprint() {
return fingerprint;
}

public String getCountry() {
return country;
}

public Card(String number, Integer expMonth, Integer expYear, String cvc, String name, String addressLine1, String addressLine2, String addressCity, String addressState, String addressZip, String addressCountry, String last4, String type, String fingerprint, String country) {
this.number = TextUtils.nullIfBlank(normalizeCardNumber(number));
this.expMonth = expMonth;
this.expYear = expYear;
this.cvc = TextUtils.nullIfBlank(cvc);
this.name = TextUtils.nullIfBlank(name);
this.addressLine1 = TextUtils.nullIfBlank(addressLine1);
this.addressLine2 = TextUtils.nullIfBlank(addressLine2);
this.addressCity = TextUtils.nullIfBlank(addressCity);
this.addressState = TextUtils.nullIfBlank(addressState);
this.addressZip = TextUtils.nullIfBlank(addressZip);
this.addressCountry = TextUtils.nullIfBlank(addressCountry);
this.last4 = TextUtils.nullIfBlank(last4);
this.type = TextUtils.nullIfBlank(type);
this.fingerprint = TextUtils.nullIfBlank(fingerprint);
this.country = TextUtils.nullIfBlank(country);
}

public Card(String number, Integer expMonth, Integer expYear, String cvc, String name, String addressLine1, String addressLine2, String addressCity, String addressState, String addressZip, String addressCountry) {
this(number, expMonth, expYear, cvc, name, addressLine1, addressLine2, addressCity, addressState, addressZip, addressCountry, null, null, null, null);
}

public Card(String number, Integer expMonth, Integer expYear, String cvc) {
this(number, expMonth, expYear, cvc, null, null, null, null, null, null, null, null, null, null, null);
this.type = getType();
}

public boolean validateCard() {
if (cvc == null) {
return validateNumber() && validateExpiryDate();
} else {
return validateNumber() && validateExpiryDate() && validateCVC();
}
}

public boolean validateNumber() {
if (TextUtils.isBlank(number)) {
return false;
}

String rawNumber = number.trim().replaceAll("\\s+|-", "");
if (TextUtils.isBlank(rawNumber)
|| !TextUtils.isWholePositiveNumber(rawNumber)
|| !isValidLuhnNumber(rawNumber)) {
return false;
}

if (!"American Express".equals(type) && rawNumber.length() != 16) {
return false;
}

if ("American Express".equals(type) && rawNumber.length() != 15) {
return false;
}

return true;
}

public boolean validateExpiryDate() {
if (!validateExpMonth()) {
return false;
}
if (!validateExpYear()) {
return false;
}
return !DateUtils.hasMonthPassed(expYear, expMonth);
}

public boolean validateExpMonth() {
if (expMonth == null) {
return false;
}
return (expMonth >= 1 && expMonth <= 12);
}

public boolean validateExpYear() {
if (expYear == null) {
return false;
}
return !DateUtils.hasYearPassed(expYear);
}

public boolean validateCVC() {
if (TextUtils.isBlank(cvc)) {
return false;
}
String cvcValue = cvc.trim();

boolean validLength = ((type == null && cvcValue.length() >= 3 && cvcValue.length() <= 4) ||
("American Express".equals(type) && cvcValue.length() == 4) ||
(!"American Express".equals(type) && cvcValue.length() == 3));


if (!TextUtils.isWholePositiveNumber(cvcValue) || !validLength) {
return false;
}
return true;
}

private boolean isValidLuhnNumber(String number) {
boolean isOdd = true;
int sum = 0;

for (int index = number.length() - 1; index >= 0; index--) {
char c = number.charAt(index);
if (!Character.isDigit(c)) {
return false;
}
int digitInteger = Integer.parseInt("" + c);
isOdd = !isOdd;

if (isOdd) {
digitInteger *= 2;
}

if (digitInteger > 9) {
digitInteger -= 9;
}

sum += digitInteger;
}

return sum % 10 == 0;
}

private String normalizeCardNumber(String number) {
if (number == null) {
return null;
}
return number.trim().replaceAll("\\s+|-", "");
}
}

这是我遇到的错误。

enter image description here

这对我来说是新的。我该怎么做才能解决这个问题?

最佳答案

由于这是 Google 搜索“如何将 Stripe 集成到 Android Studio”的热门话题,并且由于 Android Studio 删除了导入模块,这就是我解决导入的方法。

  • 右键单击项目并选择 > 新建 > 模块
  • 在您的目录中,将 Stripe > Stripe 文件夹下的内容复制到模块文件夹(您应该会看到一个新创建的文件夹。删除这个新文件夹的内容并粘贴 Stripe > Stripe 的内容)
  • 返回 Android Studio 导航到 src 下的 build.gradle,在 dependencies 下添加 compile project(":stripe")。
  • 刷新你的gradle。

编辑 1自发布此答案以来,发生了一些变化。如果您希望将 strip 添加到您的项目中,请通过 Maven 进行。只需将此行添加到您应用的 build.gradle 中的依赖项部分:

compile 'com.stripe:stripe-android:2.0.2'

EDIT 2 现在是实现而不是编译。

implementation 'com.stripe:stripe-android:6.1.2'

您可以在此处获得更多详细信息:https://stripe.com/docs/mobile/android

关于java - Android Studio 中的 Stripe 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20910451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com