2016-02-05 8 views
5

Więc ja zauważyłem, że podczas sprawdzania od statusu płatnościPayPal REST API - państwo nie zmieni po zakupie

GET /v1/payments/payment/<Payment-Id> 

„stan” z odpowiedzią PayPal nie zmienia od " utworzono " nawet po tym, jak użytkownik PayPal kupił przedmiot. Dopiero gdy wykonam płatność, stan zmieni się na "zatwierdzony".

To sprawia, że ​​trudno odróżnić płatność, która została faktycznie zatwierdzona przez klienta od tej, która wciąż trwa, ponieważ oba są w stanie "utworzonym" "utworzonym". Jedyna różnica w odpowiedzi jsona polega na tym, że po zatwierdzeniu płatności wydaje się, że zawiera ona shipping_address. Nie jestem pewien, czy to standardowy sposób na wskazanie różnicy.

Jaki jest standardowy sposób sprawdzenia, czy klient rzeczywiście zatwierdził transakcję PayPal, gdy korzysta z powyższego połączenia z interfejsem API REST?

Uwaga: Mam już skonfigurowane i działające skrypty wywołania zwrotnego PHP. Pracuję nad systemem fail-safe, który stale sprawdza wpisy w bazie danych, aby upewnić się, że zatwierdzona płatność została wykonana (w przypadku jakiejś awarii systemu).

Myślałem, że mogę użyć skryptu oddzwonienia IPN mam setup z CLASSIC API ale wydaje się, że REST API i CLASSIC API nie są kompatybilne ponieważ zwrotna IPN nie będzie zawierać identyfikator transakcji lub wszelkie niezbędne informacje będą przydatne.

Wygląda na to, że podczas korzystania z interfejsu REST API, jeśli przegapisz przekierowanie do swojego serwera internetowego, transakcja zostanie utracona na zawsze.

Odpowiedz

3

Prawidłowe jest, że nie powiesz zatwierdzonej płatności z pola state w odpowiedzi interfejsu API wyszukiwania, zamiast tego będziesz szukać obiektu payer w treści JSON, a ta informacja wskaże zatwierdzoną płatność zasoby dla ciebie.

Here're odpowiedzi JSON tego samego PAY-ID przed/po przekierowaniu klienta (zatwierdzenie użytkownik)

  1. Lookup płatność /v1/payments/payment/PAY-9J02491382988403BK3BMC6I (przed zatwierdzeniem przez użytkownika):

    { 
        "id": "PAY-9J02491382988403BK3BMC6I", 
        "intent": "sale", 
        "state": "created", 
        "cart": "07U14103P0008801U", 
        "transactions": [ { 
         "amount":  { 
         "total": "80.00", 
         "currency": "USD" 
         }, 
         "payee": {"email": "[email protected]"}, 
         "invoice_number": "55a460ff696br", 
         "item_list":  { 
         "items":   [ 
             { 
           "name": "Test Ticket 1", 
           "sku": "55a460ff65f13", 
           "price": "10.00", 
           "currency": "USD", 
           "quantity": 1 
          }, 
             { 
           "name": "Test Ticket 2", 
           "sku": "55a460ff66c7a", 
           "price": "20.00", 
           "currency": "USD", 
           "quantity": 2 
          }, 
             { 
           "name": "Test Ticket 3", 
           "sku": "55a460ff66ce2", 
           "price": "10.00", 
           "currency": "USD", 
           "quantity": 3 
          } 
         ], 
         "shipping_address":   { 
          "recipient_name": "Test Name", 
          "line1": "Main St 1", 
          "city": "San Jose", 
          "state": "CA", 
          "postal_code": "95131", 
          "country_code": "US" 
         } 
         }, 
         "related_resources": [], 
         "notify_url": "https://bt-pduan-1.c9.io/ipn.php" 
        }], 
        "redirect_urls": { 
         "return_url": "http://localhost:80/getpaypal?paymentId=PAY-9J02491382988403BK3BMC6I", 
         "cancel_url": "http://localhost:80/cancel" 
        }, 
        "create_time": "2016-02-16T06:28:08Z", 
        "update_time": "2016-02-16T06:28:08Z", 
        "links": [ 
          { 
         "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-9J02491382988403BK3BMC6I", 
         "rel": "self", 
         "method": "GET" 
         }, 
          { 
         "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-9J02491382988403BK3BMC6I/execute", 
         "rel": "execute", 
         "method": "POST" 
         }, 
          { 
         "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-07U14103P0008801U", 
         "rel": "approval_url", 
         "method": "REDIRECT" 
         } 
        ] 
    } 
    
  2. Wyszukaj płatność po zatwierdzeniu przez użytkownika (usuwam zawartość JSON, np. Tablice transakcji/adresów URL dla odczytu):

    { 
        "id": "PAY-9J02491382988403BK3BMC6I", 
        "intent": "sale", 
        "state": "created", 
        "cart": "07U14103P0008801U", 
        "payer": { 
         "payment_method": "paypal", 
         "status": "VERIFIED", 
         "payer_info":  { 
         "email": "[email protected]", 
         "first_name": "Payer", 
         "last_name": "US", 
         "payer_id": "8FMFQ2KVYYHTY", 
         "shipping_address":   { 
          "recipient_name": "Test Name", 
          "line1": "Main St 1", 
          "city": "San Jose", 
          "state": "CA", 
          "postal_code": "95131", 
          "country_code": "US" 
         }, 
         "phone": "408-743-9795", 
         "country_code": "US", 
         "billing_address":   { 
          "line1": "1 Main St", 
          "line2": "", 
          "city": "San Jose", 
          "state": "CA", 
          "postal_code": "95131", 
          "country_code": "US" 
         } 
         } 
        }, 
        "transactions": [], 
        "redirect_urls": {}, 
        "create_time": "2016-02-16T06:28:08Z", 
        "update_time": "2016-02-16T06:28:08Z", 
        "links": [] 
    } 
    

Sprawdzając zarejestrowany identyfikator PAY-ID, szukający obiektu payer w odpowiedzi API, będzie można zapisać zamówienia i kontynuować wywoływanie wykonania w przypadku, gdy zostało ono pominięte w przekierowaniu zwrotnym klienta.

Dodatkowo, ani IPN, ani webhooks nie pomogłyby w tym przypadku, ponieważ są to asynchroniczne zdarzenia generowane przez zdarzenia na poziomie transakcyjnym, co oznacza, że ​​nie będzie żadnego powiadomienia, dopóki nie zostanie wykonana płatność.

+0

Dzięki za odpowiedź, świetnie jest w końcu uzyskać niewielką pomoc.Podczas testowania za pomocą tych metod zauważam, że obiekt "płatnika" istnieje, jeśli użytkownik jest zalogowany do systemu PayPal, ale jeszcze nie zapłacił. W tym przypadku nie będzie miał jednak adresu shipping_address. Gdy użytkownik skończył płacić i zapłacił, będzie zawierał adres_przesyłki. Czy to też dotyczy ciebie? –

+0

Mogę zweryfikować, że obiekt "płatnika" będzie istniał, jeśli użytkownik siedzi na stronie "przeglądu informacji" w sklepie po zalogowaniu. W tym momencie nie zostały jeszcze całkowicie wyewidencjonowane i mają opcję anulowania. Tak więc istnienie obiektu "płatnika" nie jest wystarczające. Mogę ci pokazać JSON, który otrzymam, jeśli to pomoże. –

+0

Jest to obiekt płatnik po zalogowaniu się "płatnikiem". { "payer_info": { "COUNTRY_CODE": "nas", "imię": "Joshua", "LAST_NAME": "Brittain", " payer_id ": "KZNRYBNVQD2FL" "telefon": "4084500470" } "payment_method": "paypal", "status": "Zweryfikowane" } –