2016-02-14 27 views
5

OK, nie pracowałem wcześniej z hostowanymi przyciskami, ale ma to sens, ponieważ są dużo bezpieczniejsze.Ustawianie bezpiecznych kwot dynamicznych z płatnościami Paypal za pomocą przekierowania, a nie przycisku?

Rozejrzałem się i czytałem dokumenty (które nie są aż tak pomocne) i najlepszą pomocą, jaką do tej pory znalazłem, jest here; chociaż nadal jestem zdezorientowany, gdzie dokładnie umieścić ten kod?

Ponadto technicznie nie chcę "przycisku", ale idea, która za nimi stoi, wydaje się być tym, czego chcę.

Wszystko, co chcę zrobić, to używać tych samych zmiennych zapytań za każdym razem, ale chcę tylko zmienić cenę - cena jest dynamiczna w zależności od tego, co wybierze użytkownik w formularzu.

Dodatkowo, nie chcę przycisku per se, wolałbym przekierować użytkownika do systemu PayPal z odpowiednimi danymi, ale nie wiem, jak to zrobić, ustalając dynamiczną cenę?

Gdybym nie musiał ustalać ceny dynamicznej, wiedziałbym, że mogę po prostu dołączyć vary zapytania dla hostowanego przycisku na adres URL, a następnie przekierować do tego adresu URL, ale muszę zmienić cenę, a tym samym moje pytanie. ..

+0

Nie używam tego, ale [to odwołanie] (https://developer.paypal.com/docs/classic/api/#bm) powinno pomóc. Wygląda na to, że będziesz musiał wykonać żądanie strony_serwera ('NVP' lub' SOAP'), aby "utworzyć przycisk". Odpowiedź na to żądanie będzie zawierała [HTML, link lub identyfikator] (https://developer.paypal.com/docs/classic/api/button-manager/BMCreateButton_API_Operation_NVP/) Hth. – EdSF

+0

Tak, widziałem te strony, ale wydawało mi się, że wszystko, co robi, to tworzenie wyjściowego html dla przycisku; Chyba zawsze mogę po prostu załadować HTML na stronę i automatycznie przesłać stronę przez JS lub coś podobnego. Miał nadzieję, że będzie coś bardziej przyjaznego dla użytkownika. – Brett

+0

Nie można wykonać żadnej strony po stronie haszowania/szyfrowania klienta (JavaScript), ponieważ jeśli tak, to prawie złamiesz to, czego szukasz - zabezpieczając_ transakcję przed manipulowaniem. Tak właśnie działają przyciski hostowane - zabezpiecz przed ingerencją. Każdy rodzaj mieszania/szyfrowania powinien być wykonywany po stronie serwera, poza zasięgiem przeglądarki/klienta. Tylko _ po tym, że (już zaszyfrowany/zaszyfrowany) rozważasz przepływ po stronie klienta. – EdSF

Odpowiedz

2

Ok, ale w końcu okazało się, że nie tylko odpowiedź od BMUpdateButton API zwraca HTML, aby utworzyć formularz, zwraca również inne dane w zwróconej tablicy.

Po dokonaniu wniosek zwróci tablicę z trzema przyciskami, jak na BMUpdateButton Response sekcji na stronie API połączonego powyżej.

Są to:

  • WEBSITECODE kod

    HTML na stronach internetowych

    • EMAILLINK

To właśnie szukałem; zwykły link może przekierować użytkowników do

  • HOSTEDBUTTONID

identyfikator przycisku.

Podczas zmiany zawartości hostowanego przycisku musisz podać wszystkie szczegóły przycisku do niego, tak jak podczas jego tworzenia; więc jako przykład, jeśli pominiesz podanie nazwy przedmiotu, nazwa przedmiotu będzie pusta, a Paypal pozwoli na ustawienie go.

Również, ważna uwaga jest to, że kiedy aktualizacja szczegóły przycisków, to nie jest właśnie aktualizowany na tej sesji użytkowników, aktualizuje go w koncie PayPal - tak nowa nazwa/cena itp wpłynie wszystkie użytkowników, którzy próbują z niego korzystać.

Jeśli nadal chcieliby aktualizować szczegóły przycisku można zrobić z niżej:

Osobiście zaczął z tej klasy:

<?php 

class Paypal 
{ 
    /** 
    * Last error message(s) 
    * @var array 
    */ 
    protected $_errors = array(); 

    /** 
    * API Credentials 
    * Use the correct credentials for the environment in use (Live/Sandbox) 
    * @var array 
    */ 
    protected $_credentials = array(
     'USER' => 'seller_1297608781_biz_api1.lionite.com', 
     'PWD' => '1297608792', 
     'SIGNATURE' => 'A3g66.FS3NAf4mkHn3BDQdpo6JD.ACcPc4wMrInvUEqO3Uapovity47p', 
    ); 

    /** 
    * API endpoint 
    * Live - https://api-3t.paypal.com/nvp 
    * Sandbox - https://api-3t.sandbox.paypal.com/nvp 
    * @var string 
    */ 
    protected $_endPoint = 'https://api-3t.sandbox.paypal.com/nvp'; 

    /** 
    * API Version 
    * @var string 
    */ 
    protected $_version = '74.0'; 

    /** 
    * Make API request 
    * 
    * @param string $method string API method to request 
    * @param array $params Additional request parameters 
    * @return array/boolean Response array/boolean false on failure 
    */ 
    public function request($method, $params = array()) 
    { 
     $this->_errors = array(); 
     if (empty($method)) { //Check if API method is not empty 
      $this->_errors = array('API method is missing'); 
      return false; 
     } 

     //Our request parameters 
     $requestParams = array(
       'METHOD' => $method, 
       'VERSION' => $this->_version 
      ) + $this->_credentials; 

     //Building our NVP string 
     $request = http_build_query($requestParams + $params); 

     //cURL settings 
     $curlOptions = array(
      CURLOPT_URL => $this->_endPoint, 
      CURLOPT_VERBOSE => 1, 
      CURLOPT_SSL_VERIFYPEER => true, 
      CURLOPT_SSL_VERIFYHOST => 2, 
      CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', //CA cert file 
      CURLOPT_RETURNTRANSFER => 1, 
      CURLOPT_POST => 1, 
      CURLOPT_POSTFIELDS => $request 
     ); 

     $ch = curl_init(); 
     curl_setopt_array($ch, $curlOptions); 

     //Sending our request - $response will hold the API response 
     $response = curl_exec($ch); 

     //Checking for cURL errors 
     if (curl_errno($ch)) { 
      $this->_errors = curl_error($ch); 
      curl_close($ch); 
      return false; 
      //Handle errors 
     } else { 
      curl_close($ch); 
      $responseArray = array(); 
      parse_str($response, $responseArray); // Break the NVP string to an array 
      return $responseArray; 
     } 
    } 
} 

?> 

kredytowe:https://www.smashingmagazine.com/2011/09/getting-started-with-the-paypal-api/

Następnie zrobiłem:

include(dirname(__FILE__) . '/includes/paypal.class.php'); 

$paypal = new Paypal(); 

// Set our method 
$method = 'BMUpdateButton'; 

// Set our params 
$params = array(
    'HOSTEDBUTTONID' => 'your_button_id', 
    'BUTTONTYPE' => 'BUYNOW', 
    'BUTTONSUBTYPE' => 'SERVICES', 
    'L_BUTTONVAR0' => 'item_name=Your Description', 
    'L_BUTTONVAR1' => 'amount=999.00', 
    'L_BUTTONVAR2' => 'currency_code=AUD', 
    'L_BUTTONVAR3' => 'cancel_return=http://www.example.com/cancel.html', 
    'L_BUTTONVAR4' => 'return=http://www.example.com/success.html' 
); 

// Make request to change button details 
$result = $paypal->request($method, $params); 

Należy pamiętać, że chociaż Paypal mówi, że BUTTONSUBTYPE jest opcjonalne, prawdopodobnie wystąpi błąd, jeśli go nie uwzględnisz.

0

Musisz użyć ich przycisku projektanta, jeśli masz zamiar zrobić gospodarzem przyciski.

https://www.paypal.com/us/cgi-bin/webscr?cmd=_button-designer

Bezpieczeństwo pochodzi z weryfikacji IPN po transakcji.

Patrz:

https://www.paypal.com/us/cgi-bin/webscr?cmd=p/acc/ipn-info-outside

Validate that IPN call is from PayPal?

Odpowiedź na to stanowisko jest lepszy sposób to zrobić:

Dynamic PayPal button generation - isn't it very insecure?

+0

Dzięki, ale jestem świadomy, jak utworzyć przyciski - staram się wypracować, jak uzyskać prawidłowe dane przekazywane do systemu PayPal, dzięki czemu mogę przesłać do nich poprzez przekierowanie za pomocą zapytań vars. Więc zamiast zwracać mi html, aby umieścić przycisk na mojej stronie, chciałbym tylko zwrócić ciąg zapytania lub JSON lub coś bardziej praktycznego. – Brett

0

kod Button jest znaczniki HTML forma oparta tak łatwo przekonwertowałbyś ją na zapytanie łańcuchowe i zmontowałeś dynamiczne ładunki za pomocą thi s Format:

https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&[email protected]&item_name=itemNameTest&item_number=123&amount=1&currency_code=USD&no_shipping=1 

dostosować go i dołączyć do varliables Vars na liście HERE i używać go z metodą przekierowania.

Button Manager API jest bardziej wszechstronny oprócz tego, że nie zwróci Ci URL ciąg kwerendy takiego, choć idea jest identyczny z fragmentem kodu HTML forma