Jump to content

Blokowania koszyka przed dokonaniem podwójnej płatności


Kamil Szmit

Recommended Posts

Robię moduł płatności PrestaShop, gdzie na stronie płatności umieszczany jest skrypt JavaScript wysyłający poprzez AJAX żądanie płatności do skryptu PHP wewnątrz modułu, gdzie znajduje się przenoszenie koszyka do zamówień po poprawnej płatności. Przenoszenie zamówienia do koszyka wygląda w następujący sposób:

if ($cart->OrderExists() == false) {
        $module->validateOrder($cart->id, $actual_state, $total, 'billon', NULL, array(), (int)$cart->id_currency, false, $customer->secure_key);
    } else {
          $history = new OrderHistory();
          $history->id_order = Order::getOrderByCartId((int)Tools::getValue('control'));
          $lastOrderState = OrderHistory::getLastOrderState($history->id_order);
          $history->changeIdOrderState($actual_state, $history->id_order);
          $history->addWithemail(true);
      }

Jak najlepiej zablokować koszyk przed wykonaniem płatności i najlepiej odblokować go, jeśli płatność się nie udała? Czy próbować sklonować obiekt koszyka, wywołać metodę "delete" koszyka, a przy nieudanej płatności wykonać metodę "save" sklonowanego obiektu:

$cart     = new Cart((int) 0);
$tempCart = $cart;
$myShop->paymentStatus($taskId ? $taskId : $_GET['taskId'], function($response) use (&$cart, &$tempCart)
{
    $responseString = json_encode($response);
    if (is_string($response['status']))
            {
                $status = explode('_', $response['status']);
                if (count($status) > 1 && $status[0] == 'FINISHED')
                {
                    if ($status[1] != 'OK')
                    {
                        if (isset($tempCart))
                        {
                            $tempCart->save();
                        }
                    } 
                }
                else
                {
                    if (isset($cart))
                        {
                            $tempCart = clone $cart;
                            $cart->delete();
                        }
                }
            }
    echo $responseString;

Czy lepiej utworzyć zamówienie z koszyka z innym statusem? Jak wtedy przywrócić koszyk? Czy jedyna możliwość to stworzenie własnej klasy i tabeli ObjectModel przechowującej identyfikator użytkownika i zamówienia? Czy jest jeszcze inny sposób? Proszę o pomoc.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...