Как внедрить PayPal в Symfony 1.4 и Docrtrine - PullRequest
1 голос
/ 20 января 2011

Я хочу использовать PayPal, Express Checkout, в Symfony / Doctrine 1.4.8, все текущие плагины, похоже, находятся в бета-версии, а также в некоторой степени перегружены тем, как они реализованы.Я могу следовать логике предоставленной PayPal информации и кода, хотя некоторые пункты немного расплывчаты относительно того, как я справляюсь с ними в Symfony.

Все файлы классов в порядке, так как я создаю каталог lib и переименовываю класс, и это создается.Однако у меня есть несколько простых процедурных PHP-файлов, например, expresscheckout.php, и я не уверен, куда их поместить, чтобы загрузить, так как они не подходят для шаблонов.Возможно, дело в действиях?

Я не ищу здесь построчное решение (но если у вас есть такое чувство свободы), но на самом деле несколько указателей относительно того, куда идут элементы.Как я уже сказал, я все еще страдаю от слепоты Symfony.

Наконец, мне лучше реализовать простой (возможно ли это) плагин для обработки этого или сгруппировать элементы paypal в модуле самостоятельно?

1 Ответ

0 голосов
/ 20 сентября 2011

Я написал класс 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, и все необходимые поля в соответствии с API PaypalNvp

...