Difficulty to Manage data with payum Bundle

862 Views Asked by At

I'm tryng to implement PayPal payment via IPN on my Symfony2 application. I'm using the PayumBundle and Payum Express Check out, I've followed the istructions, and the system works fine in the sand-box environment.

Here are my Controllers:

public function preparePaypalExpressCheckoutPaymentAction($almount)
{

    $paymentName = 'paypall';
    $storage = $this->get('payum')->getStorageForClass(
        'Acme\MyBundle\Entity\PaymentDetails',
        $paymentName
    );


    $paymentDetails = $storage->createModel();
    $paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';
    $paymentDetails['PAYMENTREQUEST_0_AMT'] = $almount;
    //Aggiunti
    $paymentDetails['PAYMENTREQUEST_0_AMT'] = $almount;
    $paymentDetails['PAYMENTREQUEST_0_ITEMAMT'] = $almount;
    $paymentDetails['PAYMENTREQUEST_0_PAYMENTACTION'] = "sale";
    $paymentDetails['L_PAYMENTREQUEST_0_NAME0'] = "Recharge";
    $paymentDetails['L_PAYMENTREQUEST_0_QTY0'] = 1;
    $paymentDetails['L_PAYMENTREQUEST_0_AMT0'] = $almount;
    $paymentDetails['NOSHIPPING'] = Api::NOSHIPPING_NOT_DISPLAY_ADDRESS;
    $storage->updateModel($paymentDetails);

    $captureToken = $this->get('payum.security.token_factory')->createCaptureToken(
        $paymentName,
        $paymentDetails,
        'Genia_sepeda_quickpayResponse' // the route to redirect after capture;
    );

    $paymentDetails['INVNUM'] = $paymentDetails->getId();
    $paymentDetails['RETURNURL'] = $captureToken->getTargetUrl();
    $paymentDetails['CANCELURL'] = $captureToken->getTargetUrl();
    $storage->updateModel($paymentDetails);

    return $this->redirect($captureToken->getTargetUrl());

    ///////////////////////////////////////////

}

public function captureDoneAction(Request $request)
{
    $token = $this->get('payum.security.http_request_verifier')->verify($request);

    $payment = $this->get('payum')->getPayment($token->getPaymentName());

    $status = new BinaryMaskStatusRequest($token);
    $payment->execute($status);

    if ($status->isSuccess()) {
        // UPDATE USER DATA HERE
        $this->get('session')->getFlashBag()->set(
            'notice',
            'Successo!. Ricarica effettuata.'
        );
        $em = $this->get('doctrine')->getEntityManager();
        $user= $em->getRepository('AcmeMyBundle:User')->find(1); // JUST FOR TRY
        $credit=$user->getCredit();

        $em->persist($user)
        $em->flush();

    } else if ($status->isPending()) {
        $this->get('session')->getFlashBag()->set(
            'notice',
            'Pagamento In Sospeso. Il credito verrà aggiornato non appena il pagamento avrà successo.'
        );
    } else {
        $this->get('session')->getFlashBag()->set('error', 'Pagamento Fallito.');
    }
    foreach ($this->get('session')->getFlashBag()->get('notice', array()) as $message) {
        echo "<div class='flash-notice'>$message</div>";
    }
    foreach ($this->get('session')->getFlashBag()->get('error', array()) as $message) {
        echo "<div class='flash-notice'>$message</div>";
    }
    return new response("END");
    //return $this->redirect('homepage');
}

With the base configuration I'm able to set the almount of the payment, and send to the PayPal page, the user is able to put his login and pass a pay, the callback is correctly intercepted from the controller and processed captureDoneAction(). Now my problem is to add additional information to send to PayPal that it should return to me, like the User_id , the almount, etc, all data I need to extecute the queries to effectly update the user credit on my database. I admin that problamy I miss something in the understand of the token excanged between my server and paypal server. Every help to send and grab additional iformation will be alot will be appreciated.

1

There are 1 best solutions below

0
On

If I get you right you need a $paymentDetails model in you done action. If so read the answer on Payum - PaymentDetails object in done action where is

You can extend this model 'Acme\MyBundle\Entity\PaymentDetails' and add a relation with your user and some other fields that not need to paypal but could be used by you.

By the way you do echo from the controller. It is not Symfony way, Concat all the html to the variable and return it with Response object.