Интеграция WooCommerce (WordPress)

Если вы хотите продавать пакеты AtomX на своем сайте WordPress, то вы можете использовать плагин для создания магазина внутри сайта - WooCommerce (самый популярный магазин для WordPress).

Мы предоставим код для интеграции вашего магазина на базе WooCommerce с расширением (чтобы генерировать коды активации и успешно их применять в расширении).

Как это работает?

  1. Во время каждого заказа на вашем сайте (действует только на маркированные товары - пакеты AtomX) ваш сайт будет генерировать специальный код для активации, который будет показан пользователю после оплаты товара.
  2. Сгенерированный код будет отправлен на наш API сервер для хранения и сверки кодов в будущем.
  3. Покупатель вводит полученный код в расширении и успешно активирует пакет.
  4. У вас еще один счастливый покупатель!
note
  • На наш API сервер будет отправлен код покупки только при условии статуса заказа: Processing / Completed.
  • Если при попытке активации код не будет найден (значит он не был отправлен с вашего сайта, следовательно покупка с данным кодом не произошла / или не завершена) - пакет нельзя будет активировать.
  • Если пользователь захочет вернуть деньги и сделает возврат для всего заказа - то код покупки аннулируется.

Процесс покупки товара

После покупки товаров на вашем сайте (а именно на странице благодарности и прочих деталей покупки), рядом с пакетами AtomX будет указан код покупки.
Обратите внимание, что для товаров не являющихся пакетами AtomX - код покупки не указан (т.к они не являются частью интеграции).

WooCommerce Order Received With Purchase Code AtomX

Эти же данные (купленные товары и коды активации для пакетов) будут отправлены покупателю на E-mail, и доступны для просмотра его в аккаунте (на вашем сайте):

WooCommerce Order Received In Account

note
  • Если пользователь приобритет несколько разных пакетов AtomX, то для каждого будет сгенерирован уникальный код.
  • Если пользователь купит более одного экземпляра того же самого пакета, будет сгененирован только один код, который можно будет использовать для всех экземляров в данном заказе.
  • Продукты не связанные с пакетами не будут генерировать коды покупок, и отправлять их на сервер.

Процесс интеграции

Войдя на свой сайт, откройте центр управления: WP-Admin > Appearance > Theme Editor и найдите файл functions.php (на панели справа).

WooCommerce Theme Editor - find Functions.php

Добавьте код написанный на языке PHP для интеграции (код указан ниже) в самый конец файла functions.php

WooCommerce Theme Editor - added code below

PHP код для файла 'functions.php'
/**
* AtomX Extension integration WP WooCommerce - Generate purchase codes
* Get Support: https://aniom.net
* @author aniom
* @version 2.0
* @api 1.0
*/
/**
* Add custom title for generated code (default: AtomX Purchase Code)
*/
define("atomx_custom_title", "AtomX Purchase Code");
/**
* Server address - DO NOT EDIT
*/
define("atomx_server_addr", "http://api.aniom.net/atomx/v1/wc_integration"); //
/*===== Main Code below - do not touch =====*/
add_action('woocommerce_add_order_item_meta','atomExtWC_addCodeToOrderItemMeta', 10, 2 );
add_action('woocommerce_payment_complete', 'atomExtWC_sendCodeToServer', 10, 1);
add_action('woocommerce_order_refunded', 'atomExtWC_orderRefunded', 10, 2 );
/**
* Refund system - disable purchase code if refunded (order cancellation)
* @param integer $order_id Refund main order id
* @param integer $refund_id Cur Refund item ID
*/
function atomExtWC_orderRefunded($order_id, $refund_id){
$order = wc_get_order($order_id);
if($order){
$wc_order_key = $order->get_order_key();
$items = $order->get_items();
$arr_mind_packs = [];
foreach ( $items as $item ) {
$product_id = $item->get_product_id();
$product = wc_get_product($product_id);
$product_meta = $product->get_meta_data()[0];
//product meta
$p_meta_key = $product_meta->key;
$p_meta_val = $product_meta->value;
//Find meta in product linking with Atom package
if($p_meta_key && $p_meta_key == 'atom_extension_package_id'){
$param = [
'status' => "refunded",
'order_id_global' => $order_id,
'wc_order_key' => $wc_order_key,
'atom_package_id' => $p_meta_val
];
//send to server if no in arr (to don't send duplicates WC_order_id)
if (!in_array($wc_order_key, $arr_mind_packs)) {
//send params
$handle = curl_init(atomx_server_addr);
curl_setopt($handle, CURLOPT_POST, 1);
curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($param));
curl_setopt($handle, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'WC-AtomX-Source: '.get_site_url()
]);
curl_exec($handle);
//save in arr for next checks
array_push($arr_mind_packs, $wc_order_key);
}
}
}
}
}
/**
* Generate and add purchase code to item meta data @woocommerce_add_order_item_meta
* @param integer $item_id Item ID
* @param integer $cart_item Product ID in cart order
*/
function atomExtWC_addCodeToOrderItemMeta($item_id, $cart_item) {
$order_id_by_item_id = wc_get_order_id_by_order_item_id($item_id);
$order = wc_get_order($order_id_by_item_id);
//if order exists (right id)
if($order){
$wc_order_key = $order->get_order_key();
$items = $order->get_items();
foreach ( $items as $item ) {
// $item_id = $item->get_id();
$product_id = $cart_item['product_id'];//$item->get_product_id();
$product = wc_get_product($product_id);
//meta args
$meta = $product->get_meta_data()[0];
$meta_key = $meta->key;
$meta_val = $meta->value;
//Find custom key to binding Atom Package
if($meta_key && $meta_key == 'atom_extension_package_id'){
//gen purchase code
$generated_code_md = md5($product_id.':'.$wc_order_key.':'.$meta_val);
//add purchase code to package item in the order
wc_add_order_item_meta($item_id, atomx_custom_title, $generated_code_md, true);
}
}
}
}
/**
* Send data (purchase code/wc_ids) to server after payment complete
* Without this action generated codes will not works
* @param integer $order_id Order ID from action @woocommerce_payment_complete
*/
function atomExtWC_sendCodeToServer($order_id){
$order = wc_get_order( $order_id );
if($order){
$wc_order_key = $order->get_order_key();
$items = $order->get_items();
//Each order product
foreach ( $items as $item ) {
//get product data
$product_id = $item->get_product_id();
$product = wc_get_product($product_id);
$product_meta = $product->get_meta_data()[0];
$item_cart_meta = $item->get_meta_data()[0];
$item_id = $item->get_id();
//cart item meta
$ci_meta_key = $item_cart_meta->key;
$ci_meta_val = $item_cart_meta->value;
//product meta
$p_meta_key = $product_meta->key;
$p_meta_val = $product_meta->value;
//Find meta in product linking with Atom package
if(($p_meta_key && $p_meta_key == 'atom_extension_package_id') && ($ci_meta_key && $ci_meta_key == atomx_custom_title)){
$data = [
'wc_order_key' => $wc_order_key,
'order_id_one' => $item_id,
'order_id_global' => $order_id,
'product_id' => $product_id,
'atom_package_id' => $p_meta_val,
'status' => $order->get_status(),
'generated_purchase_code' => $ci_meta_val,
'currency' => $order->get_currency(),
'billing_firstname' => $order->get_billing_first_name(),
'billing_lastname' => $order->get_billing_last_name(),
'billing_company' => $order->get_billing_company(),
'billing_email' => $order->get_billing_email()
];
//CURL - Send data to Atom Core server
$handle = curl_init(atomx_server_addr);
curl_setopt($handle, CURLOPT_POST, 1);
curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($handle, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'WC-AtomX-Source: '.get_site_url()
]);
curl_exec($handle);
}
}
}
}

Вы так же можете изменить заголовок рядом с кодом покупки (по умолчнанию - AtomX Purchase Code).

/**
* Add custom title for generated code (default: AtomX Purchase Code)
*/
define("atomx_custom_title", "AtomX Purchase Code");

После всех манипуляций с файлом функций - сохраните изменения.

WooCommerce Theme Editor - save changes


Маркировка пакета

Для того, чтобы отделить иные ваши товары в магазине, от пакетов AtomX - нам потребуется добавить простую маркировку для продукта.

Откройте Products > All Products, найдите продукт пакета AtomX и начните редактировать его.

WooCommerce: Open All Products

Откройте параметры Screen Options (правый верхний угол), и убедитесь, чтобы у вас стояла галочка в поле Custom Fields (это специальные поля для ввода данных).

WooCommerce: Show custom fields

Пролистайте страницу в самый низ и найдите группу Custom Fields. После чего нажмите Enter new, чтобы добавить новое поле:

WooCommerce: Add new custom field

Для нового поля введите следующие значения:

  • Название поля: atom_extension_package_id
  • Значения поля: Ваш ID пакета в админ-центре (ниже имеется информация где найти ID, в текущем примере используется цифра 2)

После чего нажмите на кнопку для создания поля.

WooCommerce: Adding new field with params

После проделанных действий не забудьте сохранить изменения в вашем продукте.

WooCommerce: Update product


Экземпляр пакета в админ-центре

Теперь нам нужно найти ID вашего пакета, который необходимо указать для маркировки, для этого перейдите на страницу управления пакетами в админ-центре.

note

Для этого действия вы должны быть зарегистрированы, и у вас должен быть создан экземпляр вашего пакета.

ID пакета указан слева от названия.

Admin-center package ID

Также удостоверьтесь что основной тип активации пакета установлен как:

Admin-center Main activation

warning

Убедитесь, что метод подсчёта связан с текущей интеграцией!
Метод подсчёта указывается только во время создания пакета. Если вы указали неверный метод подсчёта - то сообщите администратору для смены.

Admin-center Counting By Received order WP WC

Теперь интеграция должна успешно работать!

Важно: До запуска вашей рекламной кампании, просим проверить работу кодов активации во избежание проблем.