Jump to content

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More