2011-01-19 116 views
1

我想在Symfony/Doctrine 1.4.8中使用PayPal,Express Checkout,目前的插件似乎都在測試版中,並且在實現方式上也有些超過頂部。我可以遵循PayPal提供的信息和代碼的邏輯,儘管有些項目對於我在Symfony中如何處理它們有點模糊。如何在Symfony 1.4&Docrtrine中實現PayPal

任何類文件都可以,因爲我創建一個lib目錄並重命名該類,並將其實例化。然而,我有一些簡單的程序PHP文件,即expresscheckout.php,我不確定在哪裏加載它,因爲它似乎不適合模板。也許它在行動中?

我不是在尋找一行一行的解決方案(但如果你有一個感覺免費),但真的有幾個指向元素去的地方。正如我所說,我仍然患有Symfony失明。

最後我會更好地實現一個簡單的(這是可能的?)插件來處理這個或在模塊中的PayPal項目組自己?

回答

0

我所做的就是編寫一個類,我稱之爲PaypalNvp,將文件命名爲PaypalNvp.class.php,並將其放在/ lib文件夾中,並放入Nvp Ops的函數中。

然後你可以選擇要麼靜態調用的函數(改變你的類的功能需要)或初始化類並調用函數...

因此,像:

PaypalNvp::doExpressCheckoutPaypment($token, $payer_id, $amount, $currency, $payment_action); 

$paypal = new PaypalNvp(); 
$paypal->doExpressCheckoutPaypment($token, $payer_id, $amount, $currency, $payment_action); 

我不認爲有一種說法哪種方式更好......我自己使用後一種方法。

我的班級中有一個輔助函數,它與PayPal最終通信操作:您需要記住

protected function api($data = array()) 
{ 
    if (empty($data) || !is_array($data)) return false; 

    // INIT 
    $data = array_merge($data, array(
     'VERSION' => $this->VERSION, 
     'PWD'  => $this->PASSWORD, 
     'USER'  => $this->USERNAME, 
     'SIGNATURE' => $this->SIGNATURE 
    )); 

    array_walk($data, array(&$this, 'urlencode_walk')); 

    $curl = curl_init(); 
    curl_setopt_array($curl, array(
     CURLOPT_URL    => $this->getUrl() . '/nvp', 
     CURLOPT_VERBOSE   => 1, 
     CURLOPT_SSL_VERIFYPEER => false, 
     CURLOPT_SSL_VERIFYHOST => false, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_POST   => 1, 
     CURLOPT_POSTFIELDS  => http_build_query($data) 
    )); 

    $response = curl_exec($curl); 

    if (curl_errno($curl)) { 
     curl_close($curl); 
     return false; 
    } else { 
     curl_close($curl); 
     return $this->deformatNVP($response); 
    } 
} 

主要的事情是設置API方法,例如SetExpressCheckout以及根據PaypalNvp API的所有必填字段