2016-04-30 4 views
1

Zunächst einmal, bitte verzeih mir, wenn dies als vage angesehen wird, dies ist meine erste Zeit bei Stack Exchange.

Hoffentlich ist dies keine schlechte Frage, ich habe darüber nachgedacht, obwohl es Vertrautheit mit CURL, Stripe und Angular voraussetzt.

Auf das Problem:

Ich versuche, die Ergebnisse einer CURL an den Stripe-API mit Angularjs von $ http und mit etwas Mühe dabei neu zu erstellen.

Mit CURL, ich bin in der Lage eine Karte Token zu erstellen, wie folgt:

curl -X POST https://api.stripe.com/v1/tokens \ 
    -u MY_TEST_KEY: \ 
    -d "card[number]"=4242424242424242 \ 
    -d "card[exp_month]"=12 \ 
    -d "card[exp_year]"=2017 \ 
    -d "card[cvc]"=123 

Das gibt mir so etwas wie „tok_blahblahbcryptnonsense“

Allerdings kann ich nicht dieses CURL in eine Winkel $ zu übersetzen scheinen http-Funktion, und ich bekomme einen Statuscode 400 zurück mit der Nachricht "Sie müssen die vollständigen Kartendetails übergeben, um ein Token zu erstellen."

$http({ 
    method: 'POST', 
    url: 'https://api.stripe.com/v1/tokens', 
    headers: { 
     'content-type': 'application/json', 
     'Authorization': 'Bearer MY_TEST_KEY' 
    }, 
    params: { 
     card: { 
      "number": '4242424242424242', // I have tried this as 
             // an integer and string 
             // Stripe docs say string 
      "exp_month": 12, 
      "exp_year": 2017, 

      "cvc": '123' // I have tried this as 
         // an integer and string 
         // Stripe docs don't specify but I think string 
     } 
    } 
    }).then(function(success){ 
     console.log('success ', success) 
    }, function(error){ 
     console.log('error ', error) // gets here, this is where the message is 
    }) 

Soweit mein Verständnis geht, ist dies absolut möglich. Alles, was ich brauche, ist ein Token für diese Karte zu erstellen. Es wird spät und es könnte eine völlig offensichtliche Lösung sein und ich bin zu müde.

+0

Öffnen Sie die Entwickler-Tools von Ihrem Browser und klicken Sie auf die Registerkarte Netzwerk. Dann sende deine Anfrage. Sehen Sie sich dann den Hauptteil der Anfrage auf der Registerkarte Netzwerk an. Wie sieht es aus? –

+0

Wow, mir ist schon peinlich, hätte viel konkreter sein sollen. Ich führe diesen Code in ionischen, auf emulierten iPhone 5s - iOS 9.2 mit Live-Reload und Konsole aktiviert. Der Code selbst ist nur eckig, also dachte ich mir, die Frage so zu stellen. Ich denke, ich werfe das in ein anderes eckiges Projekt und schau es mir schnell an. –

+0

@SamuelPolicar: Nur ein Kopf, aus Gründen der PCI-Compliance sollten Sie * die * HTTP-Anfrage nicht selbst machen. Sie sollten stattdessen Stripe Checkout oder Stripe.js verwenden. – koopajah

Antwort

1

Vielleicht akzeptiert die Stripe-API auch JSON, aber was Sie in Ihrem curl-Befehl senden, ist nicht JSON. Es sind Formulardaten.

Darüber hinaus wird params verwendet, um Daten in der Abfragezeichenfolge zu übergeben. Sie möchten diese Daten im POST-Text enthalten.

Das sollte korrekten Code sein:

var myData = { 
    card: { 
    "number": '4242424242424242', 
    "exp_month": 12, 
    "exp_year": 2017, 
    "cvc": '123' 
    } 
}; 
$http({ 
    method: 'POST', 
    url: 'https://api.stripe.com/v1/tokens', 
    headers: { 
    'Authorization': 'Bearer MY_TEST_KEY', 
    'Content-Type': 'application/x-www-form-urlencoded' 
    }, 
    data: $httpParamSerializerJQLike(myData), 
}); 
+0

Danke JB, dass $ httpParamSerializerJQLike und Datenschlüssel waren, was fehlte. Es ist seltsam, dass bestimmte POST-Anfragen für Stripe mit x-www-form-urlencoded unter Verwendung des params-Schlüssels und ohne $ httpParamSerializerJQLike funktionieren. Das hat meinen Gedankengang total durcheinander gebracht, ganz zu schweigen von der Programmierung dieses Projekts für die letzten 10 Jahre. Ich kann endlich schlafen. –

+0

Gute Nacht dann. –

Verwandte Themen