omnipay paypal express not returning address
For those who are trying to get this work it's as Adrian said.
You first do the normal omnipay paypal payment and then afterwards:
- get the token you were given
- preform a second call to paypal using the call getexpresscheckoutdetails method
- this returns all the info you need
API info here: https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_GetExpressCheckoutDetails
The php script paypal provide to do it all for you:
https://cms.paypal.com/cms_content/ES/es_ES/files/developer/nvp_ECGetExpressCheckout_php.txt
omnipay\paypal\ProGateway.php
add new function
public function fetchExpressCheckoutDetail(array $parameters = array()){ return $this->createRequest('\Omnipay\PayPal\Message\FetchExpressCheckoutRequest', $parameters);}
omnipay\paypal\src\Message
add new file 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; }}
Usage:
$response = $gateway->completePurchase($params)->send();$data = $response->getData();$gateway->fetchExpressCheckoutDetail(array('transactionReference'=>$data['TOKEN']))->getData();
It will be not the best. But it works. :)
If it's not returned by the $response->getData()
method, you might need to call PayPal's GetExpressCheckoutDetails
API method to get the extra details about the transaction.
Omnipay doesn't support this out of the box, so you will probably need to copy and customize one of the existing requests to make a separate API call after you have confirmed payment.