2013-07-09 17 views
5

Używam konfiguracji omnipay tutaj: https://github.com/adrianmacneil/omnipay do realizacji płatności ekspresowej paypal.omnipay paypal express nie powracający adres

Proces działa dobrze, ponieważ użytkownik jest przekierowywany na paypal -> zaloguj się i zdecyduje się zapłacić -> wróci do mojej witryny, w której momencie przechwycę płatność.

Problem polega na tym, że muszę podać adres, który podał w systemie PayPal jako adres rozliczeniowy/wysyłki.

Aby wysłać użytkownikowi całej paypal mam następujący:

$gateway = GatewayFactory::create('PayPal_Express'); 
$gateway->setUsername('XX-USERNAME_XX'); 
$gateway->setPassword('XX_PASSWORDXX'); 
$gateway->setSignature('XX_SIG_XX'); 
$gateway->setTestMode(true); 

$response = $gateway->purchase(
    array(
     'cancelUrl'=>'http://www.XXX.co.uk/', 
     'returnUrl'=>'http://www.XXX.co.uk/paypalexpress_confirm', 
     'amount' => $totalamount, 
     'currency' => 'GBP' 
    ) 
)->send(); 

$response->redirect(); 

Gdy użytkownik powraca mam następujące:

$gateway = GatewayFactory::create('PayPal_Express'); 
$gateway->setUsername('XX-USERNAME_XX'); 
$gateway->setPassword('XX_PASSWORDXX'); 
$gateway->setSignature('XX_SIG_XX'); 
$gateway->setTestMode(true); 

$response = $gateway->completePurchase(
    array(
     'cancelUrl'=>'http://www.XXX.co.uk/', 
     'returnUrl'=>'http://www.XXX.co.uk/paypalexpress_confirm', 
     'amount' => $totalamount, 
     'currency' => 'GBP' 
    ) 
    )->send(); 

    echo $responsemsg=$response->getMessage(); 

    echo '<br><br><br>'; 
    $data = $response->getData(); 
    print_r($data); 

nic w komunikacie odpowiedzi lub surowe dane zawiera adres klienta.

Czy ktoś ma to działa tak, jak ja walczę i jest to ostatni krok do zakończenia transakcji.

Odpowiedz

3

Dla tych, którzy próbują uzyskać tę pracę, jest tak, jak powiedział Adrian.

najpierw zrobić normalną wypłatę OmniPay PayPal i następnie później:

  1. uzyskać token wy dano
  2. wstępnej drugiego połączenia do systemu PayPal za pomocą metody getexpresscheckoutdetails połączeń
  3. ta zwraca wszystkie informacje trzeba

informacje API tutaj: https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_GetExpressCheckoutDetails

php skrypt paypal zapewnić robić to wszystko dla Ciebie:

https://cms.paypal.com/cms_content/ES/es_ES/files/developer/nvp_ECGetExpressCheckout_php.txt

0

Jeśli nie zostanie zwrócony za pomocą metody $response->getData(), może zajść potrzeba połączenia się z metodą płatności PayPal GetExpressCheckoutDetails, aby uzyskać dodatkowe informacje na temat transakcji.

Omnipay nie obsługuje tego po wyjęciu z pudełka, więc prawdopodobnie będziesz potrzebować skopiować i dostosować jedno z istniejących żądań, aby wykonać oddzielne wywołanie API po potwierdzeniu płatności.

+0

Ach racja - czy możesz wskazać mi właściwy kierunek, który plik (i) powinien (a) się przyjrzeć (a), aby dokonać korekty? Mam problem ze znalezieniem czegokolwiek w folderze PayPal, który mogę edytować, aby to uwzględnić? –

1

omnipay\paypal\ProGateway.php dodać nową funkcję

public function fetchExpressCheckoutDetail(array $parameters = array()) 
{ 
    return $this->createRequest('\Omnipay\PayPal\Message\FetchExpressCheckoutRequest', $parameters); 
} 

omnipay\paypal\src\Message dodać nowy plik FetchExpressCheckoutRequest.php

namespace Omnipay\PayPal\Message; 
class FetchExpressCheckoutRequest extends AbstractRequest 
{ 
    public function getData() 
    { 
     $data = $this->getBaseData('GetExpressCheckoutDetails'); 

     $this->validate('transactionReference'); 
     $data['TOKEN'] = $this->getTransactionReference(); 
     $url = $this->getEndpoint()."?USER={$data['USER']}&PWD={$data['PWD']}&SIGNATURE={$data['SIGNATURE']}&METHOD=GetExpressCheckoutDetails&VERSION={$data['VERSION']}&TOKEN={$data['TOKEN']}"; 
     parse_str (file_get_contents($url),$output); 
     $data = array_merge($data,$output); 
     return $data; 
    } 
} 

Zastosowanie:

$response = $gateway->completePurchase($params)->send(); 
$data = $response->getData(); 
$gateway->fetchExpressCheckoutDetail(array('transactionReference'=>$data['TOKEN']))->getData(); 

To nie będzie najlepsze. Ale działa. :)

+0

dlaczego używasz pliku ProGateway.php? Czy nie powinien to być ExpressGateway.php? – Ant100