Update the view context using a custom payment provider

Help for integrating the Laravel package
Forum rules
Always add your Laravel, Aimeos and PHP version as well as your environment (Linux/Mac/Win)
Spam and unrelated posts will be removed immediately!
gideon-maina
Posts: 1
Joined: 15 Jan 2018, 08:22

Update the view context using a custom payment provider

Post by gideon-maina » 15 Jan 2018, 15:25

I am developing a new payment provider for the Aimeos shop Laravel package. I have followed all the instructions well and I have been able to add the payment provider and also override some confirmation templates.

Specifically the pay_pending confimation page template. However, I want to generate some code and show it to the user on the confirmation page. I have generated it on my process() method of the provider but I have not been successful in updating the view context so that I can display the code to the customer.

I tried adding new items to the $params array as shown below but with no avail

Code: Select all

...
$params['my_code']= 'CKDLIOOK';
...
I have also tried using the normal decorators to update the context as shown below. This works but I cannot get it to link with the process() method for my Payment Provider.

Code: Select all

<?php 
namespace Aimeos\Client\Html\Common\Decorator;
 
class Mydecorator
    extends \Aimeos\Client\Html\Common\Decorator\Base
    implements \Aimeos\Client\Html\Common\Decorator\Iface
{
    private $view;
 
    public function getBody( $uid = '', array &$tags = array(), &$expire = null )
    {
        $this->setView( $this->setViewParams( $this->getView(), $tags, $expire ) );
        return $this->getClient()->getBody( $uid, $tags, $expire );
    }
 
    public function getHeader( $uid = '', array &$tags = array(), &$expire = null )
    {
        $this->setView( $this->setViewParams( $this->getView(), $tags, $expire ) );
        return $this->getClient()->getHeader( $uid, $tags, $expire );
    }
 
    protected function setViewParams( \Aimeos\MW\View\Iface $view, array &$tags = array(), &$expire = null )
    {
        if( $this->view === null )
        {
            // fetch the supplier item from the database
            $view->mydecorator_account_number = 'HEllo World';
            $view->mydecoratorTotal = '24000';
 
            $this->view = $view;
        }
 
        return $this->view;
    }
}
I also tried using the service decorator as outlined in https://aimeos.org/docs/Developers/Libr ... _decorator, but realized that the base classes does not have methods to update the view context.

Here is my process() method for the payment provider

...

Code: Select all

public function process( \Aimeos\MShop\Order\Item\Iface $order, array $params = array() )
{
    // send the payment details to an external payment gateway
    $order_id = $order->getBaseId();
    $basket = $this->getOrderBase( $order_id );
    $total = $basket->getPrice()->getValue() + $basket->getPrice()->getCosts();

    $my_code = uniqid($more_entropy=true);


    $status = \Aimeos\MShop\Order\Item\Base::PAY_PENDING;
    $order->setPaymentStatus( $status );
    $this->saveOrder( $order );

    // 

    return parent::process( $order, $params );
}
...
How do i update the context to include $my_code above in the checkout/confirm/4/intro.body-default.php tempalate context and display it

=============VERSIONS==========

Code: Select all

PHP => 7.0
Laravel => 5.4
Aimeos => ~2017.1
System => Ubuntu Linux 16.04.3

User avatar
aimeos
Administrator
Posts: 7836
Joined: 01 Jan 1970, 00:00

Re: Update the view context using a custom payment provider

Post by aimeos » 15 Jan 2018, 22:55

The process() method of the service provider has no access to the view. If you want to show something in the view, you have to add that data in the HTML client. The decorator you've implemented doesn't work because addData() is new in 2018.01 and not available in 2017.x. Instead, 2017.x uses the setViewParams() method but it's not public and therefore, a decorator doesn't work for what you want to do. If you need to add data either in the setViewParams() or process() method of your own HTML client class with extends the "Standard" class.
Professional support and custom implementation are available at Aimeos.com
If you like Aimeos, Image give us a star

Post Reply