2013-03-03 23 views
8

Tôi đang cố gắng sử dụng JMSPaymentCoreBundle với JMSPaymentPaypalBundle và tôi không thể tìm thấy ví dụ rõ ràng ở bất kỳ đâu về cách thực hiện.PayPal trong Symfony2

Tôi đã thực hiện tất cả các bước được chỉ định trong tài liệu và tôi không thể làm cho nó hoạt động. Ai đó giúp tôi được không, làm ơn?

+0

Bạn có ý nghĩa gì khi không hoạt động? Làm thế nào đến nay bạn đã có được? – hacfi

Trả lời

8

Cách mặc định để tạo ra một hướng dẫn thanh toán thông qua hình thức 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) 
      ), 
     ), 
    )); 

Bạn cũng có thể tạo ra một hướng dẫn thanh toán bằng tay:

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

đường payment_complete tôi trông như thế:

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

Tôi đã chạy nó qua http://jmsyst.com/bundles/JMSPaymentCoreBundle/master/usage

+0

Tôi chỉ cần một biểu mẫu mà bạn có thể nói số tiền bạn muốn thanh toán và nút "thanh toán ngay bây giờ": D Tôi nghĩ rằng tôi không hiểu chính xác luồng dữ liệu cho tất cả gói thanh toán này. Tại sao lệnh thanh toán KHÔNG giống như một đơn đặt hàng ?? là chính xác? 1- Hiển thị biểu mẫu có đầu vào để ghi số tiền (tạo và xóa lệnh). 2- Render (bên trong biểu mẫu trước đó) đường dẫn thanh toán cũng với biểu mẫu "chọn phương thức thanh toán", gửi dữ liệu bài đăng và orderNumber. 3- Cập nhật thực thể Đơn hàng và xóa mọi thứ khác. – Xavi

19

Payum bundle hỗ trợ thanh toán qua jms qua số bridge. Các liên kết mô tả cách bắt đầu.

Sử dụng gói cung cấp cho bạn một số lợi thế:

  • Bảo hành động chụp.
  • Có biểu mẫu thẻ tín dụng, có thể yêu cầu người dùng cấp thẻ tín dụng
  • Khả năng thiết lập IPN dễ dàng. Thông báo hành động cũng được bảo mật.
  • Hỗ trợ tích hợp tất cả các cổng toàn cầu (25 +), plugin jms (+ 10) và lib tự nhiên trả tiền.
  • Payum paypal lib hỗ trợ thanh toán định kỳ và hàng hóa kỹ thuật số ra khỏi hộp.
  • Các phần lưu trữ được tích hợp vào quy trình thanh toán để bạn không phải lo lắng về dữ liệu có thể bị mất.
  • Miền thân thiện. Thật vậy Payum cung cấp một số mô hình nhưng nó không hạn chế bạn sử dụng chúng.
  • Nó đã hỗ trợ trình ghi PSR-0. Trong dev nó ghi lại các hành động payum được thực thi, để gỡ lỗi dễ dàng (Truy cập tab nhật ký hồ sơ của symfony).
  • Có thể thiết lập một số thanh toán (một tài khoản paypal cho EU và một cho Hoa Kỳ chẳng hạn)
  • Vô cùng tùy chỉnh. Thêm hành động thanh toán tùy chỉnh của bạn hoặc tiện ích mở rộng hoặc kho lưu trữ.
  • Có một hộp cát symfony (code | web) để giúp bạn bắt đầu.

P.S. Nó không phải là danh sách đầy đủ các tính năng.