2013-07-09 6 views
5

Ich benutze die Omnipay-Setup hier: https://github.com/adrianmacneil/omnipay, um eine PayPal-Express-Kasse zu verarbeiten.omnipay paypal express nicht zurück Adresse

Der Prozess funktioniert gut, in dem der Benutzer zu paypal umgeleitet wird -> sie loggen sich ein und wählen zu zahlen -> sie werden zu meiner Seite zurückgebracht, an welchem ​​Punkt ich die Zahlung festhalte.

Das Problem, das ich habe, ist, dass ich die Adresse erfassen muss, die sie in Paypal als ihre Rechnungsadresse/Lieferadresse eingegeben haben.

Um den Benutzer über paypal zu senden Ich habe folgendes:

$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(); 

Wenn der Benutzer ich habe folgendes zurückgegeben:

$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); 

Nichts in der Antwortnachricht oder die Rohdaten enthält die Kundenadresse.

Hat jemand dieses funktioniert, wie ich kämpfe und es ist der letzte Schritt, um die Transaktion abzuschließen.

Antwort

3

Für diejenigen, die versuchen, diese Arbeit zu bekommen, ist es wie Adrian sagte.

Sie zuerst tun die normale OmniPay paypal Zahlung und dann danach:

  1. erhalten das Token Sie
  2. Vorform einen zweiten um den Anruf getexpresscheckoutdetails Methode zur paypal gegeben wurden mit
  3. diese liefert alle Infos Sie benötigen

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

Das PHP-Skript paypal bieten alles für Sie tun:

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

0

Wenn die Methode $response->getData() nicht zurückgegeben wird, müssen Sie möglicherweise die GetExpressCheckoutDetails API-Methode von PayPal aufrufen, um zusätzliche Details zur Transaktion zu erhalten.

Omnipay unterstützt dies nicht sofort. Daher müssen Sie wahrscheinlich eine der bestehenden Anfragen kopieren und anpassen, um nach der Bestätigung der Zahlung einen separaten API-Aufruf durchzuführen.

+0

Ah richtig - können Sie mir in die richtige Richtung zeigen, auf welche Datei (en) ich schauen muss, um diese Anpassung vorzunehmen? Ich bemühe mich, etwas in dem Paypal-Ordner zu sehen, den ich bearbeiten kann, um dies zu berücksichtigen? –

1

omnipay\paypal\ProGateway.php neue Funktion hinzufügen

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

omnipay\paypal\src\Message fügen neue Datei 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; 
    } 
} 

Verbrauch:

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

Es wird nicht das beste sein. Aber es funktioniert. :)

+0

Warum verwenden Sie die Datei ProGateway.php? Sollte es nicht ExpressGateway.php sein? – Ant100