Init
This commit is contained in:
36
payment/Webmoney/Webmoney.php
Normal file
36
payment/Webmoney/Webmoney.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
require_once('api/Simpla.php');
|
||||
|
||||
class Webmoney extends Simpla
|
||||
{
|
||||
public function checkout_form($order_id, $button_text = null)
|
||||
{
|
||||
if(empty($button_text))
|
||||
$button_text = 'Перейти к оплате';
|
||||
|
||||
$order = $this->orders->get_order((int)$order_id);
|
||||
$payment_method = $this->payment->get_payment_method($order->payment_method_id);
|
||||
$payment_settings = $this->payment->get_payment_settings($payment_method->id);
|
||||
|
||||
$amount = $this->money->convert($order->total_price, $payment_method->currency_id, false);
|
||||
|
||||
$success_url = $this->config->root_url.'/order/'.$order->url;
|
||||
|
||||
$fail_url = $this->config->root_url.'/order/'.$order->url;
|
||||
|
||||
|
||||
$button = "<form accept-charset='cp1251' method='POST' action='https://merchant.webmoney.ru/lmi/payment.asp'>
|
||||
<input type='hidden' name='LMI_PAYMENT_AMOUNT' value='".$amount."'>
|
||||
<input type='hidden' name='LMI_PAYMENT_DESC_BASE64' value='".base64_encode("Оплата заказа №$order->id")."'>
|
||||
<input type='hidden' name='LMI_PAYMENT_NO' value='$order->id'>
|
||||
<input type='hidden' name='LMI_PAYEE_PURSE' value='".$payment_settings['purse']."'>
|
||||
<input type='hidden' name='LMI_SIM_MODE' value='0'>
|
||||
<input type='hidden' name='LMI_SUCCESS_URL' value='$success_url'>
|
||||
<input type='hidden' name='LMI_FAIL_URL' value='$fail_url'>
|
||||
<input class=checkout_button type='submit' value='".$button_text."' />
|
||||
</form>";
|
||||
return $button;
|
||||
}
|
||||
|
||||
}
|
||||
200
payment/Webmoney/callback.php
Normal file
200
payment/Webmoney/callback.php
Normal file
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Simpla CMS
|
||||
*
|
||||
* @copyright 2011 Denis Pikusov
|
||||
* @link http://simplacms.ru
|
||||
* @author Denis Pikusov
|
||||
*
|
||||
* К этому скрипту обращается webmoney в процессе оплаты
|
||||
*
|
||||
*/
|
||||
|
||||
// Работаем в корневой директории
|
||||
chdir ('../../');
|
||||
require_once('api/Simpla.php');
|
||||
|
||||
$simpla = new Simpla();
|
||||
|
||||
// Это предварительный запрос?
|
||||
if(isset($_POST['LMI_PREREQUEST']) && $_POST['LMI_PREREQUEST']==1)
|
||||
{
|
||||
$pre_request = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$pre_request = 0;
|
||||
}
|
||||
|
||||
// Кошелек продавца
|
||||
// Кошелек продавца, на который покупатель совершил платеж. Формат - буква и 12 цифр.
|
||||
$merchant_purse = $_POST['LMI_PAYEE_PURSE'];
|
||||
|
||||
// Сумма платежа
|
||||
// Сумма, которую заплатил покупатель. Дробная часть отделяется точкой.
|
||||
$amount = $_POST['LMI_PAYMENT_AMOUNT'];
|
||||
|
||||
// Внутренний номер покупки продавца
|
||||
// В этом поле передается id заказа в нашем магазине.
|
||||
$order_id = $_POST['LMI_PAYMENT_NO'];
|
||||
|
||||
// Флаг тестового режима
|
||||
// Указывает, в каком режиме выполнялась обработка запроса на платеж. Может принимать два значения:
|
||||
// 0: Платеж выполнялся в реальном режиме, средства переведены с кошелька покупателя на кошелек продавца;
|
||||
// 1: Платеж выполнялся в тестовом режиме, средства реально не переводились.
|
||||
$test_mode = $_POST['LMI_MODE'];
|
||||
|
||||
// Внутренний номер счета в системе WebMoney Transfer
|
||||
// Номер счета в системе WebMoney Transfer, выставленный покупателю от имени продавца
|
||||
// в процессе обработки запроса на выполнение платежа сервисом Web Merchant Interface.
|
||||
// Является уникальным в системе WebMoney Transfer.
|
||||
$wm_order_id = $_POST['LMI_SYS_INVS_NO'];
|
||||
|
||||
// Внутренний номер платежа в системе WebMoney Transfer
|
||||
// Номер платежа в системе WebMoney Transfer, выполненный в процессе обработки запроса
|
||||
// на выполнение платежа сервисом Web Merchant Interface.
|
||||
// Является уникальным в системе WebMoney Transfer.
|
||||
$wm_transaction_id = $_POST['LMI_SYS_TRANS_NO'];
|
||||
|
||||
// Кошелек покупателя
|
||||
// Кошелек, с которого покупатель совершил платеж.
|
||||
$payer_purse = $_POST['LMI_PAYER_PURSE'];
|
||||
|
||||
// WMId покупателя
|
||||
// WM-идентификатор покупателя, совершившего платеж.
|
||||
$payer_wmid = $_POST['LMI_PAYER_WM'];
|
||||
|
||||
// Номер ВМ-карты (электронного чека)
|
||||
// Номер чека Paymer.com или номер ВМ-карты, присутствует только в случае,
|
||||
// если покупатель производит оплату чеком Пеймер или ВМ-картой.
|
||||
$paymer_number = $_POST['LMI_PAYMER_NUMBER'];
|
||||
|
||||
|
||||
// Paymer.com e-mail покупателя
|
||||
// Email указанный покупателем, присутствует только в случае,
|
||||
// если покупатель производит оплату чеком Paymer.com или ВМ-картой.
|
||||
$paymer_email = $_POST['LMI_PAYMER_EMAIL'];
|
||||
|
||||
// Номер телефона покупателя
|
||||
// Номер телефона покупателя, присутствует только в случае,
|
||||
// если покупатель производит оплату с телефона в Keeper Mobile.
|
||||
$mobile_keeper_phone = $_POST['LMI_TELEPAT_PHONENUMBER'];
|
||||
|
||||
// Номер платежа в Keeper Mobile
|
||||
// Номер платежа в Keeper Mobile, присутствует только в случае,
|
||||
// если покупатель производит оплату с телефона в Keeper Mobile.
|
||||
$mobile_keeper_order_id = $_POST['LMI_TELEPAT_ORDERID'];
|
||||
|
||||
// Срок кредитования LMI_PAYMENT_CREDITDAY
|
||||
// В случае если покупатель платит с своего кошелька типа C на кошелек продавца типа D
|
||||
// (вариант продажи продавцом своих товаров или услуг в кредит), в данном параметре указывается срок кредитования в днях.
|
||||
// Настоятельно рекомендуем обязательно проверять сооветствие данного параметра
|
||||
// в форме оповещения о платеже значению параметра в форме запроса платежа.
|
||||
$credit_days = $_POST['LMI_PAYMENT_CREDITDAYS'];
|
||||
|
||||
// Контрольная подпись
|
||||
$hash = $_POST['LMI_HASH'];
|
||||
|
||||
// Дата и время выполнения платежа
|
||||
// Дата и время реального прохождения платежа в системе WebMoney Transfer в формате "YYYYMMDD HH:MM:SS"
|
||||
$date = $_POST['LMI_SYS_TRANS_DATE'];
|
||||
|
||||
|
||||
// Метод оплаты
|
||||
$payment_method_id = $_POST['PAYMENT_METHOD_ID'];
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// Выберем заказ из базы
|
||||
////////////////////////////////////////////////
|
||||
$order = $simpla->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");
|
||||
BIN
payment/Webmoney/example.png
Normal file
BIN
payment/Webmoney/example.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
14
payment/Webmoney/settings.xml
Normal file
14
payment/Webmoney/settings.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module>
|
||||
<name>
|
||||
Webmoney
|
||||
</name>
|
||||
<settings>
|
||||
<variable>purse</variable>
|
||||
<name>Номер кошелька</name>
|
||||
</settings>
|
||||
<settings>
|
||||
<variable>secret_key</variable>
|
||||
<name>Секретный ключ</name>
|
||||
</settings>
|
||||
</module>
|
||||
Reference in New Issue
Block a user