evgrezanov / bonus-plus-wp Goto Github PK
View Code? Open in Web Editor NEWПлагин для синхронизации WooСommerce с программой лояльности bonusplus.pro
Home Page: https://wordpress.org/plugins/bonus-plus-wp/
License: Apache License 2.0
Плагин для синхронизации WooСommerce с программой лояльности bonusplus.pro
Home Page: https://wordpress.org/plugins/bonus-plus-wp/
License: Apache License 2.0
Сейчас я установил ссылку на главной странице на раздел бонусной программы.
При нажатие просить авторизоваться или зарегаться на сайте, после регистрации получается что я остался на пустом экране че делать дальше вообще для клиента будет не понятно, если конечно он не догадается вернётся на главную
Номер телефона покупателя является уникальным идентификатором в БонусПлюс. Дальнейшие действия выполняются после получения от покупателя его номера телефона.
Регистрация нового покупателя
При регистрации нового покупателя интернет-магазин запрашивает информацию о покупателе в системе лояльности GET /customer. Если покупатель уже существует в лояльности, тогда интернет-магазин может предзаполнить форму регистрации данными из БонусПлюс. После завершения регистрации интернет-магазин передает данные о покупателе в лояльность с помощью POST /customer.
В процессе регистрации можно произвести проверку телефонного номера покупателя и получить его согласие на дальнейшую отправку сообщений. Для этого можно использовать методы PUT /customer/{phone}/sendCode и PUT /customer/{phoneNumber}/checkCode/{code}
Аутентификация покупателя
При аутентификации(входе) пользователя в интернет-магазин можно запросить данные о клиенте из лояльности с помощью GET /customer и отобразить нужную информацию: статус, бонусный баланс и т.д.
Редактирование данных покупателя
При редактировании данных покупателя в интернет-магазине можно передать эту информацию в лояльность с помощью PUT /customer
[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
Пример интеграции 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 баллов. Это бы хотелось чтобы отображалось тоже.
Шорткод [bpwp_api_customer_bonus_card] - это запрос в плагин, верно? Смогут ли другие сайты использовать данный шорткод и какие возможны еще отображения (срок жизни бонусов, скидки и т.п) ?
Настройка виджета карты БонусПлюс
Ссылки в данных полях генерируются из плагина? Или от куда их брать? Есть какая ни будь инструкция?
в опциях добавляем 2 поля для шорткода:
На странице платежного адреса пробуем выделить стилями:
незаполненную дату рождения
незаполненный
Описание проблемы здесь
Но что что мне не нравиться это
1 после авторизации на сайте но не опознанным в Б+ виджет отображает информацию для авторизованного
3 я где то писал но не нашёл
Ссылки куда отправлять клиента после того как он завершил регистрацию
Было бы неплохо добавить согласие на обработку но именно ссылкой в плагин
Что бы плагин просто поставить галочку
Евгений, добрый день!
Меня зовут Антон, мы ранее уже общались примерно год назад по поводу работы над плагином Бонус+, я отправлял вам предложения по его работе, сайт sweet-retail.ru.
До сих пор не закрыта у нас потребность в бонусной системе, хотелось бы с вашей помощью докрутить и внедрить это решение в сжатые сроки к нам на сайт, естественно, не бесплатно.
Подскажите, как нам поступить? Я не силен в ТЗ, но общими словами могу обьяснить, что хотелось бы, чтобы вы могли определить стоимость работы, если вам это интересно.
Для связи оставляю почту [email protected], а также telegram @W017W
В Мой Аккаунт - Бонус+ выводится "Вы еще не зарегистрированы в программе лояльности" с кнопкой "Создать учетную запись" (хотя в действительности аккаунт с данным номером есть в Бонус+). При нажатии на предложенную кнопку выходит "При регистрации произошла ошибка
{"code":"CUSTOMER_ALREADY_EXISTS","msg":"Пользователь с заданным номером телефона или номером карты уже существует."}"
Есть ли какой-то хотфикс?
Проверка заполненности платежного адреса с телефоном и датой рождения (рис 2)
если проверка пройдена выводим форму
Подтверждение телефона по СМС
Разработка функционала отправки смс и подтверждения телефона
Если телефон подтвержден выводим форму Информация по карте лояльности (рис 1)
Выводить сообщение и ссылку на /my-account/edit-address/billing/
После обновления страницы при подтверждения телефона есть проблема;
При запросе одноразового пароля методом PUT, после нажатия кнопки отправить пароль до ввода OTP если пользователь обновит страницу в браузере по кнопка F5 то произойдет подтверждение телефона без ввода OTP.
// Замените функцию 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);
}
});
},
// Добавьте этот код в ваш 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 отправляется на серверную часть для валидации и обработки.
@Mikuznetsov поставил updraft - можно слить на локалку, вроде норм работает с локалки
// Удаление меты при изменении телефона
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' );
}
}
Выпадающий список ( телефону/email/ сначала по телефону, затем по email)
Warning: Invalid argument supplied for foreach() in /home/r/redmon/wphire.ru/public_html/wp-content/plugins/bonus-plus-wp/functions.php on line 93
> Понял, в чем конкретно баг с бонусами: судя по всему, у вас идет расчет бонусов к начислению по сумме до списания баллов, а у нас Б+ считает баллы к начислению по сумме оплаты итоговой после списания баллов за покупку. Пример: Имеем в корзине 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)
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
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.
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);
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'] : '';
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);
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:
<?= $desc
Trying to access array offset on value of type int +wp-content/plugins/bonus-plus-wp/inc/ApiHelper.php:56
на странице карточки товара @evgrezanovA declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.