2014-11-11 2 views
2

В настоящее время я работаю над API-интерфейсом отправки для OpenCart. Цель этого API - не для части веб-страницы OpenCart, а для нашего мобильного приложения для взаимодействия с OpenCart.Выполнение API-интерфейса Checkout API в OpenCart

Из моих исследований, как представляется, два способа представить заказ:

один метод:

На веб-странице OpenCart, когда вы хотите физически хотите подать заявку, вы идете через рабочий процесс:

  1. товар в корзину через checkout/cart/add

  2. вход payment_address через checkout/payment_address/validate

  3. вход shipping_address через checkout/shipping_address/validate

  4. метод ввода судоходства через checkout/shipping_method/validate

  5. вход Способ оплаты через checkout/payment_method/validate

  6. Подтверждение/отправить заказ через (я не Не знаю, какой URL-адрес действительно запрашивается для отправки заказа).

Оказывается, преимущество этого метода является то, что, учитывая условие, что клиента регистрируются в, И вы есть API для добавления элементов в корзину, вам не нужно проходить через шаг вручную добавления продуктов в корзину по URL-адресу. Вы также можете использовать строку, такую ​​как existing в payment_address и shipping_address, чтобы обозначить существующий адрес (так что вам не нужно вручную вводить что-либо вообще в URL-адрес).

Способ второй:

Использование checkout/manual.Этот метод, однако, требует полной настройки входов вручную для всего:

  1. store_id

  2. customer_id

  3. customer_group_id

  4. payment_country_id

  5. payment_zone_id

  6. payment_country_id

  7. order_product []

  8. order_voucher

  9. SHIPPING_METHOD []

  10. order_total [contains keys such as code, title, text, value, and sort_order]

  11. оплаты []

  12. Может быть что-то пропустил ..

Использование проверки/руководство по-видимому, API, что для наших потребностей, и я особенно нравится, что он будет возвращать сообщения/предупреждения об ошибках, если запрос не удалось - однако, первый метод позволяет клиенту иметь интерфейс для добавления продуктов в корзину и доступа к существующим переменным, таким как shipping_address, payment_address и т. д., учитывая условие, что они вошли в систему (я знаю, что там это код, который делает cart->clear() и customer->logout(), если пользователь вошел в систему).

Мой вопрос: кто-нибудь когда-либо осуществлял проверку вручную раньше? Как вы его реализовали?

Update:

В настоящее время пишет сценарий, который будет POST некоторых фиктивных входов checkout/manual:

public function submit() 
{ 
    # Our new data 
    $data = array(
     "store_id" => 0, 
     "customer" => "My Name", 
     "customer_id" => 1, 
     "customer_group_id" => 1, 
     "payment_country_id" => 223, 
     "payment_zone_id" => 3663, 
     "order_product[0][product_id]" => 1791, 
     "order_product[0][quantity]" => 1, 
     "order_product[0][price]" => 5.01, 
     "order_total[0][code]" => "sub_total", 
     "order_total[0][title]" => "Sub-Total", 
     "order_total[0][text]" => "$5.01", 
     "order_total[0][value]" => 5.01, 
     "order_total[0][sort_order]" => 1, 
     "order_total[1][code]" => "total", 
     "order_total[1][title]" => "Total", 
     "order_total[1][text]" => "$5.01", 
     "order_total[1][value]" => 5.01, 
     "order_total[1][sort_order]" => 9, 
     "payment_firstname" => "My", 
     "payment_lastname" => "Name", 
     "payment_company" => "SomeCompany", 
     "payment_address_1" => "#123 1234 NameOf street", 
     "payment_address_2" => "", 
     "payment_postcode" => "12345", 
     "payment_city" => "New York", 
     "shipping_firstname" => "My", 
     "shipping_lastname" => "Name", 
     "shipping_company" => "SomeCompany", 
     "shipping_address_1" => "#123 1234 NameOf street", 
     "shipping_address_2" => "", 
     "shipping_postcode" => "12345", 
     "shipping_city" => "New York", 
     "shipping" => "free.free", 
     "shipping_method" => "Free Shipping", 
     "shipping_code" => "free.free", 
     "shipping_country_id" => 223, 
     "shipping_zone_id" => 3663, 
     "payment" => "cod", 
     "payment_method" => "Cash On Delivery", 
     "payment_code" => "cod", 
     "order_status_id" => 1 
    ); 

    # Create a connection 
    $url = HTTP_SERVER . 'index.php?route=checkout/manual'; 
    $ch = curl_init($url); 

    # Form data string 
    $postString = http_build_query($data, '', '&'); 

    # Setting our options 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    # Get the response 
    $response = curl_exec($ch); 
    echo $response; 
    curl_close($ch); 
} 

Однако возвращение данные заключаются в следующем:

{"error":{"warning":"You do not have permission to access this page, please refer to your system administrator."}}

Обновление 2 :

ошибка была брошена, так как я не мог удовлетворить ни одно из этих условий, когда callling checkout/manual: $this->user->isLogged() && $this->user->hasPermission('modify', 'sale/order')

я временно удален его на заменить его true, так что я всегда могу вручную добавить заказ.

Используя мой входной Params, я получаю этот JSON:

"success":"Order totals has been successfully re-calculated!", однако, проверить список административных распоряжений, он не появляется новый порядок будет добавлен.

Update 3:

Несмотря на возможность создания заказа, я не знаю, как отправить заказ.

+2

Единственная причина, по которой этот очень взломанный, неприятный метод сидит с другими файлами переднего плана, заключается в том, что он может более легко получить доступ к модулям итогов, которых нет в фоновом контенте. Это часть страницы редактирования правки администратора (в частности, для обновления итогов). Я бы настоятельно рекомендовал игнорировать его и создать свой собственный метод. – rjdown

ответ

0

Прежде всего, очень сложно прокомментировать код $this->user->isLogged() && $this->user->hasPermission('modify', 'sale/order'). Вместо этого добавьте что-то вроде переопределения к частям, которые ссылаются на $this->request->post['customer_id'], чтобы вы установили данные сообщения на основе фактического идентификатора клиента. В противном случае постоянные клиенты могли бы обманывать данные регистрации и проверки в качестве другого клиента, просто отправив все необходимые данные POST.

Что касается создания фактического заказа, вы заметите, что checkout/manual возвращает json со всеми необходимыми данными о заказе. Все, что вам нужно сделать, это добавить что-то вроде этого после if (!isset($json['error'])) {

$this->load->model('checkout/order'); 
$json['order_id'] = $this->model_checkout_order->addOrder($json); 

Затем верните JSON в мобильное приложение и показать подтверждение или делать то, что вы хотите с данными заказа. Также может быть полезно отправить уникальный ключ мобильного приложения по проверке того, разрешен ли запрос и/или ссылка на соответствующую учетную запись клиента.

Смежные вопросы