Не удалось отправить платеж в PayPal с помощью Symfony

Я использую Symfony и пытаюсь отправить детали платежа в PayPal, используя PayumBundle, я настроил PayumBundle и получил он работал до тех пор, пока не был перенаправлен на PayPal, но данные о платеже не отправлялись, поэтому я искал в строке и наткнулся на этот вопрос в SO, и это именно тот пустой информационный экран, который я вижу.

Глядя на документацию, на которую указывает ответ, я придумал следующий фрагмент кода, но когда я пытаюсь получить доступ к маршруту, который вызывает следующее действие prepare. я столкнулся с ошибкой

public function prepareAction(Request $request)
{
    $paymentName = 'paypal';

    $storage = $this->getPayum()->getStorage('ClickTeck\featuresBundle\Entity\Orders');

    /** @var \ClickTeck\featuresBundle\Entity\Orders $paymentDetails */
    $paymentDetails = $storage->create();
    $paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';
    $paymentDetails['PAYMENTREQUEST_0_AMT'] = 1500;
    $storage->update($paymentDetails);

    $notifyToken = $this->getTokenFactory()->createNotifyToken($paymentName, $paymentDetails);
    $captureToken = $this->getTokenFactory()->createCaptureToken(
        $paymentName,
        $paymentDetails,
        'payment_done'
    );

    $paymentDetails['PAYMENTREQUEST_0_NOTIFYURL'] = $notifyToken->getTargetUrl();
    $paymentDetails['INVNUM'] = $paymentDetails->getId();
    $storage->update($paymentDetails);
    return $this->redirect($captureToken->getTargetUrl());

}

Error: Cannot use object of type ClickTeck\featuresBundle\Entity\Orders as array

Затем я попытался использовать следующее, но это приводит к другой ошибке в конце PayPal.

$paymentDetails->PAYMENTREQUEST_0_CURRENCYCODE = 'USD';
$paymentDetails->PAYMENTREQUEST_0_AMT = 1500;

This transaction cannot be processed. The amount to be charged is zero

Вот так выглядит моя сущность Order

<?php

namespace ClickTeck\featuresBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\Order as BaseOrder;


/**
 * Orders
 */
class Orders extends BaseOrder
{
    /**
     * @var integer
     */
    protected $id;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}

Может кто-нибудь, пожалуйста, помогите мне узнать, что это происходит? Уже 2 дня пытаюсь заставить PayumBundle работать.

Я буду очень признателен за любую помощь в этом. Как отправить реквизиты платежа в PayPal?


person Baig    schedule 27.01.2015    source источник
comment
Если вы не получите помощь по пакету, я могу опубликовать несколько фрагментов, показывающих, как отправить платеж без пакета. Может помочь вам увидеть, что происходит. Просто дай мне знать.   -  person Cerad    schedule 27.01.2015
comment
Это будет очень мило с вашей стороны. Пожалуйста, поделитесь   -  person Baig    schedule 27.01.2015
comment
Наконец-то удалось это сделать. stackoverflow.com/questions/28148887/   -  person Baig    schedule 28.01.2015


Ответы (2)


Немного теории:

Вы перепутали разные способы использования Payum. Первый полностью настраиваемый (другими словами, формат платежа). В этом случае вы можете использовать все, что реализует интерфейс \ArrayAccess. Названия полей и их значения выглядят так же, как и в документах Paypal.

Другой способ - тонкий слой поверх первого, который добавляет унификации. Здесь вы должны использовать модель Order и заполнить ее, используя доступные сеттеры. Вы все еще можете добавить некоторые определенные поля, используя метод setDetails.

Есть и третий способ: использовать собственную модель (Заказ\Счет\Оплата как хотите) и обеспечить интеграцию внутри Payum.

Теперь ответ:

Как выглядит эта \ClickTeck\featuresBundle\Entity\Orders модель? Вы реализуете OrderInterface или расширяете ArrayObject от Payum? Я предполагаю, что первый. Если вы хотите использовать полностью индивидуальное решение, расширьте ArrayObject и используйте его как массив. Если вам нужен унифицированный вариант (в будущем вы собираетесь на другую оплату) переходите к Заказать

person Maksim Kotlyar    schedule 27.01.2015
comment
большое спасибо за ваш отзыв. Я буду честен здесь, я никогда раньше не пользовался Payum, это мой первый раз, поэтому для меня нет никакого смысла в том, что вы сказали, это из-за моих ограниченных знаний о payum, и я благодарю вас за то, что вы нашли время и объяснили это мне. Это то, что я делал до prepareAction payum.org/doc/0.13/PayumBundle/get_it_started но это отправляло пустую информацию в PayPal, поэтому я изменил код, который вы видите в моем вопросе. - person Baig; 28.01.2015
comment
Я обновил свой вопрос и добавил Order объект, чтобы вы могли видеть, как он выглядит. Я не хочу использовать пользовательский формат. Простой формат для отправки информации в PayPal и сохранения ее в базе данных. У вас есть рабочий пример этого где-нибудь? - person Baig; 28.01.2015
comment
Спасибо за отзыв, наконец-то у меня получилось. и я буду признателен за ваши отзывы stackoverflow.com/questions/28148887/ - person Baig; 28.01.2015

В соответствии с запросом, вот простой пример создания кнопки «Купить сейчас» в шаблоне ветки:

{# buynow.html.twig #}
<script 
data-tax="0" 
data-shipping="0" 
data-amount="{{ total }}"
data-quantity="1" 
data-name="Player Registration {{ playDate ~ ' ' ~ player.nameLastPlayer ~ ', ' ~ player.nameFirstPlayer }} {{ player.initialPlayer }}"
data-button="buynow" 
data-custom="My custom information"
src="{{  asset('bundles/ceradteam/js/paypal-button.min.js') }}?merchant=MYMERCHANTID" 
></script>

Контроллер передает общую сумму. Вам нужно будет установить свой идентификатор продавца.

paypal-button.min.js — это файл сценария Java, сгенерированный сайтом разработки PayPal. Прошло некоторое время с тех пор, как я сделал свой, но он должен быть прямым. И это все, что вам нужно для простой оплаты.

Обратите внимание, что с PayPal можно сделать гораздо больше, но это может указать вам правильное направление.

person Cerad    schedule 27.01.2015
comment
Спасибо. Я буду копаться в этом. - person Baig; 27.01.2015