Streifen-Integration in Android Studio
Ich arbeite an der Integration der Stripe Zahlungs-gateway in eine Android-app, die ich entwickle. Ich folgte den Schritten auf https://stripe.com/docs/mobile/android.
Wenn ich versuche, erstellen Sie eine neue Karte bekomme ich Fehler.
Ich dieses in meine Tätigkeit
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()
);
}
});
Verwendet die Karte model.
Karte Modell
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+|-", "");
}
}
Dies ist der Fehler, bin ich immer.
Dies ist mir neu. Was kann ich tun, um dieses Problem beheben?
Sind Sie sicher, dass Sie mit der rechten
Ich habe gedacht, dass. Ich glaube, dass der import korrekt ist.
Bitte nicht einfügen einen riesigen code dump des Abschnitts, der hat nichts zu tun mit der Frage. Was wir müssen, um zu sehen, sind die Konstruktor(en) für
Ihr Kommentar scheint unnötig hart. Wie viele Male muss ein poster bekommen gezüchtigt, für die nicht genug details? Und, in jedem Fall, den code und screenshot sagte mir, dass ich gefunden hatte genau das gleiche problem ich versuche zu lösen. Natürlich, nach, dass, es dauerte eine Stunde harte Arbeit, um zu versuchen, eine ganze Reihe von Optionen vorgeschlagen, unter und anderswo und dann, endlich, stolpern auf die 30-Sekunden-Korrektur. (Siehe meine Antwort weiter unten.)
ich mache das gleiche, ich habe einen Zweifel, nachdem man die token, wo die Zahlung geleistet werden, die entweder von client-Seite oder server-Seite
Card
Umsetzung? Zum Beispiel, haben Sie die richtige import
? Sie haben einen Konstruktor in dem obigen code, erscheinen würde, zu entsprechen, die parameter-Liste, was darauf schließen lässt, dass Ihre IDE ist, denken einige andere Card
.Ich habe gedacht, dass. Ich glaube, dass der import korrekt ist.
Bitte nicht einfügen einen riesigen code dump des Abschnitts, der hat nichts zu tun mit der Frage. Was wir müssen, um zu sehen, sind die Konstruktor(en) für
Card
und die tatsächlichen Einfuhren für Ihre Tätigkeit.Ihr Kommentar scheint unnötig hart. Wie viele Male muss ein poster bekommen gezüchtigt, für die nicht genug details? Und, in jedem Fall, den code und screenshot sagte mir, dass ich gefunden hatte genau das gleiche problem ich versuche zu lösen. Natürlich, nach, dass, es dauerte eine Stunde harte Arbeit, um zu versuchen, eine ganze Reihe von Optionen vorgeschlagen, unter und anderswo und dann, endlich, stolpern auf die 30-Sekunden-Korrektur. (Siehe meine Antwort weiter unten.)
ich mache das gleiche, ich habe einen Zweifel, nachdem man die token, wo die Zahlung geleistet werden, die entweder von client-Seite oder server-Seite
InformationsquelleAutor localhost | 2014-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da dies ein top-Treffer bei der Google-Suche für "Wie integrieren Streifen zu Android Studio" und seit Android studio entfernt das import-Modul das ist, wie ich das gelöst importieren.
BEARBEITEN 1
Da dieses posting eine Antwort, die einige Veränderungen gegeben. Wenn Sie möchten, fügen Sie Streifen in Ihr Projekt mittels Maven. Fügen Sie einfach diese Zeile, um Ihre app zu bauen.gradle innerhalb der Abhängigkeiten Abschnitt:
EDIT 2 Es ist jetzt die Umsetzung-und nicht kompilieren.
Mehr details erfahren Sie hier : https://stripe.com/docs/mobile/android
InformationsquelleAutor Kennedy Nyaga
Okay, also ich glaube an das, was passiert ist, dass du keinen Zugriff auf die richtige Karte () - Konstruktor, weil Sie nicht die Dinge richtig.
Gehen Sie auf die github-Seite und download-link [für die Bibliothek]https://github.com/stripe/stripe-android. Entpacken Sie den Ordner und halten Sie Sie griffbereit.
Gehen Sie nun in android studio und klicken Sie auf "import-module'. Navigieren Sie in die stripe-android-Verzeichnis, das Sie soeben entpackt haben, und klickt auf OK. Stellen Sie sicher, dass Sie nur 'Streifen' überprüft beim Import, und nicht 'B.' (nur 'Beispiel' wird standardmäßig aktiviert werden: dieses Problem beheben.)
Kopieren (jar-Datei) stripe-java-1.12.0.jar zu dem Verzeichnis :Bibliotheken in Ihr Projekt, wo Sie würde haben andere Bibliotheken). Dass (jar-Datei) sollte zeigen, bis unter die neue 'Streifen' - Verzeichnis in android studio.
Gehen Sie in das src-Verzeichnis und finden Sie Ihre app zu bauen.gradle. Sie gehen zu wollen, fügen Sie unter Abhängigkeiten:
Projekt kompilieren(":stripe")
Kann es zu einem Fehler an einem gewissen Punkt zu sagen, dass Sie benötigen eine neuere version des build-tools zum erstellen des Projekts. Wenn das so ist, starten Sie einfach durchstöbern, die gradle-Dateien und ändern der zahlen, bis es aufbaut. Das ist, was ich tun zumindest.
Hoffe, das hilft!
(p.s: denken Sie daran, com.Streifen.android.* und nicht com.Streifen -.*!)
Edit: Gerade lief in ein neues problem, und es stellt sich heraus, sollten Sie Schritt 3 überspringen. Es werden Ursache dex freak out, die der gleichen Klasse definiert wird, die in der gleichen (jar-Datei) zweimal aus. Also tun Sie es nicht.
InformationsquelleAutor user3749398
Wenn du nicht mit Gradle dann unten ist, wie ich es geschafft habe:
InformationsquelleAutor Kyle Venn
Ich hatte gerade genau das gleiche problem wie der OP. Ich war beim Import einiger Variante des Streifen-code, aber nicht die der multi-argument-Konstruktor oder eine der spezifischen Methoden, die ich suchte, also ich war ganz klar nicht importieren, was ich wollte/brauchte.
Ich habe versucht, viele der Import-Modul oder Bibliothek Hinzufügen Beschwörungen gefunden, die hier oder anderswo. Schließlich aufgeben, bis ich versuchte, die verzweifelten aller Maßnahmen: RTFM. Oder, in diesem Fall die README.md, kam mit dem Projekt, das ich heruntergeladen.
Gibt es für Android-Studio-Benutzer, war die triviale Lösung, die eigentlich für mich gearbeitet:
Es funktionierte wie ein Charme.
Ironischerweise, Sie müssen nicht zum download oder clone VERWENDEN Sie die Bibliothek, aber so weit ich weiß nur einen Weg, um die README-Datei.md ist, um die Bibliothek herunterladen-Dateien von hier:
https://stripe.com/docs/mobile/android
VORBEHALT: ich schrieb oben, sobald Android Studio gestartet importieren der Bibliothek Recht und meine IDE-Kompilierungs-Fehler ging Weg. Aber sobald ich versuchte, Sie zu bauen und mein code, ich lief, den Kopf in die mehrere dex-horror für, glaube ich, ziehen Sie mehrere Kopien der gson-Bibliothek, die Streifen hängt und mein code bereits verwendet wird. Seufz. Ich HABE das problem beheben, durch das entfernen meiner lokalen Kopie der gson-Glas und, wie ich annehme, der je auf der einen befindet sich mit der Streifen-Paket. Nur das löschen aller bin/intermediate/generated Ordner war nicht gut genug. Ich bin nicht wirklich glücklich mit dieser Lösung, aber kann damit Leben jetzt.
InformationsquelleAutor Anne Gunn
gut zu verwenden, Streifen Sie nicht brauchen, um nichts herunterladen von github oder Stripe.com.
Hier ist, wie ich es mache.
Da kann ich nicht post-image (mit nur 1 Ruf), seine destribed wie folgt:
1. Mit der rechten Maustaste auf Ihr Projekt
2. klicken Sie auf " Öffnen Modul-Einstellungen
3. Klicken Sie auf Abhängigkeiten
4. klicken Sie auf hinzufügen
5. klicken Sie auf wählen Sie " Bibliothek-Abhängigkeiten
6. input "Streifen"
7. klicken Sie auf suchen
8. klicken Sie auf com.Streifen:Streifen.android 1.0.0
9. klicken Sie auf OK.
InformationsquelleAutor Kai Wang
diese, die tatsächlichen und formalen parameter sind, die nicht zusammenpassen.
Dank
InformationsquelleAutor Milind
Für alle diejenigen, die nicht finden konnte, ein Update mit den oben Antworten.Hier ist, was ich getan habe, als ich vor der gleichen situation.
Hoffe das das Problem behebt.Dank
InformationsquelleAutor Abhinav Pawar