orders->get_order(intval($order_id)); if(empty($order)) die('Оплачиваемый заказ не найден'); // Нельзя оплатить уже оплаченный заказ if($order->paid) die('Этот заказ уже оплачен'); //////////////////////////////////////////////// // Выбираем из базы соответствующий метод оплаты //////////////////////////////////////////////// $method = $simpla->payment->get_payment_method(intval($order->payment_method_id)); if(empty($method)) die("Неизвестный метод оплаты"); $settings = unserialize($method->settings); //////////////////////////////////// // Проверка контрольной подписи (только для оповещения об успешной оплате, не для pre_request) //////////////////////////////////// // Контрольная подпись данных о платеже позволяет продавцу проверять как источник данных, // так и целостность данных, переданных на Result URL через "Форму оповещения о платеже". // При формировании контрольной подписи сервис Web Merchant Interface "склеивает" значения полей, // передаваемых "Формой оповещения о платеже" if($pre_request != 1) { $str = $merchant_purse.$amount.$order_id.$test_mode.$wm_order_id.$wm_transaction_id.$date.$settings['secret_key'].$payer_purse.$payer_wmid; $md5 = strtoupper(md5($str)); if($md5 !== $hash) { die("Контрольная подпись не верна"); } } //////////////////////////////////// // Проверка суммы платежа //////////////////////////////////// // Первые буквы кошельков $merchant_purse_first_letter = strtoupper($merchant_purse[0]); $payer_purse_first_letter = strtoupper($payer_purse[0]); // Если первые буквы кошельков не совпадают - ошибка if(($first_purse_letter = $merchant_purse_first_letter) != $payer_purse_first_letter) die("Типы кошельков продавца и покупателя не совпадают"); // Сумма заказа у нас в магазине $order_amount = $simpla->money->convert($order->total_price, $method->currency_id, false); // Должна быть равна переданной сумме if($order_amount != $amount || $amount<=0) die("Неверная сумма оплаты"); //////////////////////////////////// // Проверка кошелька продавца //////////////////////////////////// if($merchant_purse != $settings['purse']) die("Неверный кошелек продавца"); //////////////////////////////////// // Проверка наличия товара //////////////////////////////////// $purchases = $simpla->orders->get_purchases(array('order_id'=>intval($order->id))); foreach($purchases as $purchase) { $variant = $simpla->variants->get_variant(intval($purchase->variant_id)); if(empty($variant) || (!$variant->infinity && $variant->stock < $purchase->amount)) { die("Нехватка товара $purchase->product_name $purchase->variant_name"); } } // Запишем if(!$pre_request) { // Установим статус оплачен $simpla->orders->update_order(intval($order->id), array('paid'=>1)); // Спишем товары $simpla->orders->close(intval($order->id)); } if(!$pre_request) { $simpla->notify->email_order_user(intval($order->id)); $simpla->notify->email_order_admin(intval($order->id)); } die("Yes");