add sendmail in orders

This commit is contained in:
Your Name
2021-06-21 17:55:53 +03:00
parent 099e0be8f5
commit 5e27771f88
11 changed files with 527 additions and 91 deletions

View File

@@ -4,7 +4,7 @@ use YooKassa\Client;
function anpay_kuri($buy_id){
function anpay_kuri($order_id){
# получаем инфу о заказе
@@ -19,7 +19,7 @@ function anpay_kuri($buy_id){
LEFT JOIN
`price` ON `anbuy`.`number_id` = `price`.`price_id`
WHERE
`buy_id` = '$buy_id'
`buy_id` = '$order_id'
LIMIT 1
";
@@ -39,8 +39,11 @@ function anpay_kuri($buy_id){
return false;
}
# ссылка на статус и номер заказа
$return_url = SITE.'status/'.$buy_id['buy_id'];
# получить ссылку на оплату
$payment = yk_pay($buy_id['currprice'], $buy_id['pricename']);
$payment = yk_pay($buy_id['currprice'], $buy_id['pricename'], $return_url);
if (isset($payment['confirmation']['confirmation_url'])){
$pay_url = $payment['confirmation']['confirmation_url'];
@@ -68,21 +71,25 @@ function anpay_kuri($buy_id){
function resultpay_kuri(){
$source = file_get_contents('php://input');
//$source = file_get_contents('/vhosts/anpay/app/tests/result.json');
//$source = file_get_contents('/thosts/anpdf/app/tests/result.json');
$fjson = '/thosts/anpdf/app/tests/result.json';
file_put_contents($fjson, $source);
// logsave('yk', $source);
$result = json_decode($source, true);
if (isset($result['event'])) {
if ($result['event'] == "payment.succeeded"){
$shop_id = $result['object']['id'];
$find_sql = "SELECT buy_id FROM `anbuy` WHERE `shop_id` = '$shop_id' LIMIT 1";
$find_order = db_get($find_sql);
if (isset($find_order['buy_id'])){
$shop_id = $result['object']['id'];
$find_sql = "SELECT `buy_id` FROM `anbuy` WHERE `shop_id` = '$shop_id' LIMIT 1";
$find_order = db_get($find_sql);
if (isset($find_order['buy_id'])) {
$currdate = date('Y-m-d H:i:s');
@@ -96,11 +103,11 @@ function resultpay_kuri(){
WHERE
`buy_id` = '{$find_order['buy_id']}'";
db_get($supd, 'chitatel');
$result = db_get($supd, 'chitatel'); // фисксируем что оплату получил
}
}
}
}
}
else {
@@ -109,7 +116,7 @@ function resultpay_kuri(){
}
logsave('yk', $source);
return True;
@@ -117,9 +124,10 @@ function resultpay_kuri(){
}
function yk_pay($price, $name){
function yk_pay($price, $name, $return_url = ''){
if ($return_url == '')
$return_url = SITE;
$client = new Client();
$client->setAuth(YID, YKEY);
@@ -132,7 +140,7 @@ function resultpay_kuri(){
),
'confirmation' => array(
'type' => 'redirect',
'return_url' => SITE,
'return_url' => $return_url,
),
'capture' => true,
'description' => $name,
@@ -151,4 +159,30 @@ function resultpay_kuri(){
}
#оповещаем письмом об успешном заказе
function sendstatus_kuri(){
if (isset($find_order['client_id'])) { # получаем клиента
$find_client = db_get("SELECT * FROM `clients` WHERE `client_id` = '{$find_order['client_id']}'");
if (isset($find_client['client_id'])){ # если удалось индефицировать клиента
if ($find_order['delivery_id'] == 1) { #электронный платеж отправляем личный кабинет
$message = "Ваш заказ выполнен. Он доступен в Вашем личном кабинете.\n
Чтобы войти в кабинет перейдите по ссылке - ".SITE.'login';
$subject = "Аргументы Недели: заказ выполнен";
klanmail($find_order['clientmail'], $subject, $message, set('klanmail'));
}
else {
$message = "Ваш платеж подтвержден. Номер заказа {find_order['order_id']}\n
Сообщите его менеджеру при необходимостию";
$subject = "Аргументы Недели: платеж подтвержден";
klanmail($find_order['clientmail'], $subject, $message, set('klanmail'));
}
}
}
}

View File

@@ -7,83 +7,227 @@
function checkout_kuri($priceslug, $delivery_id = 1){
$err_critical = false; // true - не введены обязательные поля
$add_order = false; //по умолчанию не добавлять заказ
$add = []; // массив заполнения заказа
$elements = []; //элементы формы
$pay_ids = [
'1' => 'Оплата на сайте',
'2' => 'Оплата при получении'
];
$pay_id = 2; // по умолчанию оплата при получении
/** был изменен способ доставки в форме
* 1 - электронная
* 2 - самовывоз
* 3 - курьером
*/
//print_r($_POST);
/* ищем есть ли товар */
$price_id = db_get("SELECT * FROM `price` WHERE `priceslug` = '$priceslug' LIMIT 1");
if (isset($price_id['price_id'])) {
if (!isset($price_id['price_id'])) {
echo 'товар не найден';
return false;
}
if ($delivery_id == 1){ // тип товара
$price = $price_id['price']; // электронная книжка
}
else {
$price = $price_id['offline_price']; // бумажная книжка
}
/** определяем цену товара */
if (defined('CLIENT_ID')){
if ($delivery_id == 1){ // тип товара = 1 (только электронная)
$price = $price_id['price']; // электронный прайс
}
else {
$price = $price_id['offline_price']; // бумажный прайс
$delivery = db_get("SELECT * FROM delivery WHERE delivery_id > 1"); // список доставок для бумажной версии
}
$client = client_find_id(CLIENT_ID);
/** фиксируем цену в базу */
$add['buy_price'] = $price;
$add['price'] = $price;
/** если клиент залогинен */
if (defined('CLIENT_ID')){
$client = client_find_id(CLIENT_ID);
if (isset($client['result']['client_id'])){
$client = $client['result'];
}
if (isset($client['result']['client_id'])){
$client = $client['result'];
}
if (isset($_POST['clientmail'])){
}
# если пришла форма
if (count($_POST) > 0){
$errors = []; // ошибки которые вернуться в форму
if (isset($_POST['delivery_id'])){
$delivery_id = (int)$_POST['delivery_id'];
}
if (isset($_POST['pay_id'])){
$pay_id = (int)$_POST['pay_id'];
}
# указан ли в поле email
if (isset($_POST['clientmail']) and trim($_POST['clientmail']) !== '') {
$clientmail = $_POST['clientmail'];
if (!filter_var($clientmail, FILTER_VALIDATE_EMAIL)){
$error_mail = True;
$error['buy_email'] = 'Не указана электронная почта (обязательна для электронных заказов и оплаты онлайн)';
if ($delivery_id == 1 or $pay_id == 1){
$err_critical = True; # обязательное поле для цифрового заказа или оплаты онлайн
}
}
else {
# ищем или создаем клиента
$client = api_add_client($clientmail);
$client = api_add_client($clientmail); # ищем или создаем клиента
}
}
if (isset($client['client_id'])) {
#создаем заказ
$add['client_id'] = $client['client_id'];
$add['buy_email'] = $client['clientmail'];
$add['buy_price'] = $price;
$add['price'] = $price;
$add['buy_status'] = 0;
$add['mail_status'] = 0;
$add['number_id'] = $price_id['price_id'];
$add['pay_id'] = 3; // оплата через Юкассу
$add['delivery_id'] = $delivery_id;
$add['date_start'] = date('Y-m-d H:i:s');
$add['buy_active'] = 0;
$order_id = db_insert('anbuy', $add, 'chitatel'); // добавляем в базу заказ
if (is_array($order_id)){ // неудалось создать заказ
$error_mail = True;
# указано ли поле имя
if (isset($_POST['buy_name']) and trim($_POST['buy_name']) !== '' ) {
$add['buy_name'] = trim($_POST['buy_name']);
}
else {
if ($delivery_id > 1){
$err_critical = True; // обязательное поле для физических заказов
$errors['buy_name'] = 'Не указано имя. Обязательно для получения самовывозом';
}
else { // заказ создался
return anpay_kuri($order_id);
}
}
# указано поле телефон
if (isset($_POST['buy_tel']) and trim($_POST['buy_tel']) !== '') {
$add['buy_tel'] = trim($_POST['buy_tel']);
}
else {
if ($delivery_id == 3){ // обязательное поле для доставки курьером
$err_critical = True;
$errors['buy_tel'] = 'Не указан телефон по которому можно уточнить детали доставки';
}
}
# указано поле адрес
if (isset($_POST['buy_adress']) and trim($_POST['buy_adress']) !== '') {
$add['buy_adress'] = trim($_POST['buy_adress']);
}
else {
if ($delivery_id == 3){
$err_critical = True; // обязательное поле для доставки курьером
$errors['buy_adress'] = 'Не указан адрес куда доставить товар';
}
}
// все поля формы заполнены - пушим заказ
if (!$err_critical){
$add_order = True;
}
}
else {
$error_price = True;
}
/** фикстируем клиента в базу */
if (isset($client['client_id'])) {
$add['client_id'] = $client['client_id'];
$add['buy_email'] = $client['clientmail'];
$submit_link = SITE."checkout/$priceslug/$buy_type";
if ($delivery_id == 1) {
$add_order = True; // для электронного заказа достаточно активного клиента
}
}
include VIEWPATH.'checkout.phtml';
#создаем заказ
if ($add_order){
$add['buy_status'] = 0;
$add['mail_status'] = 0;
$add['number_id'] = $price_id['price_id'];
$add['pay_id'] = 3; // оплата через Юкассу
$add['delivery_id'] = $delivery_id;
$add['date_start'] = date('Y-m-d H:i:s');
$add['buy_active'] = 0;
$order_id = db_insert('anbuy', $add, 'chitatel'); // добавляем в базу заказ
$order_url = SITE."status/$order_id";
if (is_array($order_id)){ // неудалось создать заказ
$error_mail = True;
$error['no_order'] = 'Не удалось сформировать заказ';
}
else { # заказ создался
if ( $delivery_id == 1 or ($_POST['pay_id']) == 1){
echo 'уводим на оплату в Юкассу';
return anpay_kuri($order_id);
}
else { // даем пользователю номер заказа
if (isset($add['buy_email'])) {
$message = "Ваш платеж подтвержден. Номер заказа $order_id\n
Сообщите его менеджеру при необходимости.\n";
$subject = "Аргументы Недели: платеж подтвержден";
$result = klanmail($add['buy_email'], $subject, $message, set('klanmail'));
// echo $result;
}
header("Location: $order_url"); // переводим на инфу про заказа
}
}
}
$submit_link = SITE."checkout/$priceslug/$delivery_id";
include VIEWPATH.'checkout.phtml';
}
# страница с которой
function status_kuri($order_id){
# получаем инфу о заказе
$buy_find = "
SELECT
`buy_id`,
`buy_status`,
`delivery_id`,
`shop_id`
FROM
`anbuy`
WHERE
`buy_id` = '$order_id'
LIMIT 1
";
$buy_id = db_get($buy_find);
include(VIEWPATH.'order_status.phtml');
}

80
app/routes/sendmail.php Normal file
View File

@@ -0,0 +1,80 @@
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
function testmail_kuri(){
echo klanmail('ak@argumenti.ru', 'тестовое письмо', 'Это тестовое письмо о заказах', set('klanmail'));
}
function klanmail( $mail, $subject, $message, $frommail ) {
$mail = mb_strtolower($mail);
if (isset($frommail['login']) and $frommail['login'] !== '')
$login = $frommail['login'];
else {
$login = $frommail['mail'];
}
$send = new PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
$send->isSMTP();
//$send->SMTPDebug=3; // Set mailer to use SMTP
$send->Host = $frommail['host']; // Specify main and backup SMTP servers
// Enable SMTP authentication
$send->Username = $login; // SMTP username
$send->Password = $frommail['password'];
if (isset($frommail['secure'])) {
$send->SMTPSecure = $frommail['secure'];
$send->SMTPAuth = true;
}
else {
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
}
$send->Port = $frommail['port']; // TCP port to connect to
$send->setFrom($frommail['mail'], 'Аргументы Недели');
$send->addAddress($mail, $mail); // Add a recipient
$send->CharSet = 'UTF-8';
$send->isHTML(True); // Set email format to HTML
$send->Subject = $subject;
/*ob_start();
include 'mail.phtml';
$mailbody = ob_get_contents();
ob_end_clean();*/
$send->Body = $message;
//$headers = "MIME-Version: 1.0\r\n";
//$headers .= "Content-type: text/plain; charset=utf-8\r\n";
//$headers .= "Content-Transfer-Encoding: 8bit \r\n";
//$headers .= "From: nomer@arguments.ru\r\n";
//$headers .= 'Reply-To: nomer@arguments.ru'."\r\n";
//if (mail($mail, $subject, $message, $headers))
// $status = 'OK';
//else
// $status = 'NO';
if($send->send())
$status = 'OK';
else {
$status = 'NO';
echo 'Mailer Error: ' . $send->ErrorInfo."\n";
}
return $status;
}