Code Monkey home page Code Monkey logo

bonus-plus-wp's People

Contributors

evgrezanov avatar mikuznetsov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

bonus-plus-wp's Issues

Сообщение в ЛК не зарегистрированным пользователям

Сейчас я установил ссылку на главной странице на раздел бонусной программы.
При нажатие просить авторизоваться или зарегаться на сайте, после регистрации получается что я остался на пустом экране че делать дальше вообще для клиента будет не понятно, если конечно он не догадается вернётся на главную

Интеграция в процесс регистрации покупателя

Номер телефона покупателя является уникальным идентификатором в БонусПлюс. Дальнейшие действия выполняются после получения от покупателя его номера телефона.

  1. Регистрация нового покупателя
    При регистрации нового покупателя интернет-магазин запрашивает информацию о покупателе в системе лояльности GET /customer. Если покупатель уже существует в лояльности, тогда интернет-магазин может предзаполнить форму регистрации данными из БонусПлюс. После завершения регистрации интернет-магазин передает данные о покупателе в лояльность с помощью POST /customer.
    В процессе регистрации можно произвести проверку телефонного номера покупателя и получить его согласие на дальнейшую отправку сообщений. Для этого можно использовать методы PUT /customer/{phone}/sendCode и PUT /customer/{phoneNumber}/checkCode/{code}

  2. Аутентификация покупателя
    При аутентификации(входе) пользователя в интернет-магазин можно запросить данные о клиенте из лояльности с помощью GET /customer и отобразить нужную информацию: статус, бонусный баланс и т.д.

  3. Редактирование данных покупателя
    При редактировании данных покупателя в интернет-магазине можно передать эту информацию в лояльность с помощью PUT /customer

Fix Warning

[24-Sep-2023 08:51:15 UTC] PHP Warning: Undefined array key "discountCardName" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 113
[24-Sep-2023 08:51:15 UTC] PHP Warning: Undefined array key "purchasesTotalSum" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 114
[24-Sep-2023 08:51:15 UTC] PHP Warning: Undefined array key "purchasesSumToNextCard" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 115
[24-Sep-2023 08:51:15 UTC] PHP Warning: Undefined array key "nextCardName" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 116
[24-Sep-2023 08:51:27 UTC] PHP Warning: Undefined array key "discountCardName" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 113
[24-Sep-2023 08:51:27 UTC] PHP Warning: Undefined array key "purchasesTotalSum" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 114
[24-Sep-2023 08:51:27 UTC] PHP Warning: Undefined array key "purchasesSumToNextCard" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 115
[24-Sep-2023 08:51:27 UTC] PHP Warning: Undefined array key "nextCardName" in /home/r/redmon/bonuspluswp.site/public_html/wp-content/plugins/bonus-plus-wp/inc/ClientProfile.php on line 116

Добавить if key_exist

Списание бонусов

todo

  1. Сделать несколько акций с различными схемами начисления-списания бонусов (начисление, списание, процент)
  2. Переписать функцию вывода информации о бонусах на странице корзины и чекаута и карточке товара:
    2.1 Ваш бонусный баланс NN.NN бонусов
    2.2 За покупку будет списано NN.NN бонусов / На данную покупку бонусы не применяются
    2.3 После покупки будет начислено NN.NN бонусов
  3. Списание бонусов после того как заказ Выполнен, когда заказ в статусе ожидает оплата - бонусы нужно резервировать https://bonusplus.pro/api/Help/Api/PATCH-customer-phoneNumber-balance-reserve
  4. Списываем все доступные для списания бонусы
telegram-cloud-document-2-5260633058339464387.mp4

User story

Пример интеграции 1с Битрикс и БонусПлюс
https://hookah-time.shop/
https://bonaladies.ru/

Как я для себя это вижу клиент заходит в карточку видит что при покупке данного товара ему начислится такой-то бонус.
Далее клиент помещают товар в корзину в корзине чуть ниже поля купоны написана сумма для списания
Клиент нажимает кнопку списать ему приходит смс с кодом и подтверждает путём вода
<Наверное это надо через купоны саму скидку реализовать>
Но допустим на некоторые товары мы можем применить ограничения для списания, допустим не 25 % а 15% но не более чем баланс бонусов
В этом случае мы должны отправит в б+ список товаров и узнать размер скидки и выпустить купон на сумму скидки

Сценариев множество
Во-первых мы передаем товары в бонус плюс с сайта соответственно бонус плюс знает id наших товаров
Нам надо только сообщить что в корзине и б+ скажет какая сумма скидки
Тоесть настройки скидки на категории это в Нутри Б+ и нашу задачу не задевает

Нам надо научится делать купон из полученного результата
Тесть мы говорим id товаров
Бонус плюс передаёт сумму скидки допустим 100 р
Мы должны вставить эту сумму в купоны например

Вопрос только как создать купон и вставить его в поле купоны чтобы клиент не додумывал а видел только результат

там 2 сценария если клиент не авторизован то после оформления заказа отображается информация о начислениях

2й СЦЕНАРИ ОТОБРОЖАЕТ СКОЛЬКО БУДЕТ СПИСАНО ЕСЛИ ДОСТУПНО! "ТОЕСТЬ НЕТ КНОПКИ СПИСАТЬ" И СКОЛЬКО БУДЕТ НАЧИСЛЕНО ПОСЛЕ ПОКУПКИ

Не происходит выгрузка товара в БП

В версии 2.4 работало, в версии 2.6 сломалось (2.5 не тестил).
В версии 2.6 при нажатии на кнопку экспорта самого экспорта не происходит, идет перенаправление на страницу настроек плагина.
Upd: В версии 2.4 указано, что экспортированы категории, товары и вариации, но фактически в БП список товаров пуст.
Upd2: установил опять версию 2.6, экспорт не заработал, товары не появились, но сумма баллов к списанию и начислению при оформлении заказа появились (ранее сами цифры отсутствовали). Было указано: К списанию 550, к начислению 475. По факту начислилось на 150 баллов больше, так как есть логика акции, согласно которой при чеке от 5к идет начисление доп 150 баллов. Это бы хотелось чтобы отображалось тоже.

Добавить документацию по шорткоду

  1. Шорткод [bpwp_api_customer_bonus_card] - это запрос в плагин, верно? Смогут ли другие сайты использовать данный шорткод и какие возможны еще отображения (срок жизни бонусов, скидки и т.п) ?

  2. Настройка виджета карты БонусПлюс
    Ссылки в данных полях генерируются из плагина? Или от куда их брать? Есть какая ни будь инструкция?

добавить опции для вывода в шорт-коде виджета

в опциях добавляем 2 поля для шорткода:

  • Сообщение для людей без номера телефона и даты рождения в Платежном адресе (ссылка на страницу редактирования платежного адреса)
  • Ссылка для страницы где будут вводится
  • Сообщение для людей не зарегистрировавшихся/подтвердивших номер телефона в Бонус+ (ссылка на страницу ЛК Бонус+)
  • Ссылка для страницы где будут вводится
  • Добавить информацию в README
  • Обновить версии плагина в 2х местах
  • добавить chanchelog
  • Обновить в офф репозитории

На странице платежного адреса пробуем выделить стилями:
незаполненную дату рождения
незаполненный

image

Изменение виджета карты

Но что что мне не нравиться это
1 после авторизации на сайте но не опознанным в Б+ виджет отображает информацию для авторизованного

Доработка плагина Бонус Плюс

Евгений, добрый день!
Меня зовут Антон, мы ранее уже общались примерно год назад по поводу работы над плагином Бонус+, я отправлял вам предложения по его работе, сайт sweet-retail.ru.
До сих пор не закрыта у нас потребность в бонусной системе, хотелось бы с вашей помощью докрутить и внедрить это решение в сжатые сроки к нам на сайт, естественно, не бесплатно.
Подскажите, как нам поступить? Я не силен в ТЗ, но общими словами могу обьяснить, что хотелось бы, чтобы вы могли определить стоимость работы, если вам это интересно.
Для связи оставляю почту [email protected], а также telegram @W017W

Версия 2.8 - требования

Требования

  • Рефакторинг авторизации #47 ё
  • #42
  • Проверить баг с 2м списанием бонусов #40
  • #56
  • Исправлена проблема с безопастностью при генерации QR кода в личном кабинете #21
  • убрать дату рождения #58

История операций по Бонусному счету в ЛК пользователя

Неверный вывод в ЛК если пользователь существует в Б+

User story

В Мой Аккаунт - Бонус+ выводится "Вы еще не зарегистрированы в программе лояльности" с кнопкой "Создать учетную запись" (хотя в действительности аккаунт с данным номером есть в Бонус+). При нажатии на предложенную кнопку выходит "При регистрации произошла ошибка
{"code":"CUSTOMER_ALREADY_EXISTS","msg":"Пользователь с заданным номером телефона или номером карты уже существует."}"
Есть ли какой-то хотфикс?

Добавить функционал в шорткод личного кабинета

Проверка заполненности платежного адреса с телефоном и датой рождения (рис 2)
если проверка пройдена выводим форму
Подтверждение телефона по СМС
Разработка функционала отправки смс и подтверждения телефона
Если телефон подтвержден выводим форму Информация по карте лояльности (рис 1)

Рефакторинг авторизации

TODO

  • Поле дата рождения делаем не обязательным
  • Создаем end-point для запроса GET /customer которая возвращает либо информацию о существующем клиенте, либо ошибку
  • Рефакторинг функции bpwp_customer_login добавляем вызов end-point
  • Создаем end-point для запроса POST /customer для создания нового пользователя
  • переписать код отправки и подтверждения OTP https://idehweb.com/product/login-with-phone-number-in-wordpress/
  • выпилить весь ненужный код

При подтверждения телефона есть проблема при обновлении страницы

Описание

После обновления страницы при подтверждения телефона есть проблема;
При запросе одноразового пароля методом PUT, после нажатия кнопки отправить пароль до ввода OTP если пользователь обновит страницу в браузере по кнопка F5 то произойдет подтверждение телефона без ввода OTP.

Требования

  • Отправка кода OTP с помощью AJAX на серверную часть (PHP).
  • Валидация и обработка кода OTP на серверной части.
  • Возвращение ответа на клиентскую часть и обработка результата.
  • Изменения в JavaScript коде:

// Замените функцию bp_send_otp следующим кодом:
   bp_send_otp: async function(ajax_url, authKey, redirect) {
   hide(document.getElementById("bpwp-verify-end"));

    // Получение значения OTP из input поля
    const otpInputValue = document.getElementById("bpwpOtpInput").value;

    // AJAX запрос для отправки OTP на серверную часть
    $.ajax({
        url: ajax_url,
        type: 'POST',
        data: {
            action: 'bpwp_send_otp',
            otp: otpInputValue,
            auth_key: authKey
        },
        success: function(response) {
            if (response.status === 'success') {
                document.getElementById('bpmsg').innerHTML = 'Подтверждено, сейчас вы будете перенаправлены!';
                show(document.getElementById('bpmsg'));
                window.location.href = redirect;
            } else {
                // Обработка ошибок
                document.getElementById('bpmsg').innerHTML = 'Ошибка: ' + response.message;
                show(document.getElementById('bpmsg'));
            }
        },
        error: function(error) {
            console.log('Request error!');
            console.log(error);
        }
    });
},
  • Изменения в PHP коде:

// Добавьте этот код в ваш functions.php или соответствующий файл

add_action('wp_ajax_bpwp_send_otp', 'bpwp_send_otp');
add_action('wp_ajax_nopriv_bpwp_send_otp', 'bpwp_send_otp');

function bpwp_send_otp() {
    $otp = isset($_POST['otp']) ? sanitize_text_field($_POST['otp']) : '';
    $auth_key = isset($_POST['auth_key']) ? sanitize_text_field($_POST['auth_key']) : '';

    // Здесь производите валидацию и обработку кода OTP с использованием $otp и $auth_key
    // ...

    // В зависимости от результата отправьте ответ в формате JSON
    if ($success) {
        wp_send_json_success(array('message' => 'Успешное подтверждение'));
    } else {
        wp_send_json_error(array('message' => 'Ошибка при подтверждении'));
    }
}

Эти изменения должны помочь вам справиться с проблемой безопасности, связанной с хранением ключа API в глобальном объекте window. Вместо этого код OTP отправляется на серверную часть для валидации и обработки.

Стирать мету с данными bonus+ при изменении платежного телефона

// Удаление меты при изменении телефона
add_action( 'woocommerce_customer_save_address', 'remove_user_meta_on_phone_change', 10, 2 );

function remove_user_meta_on_phone_change( $customer_id, $load_address ){
    if ( ! is_user_logged_in() ) return;

    // Получаем старый и новый телефон
    $old_phone = get_user_meta( $customer_id, 'billing_phone', true );
    $new_phone = $load_address['billing_phone'];

    // Если телефон изменился
    if ( $old_phone != $new_phone ) {
        // Удаление меты пользователя
        delete_user_meta( $customer_id, 'custom_meta_key' );
    }
}

Баг с бонусами

          > Понял, в чем конкретно баг с бонусами: судя по всему, у вас идет расчет бонусов к начислению по сумме до списания баллов, а у нас Б+ считает баллы к начислению по сумме оплаты итоговой после списания баллов за покупку. Пример: Имеем в корзине 2 товара по 2500р. В карточке этого товара отображается к начислению 225 баллов за шт (считает, по идее, так: 5% (это 125 баллов) за покупку + 100 баллов за чек выше 2к).

Стоит отметить: у нас по карте начисление 5% и акции +100 бонусов при чеке от 2к, +150 при чеке от 3.5к, +200 при чеке от 5к. Идем далее: В корзине отображается, что к начислению 450 баллов (считает 125+125+200=450 баллов), а к списанию 500 баллов. Но, так как мы оплачиваем в таком случае 4500 руб, то к начислению выходит 112,5+112,5 (это за товары суммой 4500) + 200 (так как акция считает сумму чека, а не оплаты после скидки) = 425 баллов. Так БонусПлюс на своей стороне и рассчитывает и проводит, а вот в плагине происходит не так...

@yurovigorr можете дать ссылку на товар? попробуем повторить - пока сложно понять

Originally posted by @evgrezanov in #50 (comment)

Добавить в репозиторий WordPress

  • ## Tested Up To Value is Out of Date, Invalid, or Missing

The tested up to value in your plugin is not set to the current version of WordPress. This means your plugin will not show up in searches, as we require plugins to be compatible and documented as tested up to the most recent version of WordPress.

Please update your readme to show that it is tested up to the most recent version of WordPress. You cannot set it beyond the current version, as that will similarly cause your plugin not to be available on searches.

Example(s) from your plugin:

bonus-plus-wp/readme.txt:6:Tested up to: 5.3

  • ## Incorrect Stable Tag

In your readme, your 'Stable Tag' does not match the Plugin Version as indicated in your main plugin file.

Readme:

bonus-plus-wp/readme.txt:7:Stable tag: 4.3

Plugin File:

bonus-plus-wp/bonus-plus-wp.php:19: * Version: 1.0

Those values need to be the same, or else your plugin will not download properly from WordPress.org. Also keep in mind, if they're out of sync people may not get the upgrade they expect later on. It's best to get in the habit now.

We strongly recommend you use Semantic Versioning (aka SemVer) for managing versions:

https://en.wikipedia.org/wiki/Software_versioning
https://semver.org/

Please note: While currently using the stable tag of trunk currently works in the Plugin Directory, it's not actually a supported or recommended method to indicate new versions and has been known to cause issues with automatic updates.

We ask you please properly use tags and increment them when you release new versions of your plugin, just like you update the plugin version in the main file. Having them match is the best way to be fully forward supporting.

  • ## Using CURL Instead of HTTP API

WordPress comes with an extensive HTTP API that should be used instead of creating your own curl calls. It’s both faster and more extensive. It’ll fall back to curl if it has to, but it’ll use a lot of WordPress’ native functionality first.

https://developer.wordpress.org/plugins/http-api/

Please note: If you're using CURL in 3rd party vendor libraries, that's permitted. It's in your own code unique to this plugin (or any dedicated WordPress libraries) that we need it corrected.

Example(s) from your plugin:

bonus-plus-wp/functions.php:33: $result = curl_exec($ch);

  • ## Data Must be Sanitized, Escaped, and Validated

When you include POST/GET/REQUEST/FILE calls in your plugin, it's important to sanitize, validate, and escape them. The goal here is to prevent a user from accidentally sending trash data through the system, as well as protecting them from potential security issues.

SANITIZE: Data that is input (either by a user or automatically) must be sanitized as soon as possible. This lessens the possibility of XSS vulnerabilities and MITM attacks where posted data is subverted.

VALIDATE: All data should be validated, no matter what. Even when you sanitize, remember that you don’t want someone putting in ‘dog’ when the only valid values are numbers.

ESCAPE: Data that is output must be escaped properly when it is echo'd, so it can't hijack admin screens. There are many esc_*() functions you can use to make sure you don't show people the wrong data.

To help you with this, WordPress comes with a number of sanitization and escaping functions. You can read about those here:

https://developer.wordpress.org/plugins/security/securing-input/
https://developer.wordpress.org/plugins/security/securing-output/

Remember: You must use the most appropriate functions for the context. If you’re sanitizing email, use sanitize_email(), if you’re outputting HTML, use esc_html(), and so on.

An easy mantra here is this:

Sanitize early
Escape Late
Always Validate

Clean everything, check everything, escape everything, and never trust the users to always have input sane data. After all, users come from all walks of life.

Example(s) from your plugin:

bonus-plus-wp/inc/WooAccount.php:75: $is_debug = isset($_REQUEST['bpwp-debug']) ? $_REQUEST['bpwp-debug'] : '';

  • ## Variables must be escaped when echo'd

Much related to sanitizing everything, all variables that are echoed need to be escaped, so it can't hijack admin screens. There are many esc_*() functions you can use to make sure you don't show people the wrong data.

This is true for all $-variables, as it's possible that an XSS vulnerability in another plugin, or a MITM (Man in the Middle) attack, could subvert your data. It's doubly important when you're echoing content on the back-end of WordPress, as those are regularly targeted for exploits. By escaping, you ensure that you have future-proofed your plugin and protected your users.

Also keep in mind that sometimes a function is echoing when it should really be returning content instead. This is a common mistake when it comes to returning JSON encoded content. Very rarely is that actually something you should be echoing at all. Echoing is because it needs to be on the screen, read by a human. Returning (which is what you would do with an API) can be json encoded, though remember to sanitize when you save to that json object!

There are a number of options to secure all types of content (html, email, etc). Yes, even HTML needs to be properly escaped.

https://developer.wordpress.org/plugins/security/securing-output/

Remember: You must use the most appropriate functions for the context. If you’re outputting HTML, use esc_html(), and so on.

Example(s) from your plugin:

bonus-plus-wp/inc/MenuSettings.php:59: echo implode(' | ', $nav_items);

  • ## Do not use PHP Short Tags

The primary issue with PHP's short tags is that PHP managed to choose a tag (<?) that was used by another syntax: XML.

With the option enabled, you aren't able to raw output the xml declaration without getting syntax errors:

This is a big issue when you consider how common XML parsing and management is.

We know as of PHP 5.4, tags are supported everywhere, regardless of short tags settings. This should mean they're safe to use in portable code but in reality that has proven not to be the case. Also it's possible to disable short-tags, which means your plugin will unexpectedly break. Basically the risk here is way higher than the benefits.

At this time, we ask that no plugin use PHP short tags, for sanity.

Example(s) from your plugin:

bonus-plus-wp/inc/profile.php:49:
bonus-plus-wp/inc/profile.php:50:

<?= $title


bonus-plus-wp/inc/profile.php:51:

<?= $desc


bonus-plus-wp/inc/profile.php:52:

Версия 2.11 - требования

TO DO

  • списание бонусов #63 @Mikuznetsov
  • исправить warning Trying to access array offset on value of type int +wp-content/plugins/bonus-plus-wp/inc/ApiHelper.php:56 на странице карточки товара @evgrezanov
  • plugin-check #55 @Mikuznetsov
  • При отмене - вернуть зарезервированные бонусы

Отображение и начисление бонусов в WooCommerce

Требования

  • Отображение количетва бонусов при покупке в карточке товара https://bonaladies.ru/catalog/topy/bona_fide_muscletop_tiger_lily_acid_green/
    image
  • На страницы корзины (или чекаута ❓ ) должно отображаться количество бонусов доступных для списания на товары находящиеся в корзине
  • В комментарий заказа записывается информация о начислении бонусов
  • При смене статуса заказа на успешно реализован отправлять данные в б+ https://bonusplus.pro/api/Help/Api/POST-retail

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.