Files
anpdf/app/routes/anpay.php
2023-05-27 17:51:41 +00:00

271 lines
8.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use YooKassa\Client;
function anpay_kuri($order_id){
# получаем инфу о заказе
$buy_find = "
SELECT
`buy_id`,
`buy_status`,
`pricename`,
`buy_email`,
`anbuy`.`price` as `currprice`
FROM
`anbuy`
LEFT JOIN
`price` ON `anbuy`.`number_id` = `price`.`price_id`
WHERE
`buy_id` = '$order_id'
LIMIT 1
";
$buy_id = db_get($buy_find);
# заказ не найден
if (!isset($buy_id['buy_id'])){
echo 'заказ не найден!';
return false;
}
# проверяем статус заказа
if ($buy_id['buy_status']) {
echo 'заказ уже оплачен!';
return false;
}
# ссылка на статус и номер заказа
$return_url = SITE.'status/'.$buy_id['buy_id'];
# получить ссылку на оплату
$payment = yk_pay($buy_id, $return_url);
if (isset($payment['confirmation']['confirmation_url'])){
$pay_url = $payment['confirmation']['confirmation_url'];
//добавляем shop_id от ЮКАССЫ чтобы следить за статусом оплаты
$upd_shop = "
UPDATE
`anbuy`
SET
`shop_id` = '{$payment->_id}'
WHERE
`buy_id` = '{$buy_id['buy_id']}'
";
db_get($upd_shop, 'chitatel'); # фиксируем shop_id от Юкассы
header("Location: $pay_url"); // перенаправляем на оплату
}
}
# получение результатов оплаты заказа
function resultpay_kuri(){
$source = file_get_contents('php://input');
//$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'])) {
$shop_id = $result['object']['id'];
$find_sql = "SELECT `buy_id`, `delivery_id`, `number_id`, `date_end` FROM `anbuy` WHERE `shop_id` = '$shop_id' LIMIT 1";
$find_order = db_get($find_sql);
if (!isset($find_order['buy_id'])) {
return False;
}
if ($result['event'] == "payment.succeeded"){
$currdate = date('Y-m-d H:i:s');
if ($find_order['number_id'] == 486){
$date_end = date("Y-m-d H:i:s", strtotime("+1 year"));
}
else {
$date_end = $find_order['date_end'];
}
$supd = "
UPDATE
`anbuy`
SET
`buy_status` = '1',
`buy_active` = '1',
`date` = '$currdate',
`date_end` = '$date_end'
WHERE
`buy_id` = '{$find_order['buy_id']}'";
$result = db_get($supd, 'chitatel'); // фисксируем что оплату получил
}
# SELECT * FROM `price` WHERE `priceslug` = 'saturn-pod-priczelom-smersha';
elseif ( $result['event'] == "payment.canceled"){
if ($find_order['delivery_id'] > 1 ){ #физический товар возвращаем на место
$find_order = db_get("SELECT `pieces` FROM `price` WHERE `price_id` = '{$find_order['number_id']}'");
if (isset($find_order['pieces'])){
$newpieces = $find_order['pieces'] + 1;
$return_tovar = db_get("UPDATE `price` SET `pieces` = '$newpieces' WHERE `price_id` = '{$find_order['number_id']}'");
}
}
}
}
else {
echo "order not fount";
exit;
}
return True;
}
function yk_pay($buy, $return_url = ''){
if ($return_url == '')
$return_url = SITE;
$client = new Client();
$client->setAuth(YID, YKEY);
$items = array(
'amount' => array(
'value' => $buy['currprice'],
'currency' => 'RUB',
),
'confirmation' => array(
'type' => 'redirect',
'return_url' => $return_url,
),
"receipt" => array(
"customer" => array(
"email" => $buy['buy_email'],
),
"items" => array(
array(
"description" => $buy['pricename'],
"quantity" => "1.00",
"amount" => array(
"value" => $buy['currprice'],
"currency" => "RUB"
),
"vat_code" => "4",
"payment_mode" => "full_prepayment",
"payment_subject" => "commodity"
)
)
),
'capture' => true,
'description' => $buy['pricename'],
);
$id = uniqid('', true);
$payment = $client->createPayment(
$items, $id
);
return $payment;
}
# уведомление доставлено
function push_ok($buy_id){
return db_get( "UPDATE `anbuy` SET `mail_status` = '1' WHERE `buy_id` = $buy_id", 'chitatel');
}
#оповещаем письмом об успешном заказе
function sendstatus_kuri(){
set_time_limit(80);
/**
* обнуление доставки заказов
* UPDATE `anbuy` SET `mail_status` = '1' WHERE `buy_status` = 1 AND `mail_status` = '0';
**/
# ищем не пушнутые с Яндекс Кассы на почту заказку
$orders = db_get("SELECT * FROM `anbuy` WHERE `buy_status` = 1 AND `mail_status` = '0'");
foreach($orders as $order){
if (isset($order['buy_email'])){ # есть почта куда пушить
if ($order['delivery_id'] == 1) { #электронный платеж отправляем личный кабинет
$find_client = api_add_client($order['buy_email']); // создаем клиента
if (isset($find_client['client_id'])){
$upd = "UPDATE `anbuy` SET `client_id` = '{$find_client['client_id']}' WHERE `buy_id` = '{$order['buy_id']}'";
db_get($upd, 'chitatel');
}
$message = "Ваш заказ выполнен.<br/><br/>
Он будет всегда доступен в Вашем личном кабинете. <br/><br/>
Чтобы войти в КЛАН перейдите по ссылке - <a href='https://klan.argumenti.ru/login'>https://klan.argumenti.ru/login</a>. Введите свой логин и пароль. Если Вы еще не пользовались кабинетом создайте пароль, использую эту электронную почту. Если пароль забыли, воспользуйтесь опцией Забыли пароль, используя эту электронную почту.";
$subject = "Аргументы Недели: заказ выполнен";
$result = klanmail($order['buy_email'], $subject, $message, set('klanmail'));
}
else {
$message = "Ваш платеж подтвержден. Номер заказа {$order['buy_id']}. \n
Сообщите его менеджеру при необходимости";
$subject = "Аргументы Недели: платеж подтвержден";
$result = klanmail($order['buy_email'], $subject, $message, set('klanmail'));
}
# меняем на статус доставлено
if ($result == True){
push_ok($order['buy_id']);
}
}
}
return;
}