2013-07-09 35 views
5

我使用omnipay設置在這裏:https://github.com/adrianmacneil/omnipay處理一個PayPal快速結賬。omnipay 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); 

Nothing或原始數據包含客戶地址。

有沒有人有這個工作,我掙扎,它的最後一步完成交易。

回答

3

對於那些誰試圖讓這項工作作爲阿德里安說這是。

你先做正常omnipay支付寶付款,然後再把:

  1. 讓你給予
  2. 預製棒第二個呼叫使用呼叫getexpresscheckoutdetails方法
  3. 這將返回所有信息到PayPal令牌你需要

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

PHP腳本貝寶提供做這一切爲您:

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

0

如果它沒有被$response->getData()方法返回,您可能需要調用PayPal的GetExpressCheckoutDetails API方法來獲取有關該事務的額外詳細信息。

Omnipay不支持這個開箱即用,所以你可能會需要複製和自定義現有請求一個做一個單獨的API調用您確認付款後。

+0

啊對 - 你能指出我正確的方向,我需要看哪些文件進行調整?我很努力地看到貝寶文件夾中的任何內容,我可以編輯以包含此內容? –

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