2013-03-03 7 views
8

Sto cercando di utilizzare JMSPaymentCoreBundle con JMSPaymentPaypalBundle e non riesco a trovare un chiaro esempio su come farlo.PayPal in Symfony2

Ho eseguito tutti i passaggi specificati nella documentazione e non riesco a farlo funzionare. Qualcuno può aiutarmi per favore?

+0

Cosa intendi per non lavoro? Quanto hai ottenuto? – hacfi

risposta

8

Il modo predefinito per creare un ordine di pagamento è attraverso il modulo di 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) 
      ), 
     ), 
    )); 

è anche possibile creare un ordine di pagamento manualmente:

 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(); 

mio percorso payment_complete assomiglia:

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(); 

I've got it running through http://jmsyst.com/bundles/JMSPaymentCoreBundle/master/usage

+0

Ho bisogno solo di un modulo in cui puoi dire l'importo che vuoi pagare e un pulsante "paga ora" ..: D Penso di non capire cosa sia esattamente il flusso di dati per tutto questo pacchetto di pagamenti. Perché un'istruzione di pagamento NON è la stessa di un ordine ?? è corretto? 1- Render un modulo con un input per scrivere l'importo (creando e svuotando un ordine). 2- Rendering (all'interno del modulo precedente) anche del percorso payment_details con il modulo "scegli metodo di pagamento", inviando i dati del post e il numero ordine. 3- Aggiornare l'entità Ordine e svuotare tutto il resto. – Xavi

19

Payum bundle supporta pagamenti jms tramite bridge. I collegamenti descrivono come iniziare.

Uso del bundle offre diversi vantaggi:

  • Secured azione di cattura.
  • Avere un modulo di carta di credito, può chiedere all'utente la carta di credito
  • Possibilità di configurazione semplice IPN. Anche l'azione di notifica è protetta.
  • Supporto integrato di tutti i gateway onnipay (25 +), i plugin jms (+ 10) e le librerie native payum.
  • Payum paypal lib supporta pagamenti ricorrenti e beni digitali fuori dalla scatola.
  • Gli archivi integrati nel processo di pagamento in modo da non preoccuparsi dei dati che potrebbero andare persi.
  • Dominio amichevole. Effettivamente Payum fornisce alcuni modelli ma non vi limita a usarli.
  • Già supporta il registratore PSR-0. In dev registra le azioni payum eseguite, per eseguire facilmente il debug (visita la scheda dei log del profilo di symfony).
  • È possibile impostare diversi pagamenti (un account paypal per l'UE e uno per gli Stati Uniti, ad esempio)
  • Estremamente personalizzabile. Aggiungi le tue azioni di pagamento personalizzate, o estensioni o depositi.
  • C'è una sandbox symfony (code | web) per aiutarti a iniziare.

P.S. Non è l'elenco completo delle funzionalità.