8

で使用しようとしてJMSPaymentCoreBundleJMSPaymentPaypalBundleますが、その方法について明確な例がどこにも見つかりません。

ドキュメントで指定されているすべての手順を実行しましたが、動作させることができません。誰か助けてくれませんか?

4

2 に答える 2

19

Payumバンドルは、ブリッジを介したjms支払いをサポートします。リンクには、開始方法が記載されています。

バンドルを使用すると、いくつかの利点があります。

  • 安全なキャプチャアクション。
  • クレジットカードフォームを持っている、クレジットカードをユーザーに求めることができます
  • IPNを簡単にセットアップする機能。通知アクションも確保されています。
  • すべてのomnipayゲートウェイ(25 +)、jmsプラグイン(+ 10)、およびpayumネイティブライブラリの組み込みサポート。
  • Payum paypal libは、箱から出してすぐに使える定期支払いとデジタル商品をサポートしています。
  • ストレージは支払いプロセスに統合されているため、失われる可能性のあるデータについて心配する必要はありません。
  • ドメインフレンドリー。実際、Payumはいくつかのモデルを提供していますが、それらの使用を制限するものではありません。
  • すでにPSR-0ロガーをサポートしています。開発では、デバッグを容易にするために、実行されたpayumアクションをログに記録します(symfonyプロファイルログタブにアクセスしてください)。
  • 複数の支払いを設定することが可能です(たとえば、EU用とUS用の1つのペイパルアカウント)
  • 非常にカスタマイズ可能。カスタムpayumアクション、拡張機能、またはストレージを追加します。
  • 始めるのに役立つsymfonyサンドボックス(コード| web)があります。

PSこれは機能の完全なリストではありません。

于 2013-08-19T09:38:55.717 に答える
8

支払い指示を作成するデフォルトの方法は、jms_choose_payment_methodフォームを使用することです。

$form = $this->getFormFactory()->create('jms_choose_payment_method', null, array(
        'amount'   => 12.99,
        'currency' => 'EUR',
        'default_method' => 'payment_paypal', // Optional
        'predefined_data' => array(
            'paypal_express_checkout' => array(
                'return_url' => $this->get('router')->generate('payment_complete', array(
                    'number' => $order->getOrderNumber(),
                ), true),
                'cancel_url' => $this->get('router')->generate('payment_cancel', array(
                    'number' => $order->getOrderNumber(),
                ), true)
            ),
        ),
    ));

支払い指示を手動で作成することもできます。

        use JMS\Payment\CoreBundle\Entity\ExtendedData;
        use JMS\Payment\CoreBundle\Entity\Payment;
        use JMS\Payment\CoreBundle\PluginController\Result;
        use JMS\Payment\CoreBundle\Plugin\Exception\ActionRequiredException;
        use JMS\Payment\CoreBundle\Plugin\Exception\Action\VisitUrl;
        use JMS\Payment\CoreBundle\Entity\PaymentInstruction;


        $extendedData = new ExtendedData();
        $extendedData->set('return_url', $this->get('router')->generate('payment_complete', array(
                'number' => $order->getOrderNumber(),
            ), true));

        $extendedData->set('cancel_url', $this->get('router')->generate('payment_cancel', array(
                'number' => $order->getOrderNumber(),
            ), true));

        $instruction = new PaymentInstruction((float)$order->getCharge() > 0 ? $order->getCharge() : $order->getAmount(), 'EUR', 'paypal_express_checkout', $extendedData);
        $this->get('payment.plugin_controller')->createPaymentInstruction($instruction);

        $order->setPaymentInstruction($instruction);
        $em = $this->get('doctrine.orm.entity_manager');
        $em->persist($order);
        $em->flush();

私のpayment_completeルートは次のようになります:

public function completeAction(Booking $order)
{
    $instruction = $order->getPaymentInstruction();
    if (($instruction->getAmount() - $instruction->getDepositedAmount()) > 0) {
        if (null === $pendingTransaction = $instruction->getPendingTransaction()) {
            $payment = $this->get('payment.plugin_controller')->createPayment($instruction->getId(), $instruction->getAmount() - $instruction->getDepositedAmount());
        } else {
            $payment = $pendingTransaction->getPayment();
        }

        $result = $this->get('payment.plugin_controller')->approveAndDeposit($payment->getId(), $payment->getTargetAmount());
        if (Result::STATUS_PENDING === $result->getStatus()) {
            $ex = $result->getPluginException();

            if ($ex instanceof ActionRequiredException) {
                $action = $ex->getAction();

                if ($action instanceof VisitUrl) {
                    return new RedirectResponse($action->getUrl());
                }

                throw $ex;
            }
        } else if (Result::STATUS_SUCCESS !== $result->getStatus()) {
            throw new \RuntimeException('Transaction was not successful: '.$result->getReasonCode());
        }
    }

    $order->setTransactionAmount((float)$order->getAmount());
    $creditPurchased = (float)$order->getCharge() > (float)$order->getAmount() ? (float)$order->getCharge() - (float)$order->getAmount() : 0;
    $em->persist($order);
    $em->flush();

http://jmsyst.com/bundles/JMSPaymentCoreBundle/master/usageを介して実行しています

于 2013-03-03T23:20:17.453 に答える