2015-10-14 13 views
20

Konfiguruję płatności za pomocą interfejsu API Stripe, aby umożliwić użytkownikowi logowanie się do swojego konta Stripe na iPadzie i akceptowanie płatności od dowolnej osoby. Aby to zrobić, używam aplikacji Stripe Connect, aby się zalogować i zapisać identyfikator swojego konta, a następnie używam numeru STPPaymentCardTextField do uzyskania danych karty kredytowej, a następnie przy użyciu zestawu SDK Stripe iOS Przesyłam kartę (za pomocą karty testowej info - 4242 ...) i odzyskanie tokena przez createTokenWithCard. Powoduje to zwrócenie tokena. W tym momencie muszę przesłać token wraz z identyfikatorem konta docelowego (dostarczonego do aplikacji po zalogowaniu użytkownika) i inne informacje (waluta, kwota itp.) Do mojego własnego serwera, aby przesłać płatność do Stripe. I sprawdzeniu, że informacje są składane i przekazywane na pas, ale Stripe zwraca błąd:Błąd "Brak takiego tokena" po przesłaniu prośby o płatność do Stripe

{ type: 'invalid_request_error', 
app[web.1]:  message: 'No such token: tok_13vxes2eZkKYli2C9bHY1YfX', 
app[web.1]:  param: 'source', 
app[web.1]:  statusCode: 400, 
app[web.1]:  requestId: 'req_7AIT8cEasnzEaq' }, 
app[web.1]: requestId: 'req_7AIT8cEasnzEaq', 
app[web.1]: statusCode: 400 } 

Jeśli przesłać informacje dotyczące kart kredytowych bezpośrednio, unikając token ogóle, płatność powiedzie. Coś jest nie tak z tym tokenem i nie jesteśmy pewni, dlaczego to się nie udaje. Co tu może być nie tak?

[[STPAPIClient sharedClient] createTokenWithCard:card completion:^(STPToken *token, NSError *error) { 
    //submit tokenId and other info to 'charge' endpoint below 
} 

NodeJS:

app.post('/charge', (req, res, next) => { 
    stripe.charges.create({ 
    amount: req.body.amount, 
    currency: req.body.currency, 
    source: req.body.token, 
    description: req.body.description, 
    destination: req.body.destination 
    }, (err, charge) => { 
    if (err) return next(err) 
    res.json(charge) 
    }) 
}) 

Odpowiedz

4

Przyjęta odpowiedź nie działa dla mnie. Używam poprawnego klucza dla klienta i serwera, ale nadal problem nadal istnieje. Wysyłam także źródło z iOS na serwer, na podstawie przykładu RocketRides, wysyłającego identyfikator źródła karty kredytowej, która jest "card_xxx", i to nie zadziała. Będziesz musiał dodać atrybut "klienta" dla połączenia po stronie serwera.

Na przykład: (pyton)

stripe.Charge.create (wielkość = 1000, waluty = 'USD' źródło = "card_xxxxx" klienta = 'cus_xxxx' application_fee = 600, cel = {'account': 'acct_xxxx'})

+0

Ta odpowiedź została udzielona 2 lata temu i została zaakceptowana. Dlaczego odpowiadasz w języku programowania, o który się nie prosiłeś? –

+2

, ponieważ mam taki sam błąd "nie taki Tuck", a zaakceptowana odpowiedź nie działa. W przypadku, gdy ktoś inny znalazł ten sam problem, może sprawdzić, czy brakuje tego atrybutu. język programowania nie jest kluczem, kluczem jest dodanie tego atrybutu – Usher

36

Czy jesteś pewien, że używasz tych samych kluczy API na serwerze i na kliencie?
Twój serwer powinien używać tajnego klucza (na żywo/testowego), a Twoja aplikacja na iOS powinna używać klucza publikowalnego (na żywo/testowego), o którym mowa tutaj: Stripe Testing.

+3

Problem polegał na tym, że klucz do opublikowania nie pasował do klucza pokazanego w Ustawieniach konta. Jakoś to się zmieniło odkąd wkleiłem to do mojego AppDelegate. – Joey

+2

Argh miał ten sam problem. dzięki za wskazanie rozwiązania @Joey – Christophe

+0

ten sam problem, tak prosty, ale nie myślałem o tym. – robertmylne