2013-07-09 2 views
5

Я использую установку omnipay здесь: https://github.com/adrianmacneil/omnipay для обработки экспресс-оплаты в PayPal.omnipay paypal express не возвращающий адрес

Этот процесс отлично работает, так как пользователь перенаправляется на paypal -> они входят в систему и предпочитают платить -> они возвращаются на мой сайт, после чего я фиксирую платеж.

Проблема, с которой я столкнулась, заключается в том, что мне нужно уловить адрес, который они ввели в paypal, в качестве адреса выставления счетов/доставки.

Чтобы отправить пользователь через к PayPal я следующее:

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

Когда пользователь возвращается у меня следующее:

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

Ничто в ответном сообщении или необработанные данные содержат адрес клиента.

Кто-нибудь получил эту работу, поскольку я борется, и это последний шаг для завершения транзакции.

ответ

3

Для тех, кто пытается получить эту работу, это, как сказал Адриан.

Вы сначала сделать нормальную оплату OmniPay Paypal, а затем впоследствии:

  1. получить маркер вы были даны
  2. преформы второго вызова PAYPAL с помощью метода getexpresscheckoutdetails вызова
  3. это возвращает всю информацию вам нужно

данные API здесь: https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_GetExpressCheckoutDetails

Сценарий PayPal PHP обеспечить, чтобы сделать все это для вас:

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

0

Если это не возвращается методом $response->getData(), вам может потребоваться позвонить по методу PayPal GetExpressCheckoutDetails, чтобы получить дополнительную информацию о транзакции.

Omnipay не поддерживает это из коробки, поэтому вам, возможно, потребуется скопировать и настроить один из существующих запросов, чтобы сделать отдельный вызов API после подтверждения платежа.

+0

Ah right - можете ли вы указать мне в правильном направлении, какие файлы (ы) мне нужно посмотреть, чтобы выполнить эту настройку? Я пытаюсь увидеть что-нибудь в папке PayPal, которую я могу редактировать, чтобы включить это? –

1

omnipay\paypal\ProGateway.php добавить новую функцию

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

omnipay\paypal\src\Message добавить новый файл 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; 
    } 
} 

Использование:

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

Это будет не самое лучшее. Но это работает. :)

+0

Почему вы используете файл ProGateway.php? Разве это не должно быть ExpressGateway.php? – Ant100

Смежные вопросы