ЯНДЕКС КАССА

[[!Shopkeeper3@cart_main?propertySetName=`cart_main`]]

[[!FormIt?
&hooks=`spam,shk_fihook,email,FormItAutoResponder,YandexMoneyHook,redirect`
&submitVar=`order`
&emailTpl=`shopOrderReport`
&emailSubject=`В интернет-магазине "[[++site_name]]" сделан новый заказ`
&emailTo=`[[++emailsender]]`
&emailFrom=`[[++mail_smtp_user]]`

&fiarSubject=`Вы сделали заказ в интернет-магазине "[[++site_name]]"`
&fiarTpl=`shopOrderReportUser`
&fiarFromName=`[[++site_name]]`
&_fiarReplyTo=`[[++emailsender]]`
&fiarToField=`email`

&fiarReplyTo=`[[++mail_smtp_user]]`
&fiarSender=`[[++mail_smtp_user]]`

&redirectTo=`95`
&validate=`address:required,fullname:required,email:email:required,phone:required`
&errTpl=`<br /><span class="error">[[+error]]</span>`
]]


[[!+shk.items_total:gt=`0`:then=`
[[$shopOrderForm]]
`:else=`<center><p>Вы не положили в корзину ни одного товара</p></center>`]]

<script type="text/javascript">
    function SHKloadCartCallback() {
        if( $('#shopOrderForm').size() > 0 && SHK.data.items_total == 0 ){
            window.location.reload();
        }
    }
</script>

Вот так вот вроде работает...

<?php
$_isAdmin = ($modx->user->sudo == 1);

if(!defined('YANDEXMONEY_PATH')) define('YANDEXMONEY_PATH', MODX_CORE_PATH."components/yandexmoney/");
require_once YANDEXMONEY_PATH.'model/yandexmoney.class.php';

$snippet = $modx->getObject('modSnippet',array('name'=>'YandexMoney'));
$config = $snippet->getProperties();

$ym = new Yandexmoney($modx, $config);

if(!empty($_SESSION['shk_lastOrder']) && !empty($_SESSION['shk_lastOrder']['id'])){
    $ym->pay_method = !empty($_SESSION['shk_lastOrder']['payment']) ? $_SESSION['shk_lastOrder']['payment'] : '';
    $order_id = (int)$_SESSION['shk_lastOrder']['id'];    
}
if (!empty($_POST['payment'])){
    $ym->pay_method = $_POST['payment'];
}
if (!$ym->checkPayMethod()){
    return true;//false;
}

$modx->addPackage('shopkeeper3', MODX_CORE_PATH."components/shopkeeper3/model/");
$order = $modx->getObject('shk_order',array('id'=>$order_id));

if (!$order){
    return false;
}
$output = '';

if ( $order_id ){
    $ym->userId = $modx->getLoginUserID('web') ? $modx->getLoginUserID('web') : 0;
    $ym->orderId = $order_id;
    $ym->orderTotal = $_SESSION['shk_lastOrder']['price'];
    $ym->orderTotal = floatval(str_replace(array(',',' '), array('.',''), $ym->orderTotal));
    $ym->comment = $_POST['message'];

    $_host = str_replace(array('http://', 'https://'), '' , $modx->config['site_url']);
    $host = 'https://' . $_host . 'assets/components/yandexmoney/connector_result.php';
    $ym->successUrl = $host.'?success=1';
    $ym->failUrl = $host.'?fail=1';

    echo $ym->createFormHtml();
    exit;

}

return true;

А это YandexMoneyHook

Позанимавшись немного интеграцией яндек-кассы, наткнулся на момент: хук YandexMoneyHook как будто бы не рассчитан на то, что могут быть другие платежные методы, ктоме тех, которые в нем указаны. Например, нельзя просто так добавить способ оплаты "Наличными курьеру при получении" - хук будет возвращать false и все хуки, следующик за ним, не будут выполнены.

Можно, конечно, дописать в его начало что-то вроде

if ($_POST['payment'] == 'Наличными курьеру') {
    return true;
}

может, у кого-то есть более изящный вариант?

+, как уже заметил @akradeus , хук из коробки содержит ошибку - $output всегда будет пуст.

Здесь https://github.com/andchir/yandex-money-cms-modx почему-то нельзя добавить issue (почему, кстати?), поэтому пусть будет здесь.

Когда я с первого раза напишу сообщение без опечаток, вселенная сколлапсирует. @Andchir , можно увеличить время, в течении которого сообщения можно править?

@whitebyte сказал ЯНДЕКС КАССА:

Когда я с первого раза напишу сообщение без опечаток, вселенная сколлапсирует. @Andchir , можно увеличить время, в течении которого сообщения можно править?

Там установлен час времени. Я думаю этого должно быть достаточно.

@Andchir закрывает через 60 секунд

@whitebyte сказал ЯНДЕКС КАССА:

@Andchir закрывает через 60 секунд

Я перепутал секунды с минутами :) Увеличил время.

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

Со статусом разобрался, но письмо не приходит.

@Ростилав сказал ЯНДЕКС КАССА:

Со статусом разобрался, но письмо не приходит.

Не приходит потому что такого функционала пока нет.

@andchir а подскажите пожалуйста, что прописать чтоб передавались данные для чека?

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.