omnipay paypal express not returning address omnipay paypal express not returning address codeigniter codeigniter

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:

  1. get the token you were given
  2. preform a second call to paypal using the call getexpresscheckoutdetails method
  3. 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.