Итак. Обратился с просьбой в службу поддержки по поводу ошибки оплаты всеми способами. Помчались и все решили.
<?php
/**
* @connect_module_class_name CWMI
*
*/
// W1 method implementation
// see also
// http://w1.ru
// http://merchant.w1.ru/checkout/site/develope/
class CWMI extends PaymentModule {
function _initVars(){
$this->title = "Единая касса";
$this->description = "Модуль работает в режиме автоматической оплаты. Этот модуль можно использовать для автоматической продажи цифровых товаров. Настройки:<br>Адрес для оповещений - http(s)://".$_SERVER['HTTP_HOST']."/index.php?w1<br>Цифровая подпись(ЭЦП) - SHA1 или MD5. Не забудьте указать такой же параметр в настройках этого модуля.";
$this->sort_order = 0;
$this->Settings = array(
"CONF_PAYMENTMODULE_WMI_MERCHANT_ID",
"CONF_PAYMENTMODULE_WMI_CURRENCY_ID",
"CONF_PAYMENTMODULE_WMI_DESCRIPTION",
"CONF_PAYMENTMODULE_WMI_SECRET_KEY",
"CONF_PAYMENTMODULE_WMI_HASH_METOD",
"CONF_PAYMENTMODULE_WMI_STATUS_AFTER_PAY",
"CONF_PAYMENTMODULE_WMI_PTENABLED_INTERNET",
"CONF_PAYMENTMODULE_WMI_PTENABLED_TERMINAL",
"CONF_PAYMENTMODULE_WMI_PTENABLED_CARDS",
"CONF_PAYMENTMODULE_WMI_PTENABLED_NAL"
);
}
function _initSettingFields(){
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_MERCHANT_ID'] = array(
'settings_value' => '',
'settings_title' => 'Идентификатор (номер кошелька) интернет-магазина, полученный при регистрации в W1.',
'settings_description' => 'Формат - 12 цифр',
'settings_html_function' => 'setting_TEXT_BOX(0,',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_CURRENCY_ID'] = array(
'settings_value' => '',
'settings_title' => 'Выберите валюту магазина, в которой указаны цены на товар',
'settings_description' => 'Выберите из списка валют ту, в которой указаны цены Вашего интернет-магазина.',
'settings_html_function' => 'setting_WMI_CURRENCY_SELECT(',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_DESCRIPTION'] = array(
'settings_value' => 'Оплата заказа #[orderID]',
'settings_title' => 'Назначение платежей',
'settings_description' => 'Укажите описание платежей. Вы можете использовать строку [orderID] - она автоматически будет заменена на номер заказа',
'settings_html_function' => 'setting_TEXT_BOX(0,',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_SECRET_KEY'] = array(
'settings_value' => '',
'settings_title' => 'Значение Секретный ключ',
'settings_description' => 'Укажите секретный код который установлен в ваших настройках Цифровой подписи.',
'settings_html_function' => 'setting_TEXT_BOX(0,',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_HASH_METOD'] = array(
'settings_value' => '2',
'settings_title' => 'Тип цифровой подписи',
'settings_description' => 'Выберите из списка алгоритм формирования цифровой подписи для заказов.',
'settings_html_function' => 'setting_HASH_METOD_SELECT(',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_STATUS_AFTER_PAY'] = array(
'settings_value' => '',
'settings_title' => 'Статус заказа после оплаты',
'settings_description' => 'Укажите, какой статус присваивать заказу после совершения платежа. Рекомендуется установить тот же статус, что установлен в настройках магазина в качестве статуса завершенного заказа. Это позволит работать мгновенной доставке цифрового товара.',
'settings_html_function' => 'setting_ORDER_STATUS_SELECT(',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_PTENABLED_INTERNET'] = array(
'settings_value' => '1',
'settings_title' => 'Оплата электронными деньгами',
'settings_description' => 'Разрешить оплату заказа через систему электронных платежей',
'settings_html_function' => 'setting_CHECK_BOX(',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_PTENABLED_MCOMMERCE'] = array(
'settings_value' => '1',
'settings_title' => 'Оплата с баланса мобильного телефона',
'settings_description' => 'Разрешить оплату заказа через сотовых операторов',
'settings_html_function' => 'setting_CHECK_BOX(',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_PTENABLED_TERMINAL'] = array(
'settings_value' => '',
'settings_title' => 'Оплата через терминалы',
'settings_description' => 'Разрешить оплату заказа через терминалы',
'settings_html_function' => 'setting_CHECK_BOX(',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_PTENABLED_CARDS'] = array(
'settings_value' => '',
'settings_title' => 'Оплата банковскими картами',
'settings_description' => 'Разрешить оплату заказа банковскими картами и безналичными переводами',
'settings_html_function' => 'setting_CHECK_BOX(',
'sort_order' => 1,
);
$this->SettingsFields['CONF_PAYMENTMODULE_WMI_PTENABLED_NAL'] = array(
'settings_value' => '',
'settings_title' => 'Оплата наличными',
'settings_description' => 'Разрешить оплату заказа наличными(банковские, почтовые переводы)',
'settings_html_function' => 'setting_CHECK_BOX(',
'sort_order' => 1,
);
}
function after_processing_html( $orderID )
{
$order = ordGetOrder( $orderID );
$exhange_rate = 1;
$exhange_round = 2;
$order_amount = _formatPrice(roundf($order["order_amount"]*$exhange_rate), $exhange_round, ".", "");
$fields = array();
$fields1 = array();
$fields["WMI_MERCHANT_ID"] = $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_MERCHANT_ID');
$fields["WMI_PAYMENT_AMOUNT"] = $order_amount;
$fields["WMI_CURRENCY_ID"] = $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_CURRENCY_ID');
$fields["WMI_PAYMENT_NO"] = $orderID;
$fields["WMI_DESCRIPTION"] = "BASE64:".base64_encode(str_replace("[orderID]",$orderID,$this->_getSettingValue('CONF_PAYMENTMODULE_WMI_DESCRIPTION')));
$fields["WMI_SUCCESS_URL"] = 'http://'.$_SERVER['HTTP_HOST'].'/index.php?transaction_result=success';
$fields["WMI_FAIL_URL"] = 'http://'.$_SERVER['HTTP_HOST'].'/index.php?transaction_result=failure';
$fields["WMI_AUTO_ACCEPT"] = "1";
// доступные формы оплаты
if($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_PTENABLED_INTERNET')){
$fields1["WalletOneRUB"] = 1;
$fields1["WalletOneUAH"] = 1;
$fields1["WalletOneZAR"] = 1;
$fields1["UkashEUR"] = 1;
$fields1["MoneyMailRUB"] = 1;
$fields1["RbkMoneyRUB"] = 1;
$fields1["ZPaymentRUB"] = 1;
$fields1["WebCredsRUB"] = 1;
$fields1["EasyPayBYR"] = 1;
$fields1["QiwiWalletRUB"] = 1;
$fields["WMI_PTENABLED"] = 1;
}
if($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_PTENABLED_TERMINAL')){
$fields1["CashTerminalRUB"] = 1;
$fields1["CashTerminalUAH"] = 1;
$fields["WMI_PTENABLED"] = 1;
}
if($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_PTENABLED_MCOMMERCE')){
$fields1["BeelineRUB"] = 1;
$fields1["MtsRUB"] = 1;
$fields1["MegafonRUB"] = 1;
$fields["WMI_PTENABLED"] = 1;
}
if($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_PTENABLED_CARDS')){
$fields1["AlfaclickRUB"] = 1;
$fields1["Privat24UAH"] = 1;
$fields1["PsbRetailRUB"] = 1;
$fields1["SvyaznoyBankRUB"] = 1;
$fields1["BankTransferRUB"] = 1;
$fields1["BankTransferUAH"] = 1;
$fields1["BankTransferUSD"] = 1;
$fields1["BankTransferZAR"] = 1;
$fields1["BankTransferKZT"] = 1;
$fields1["CreditCardRUB"] = 1;
$fields1["LiqPayRUB"] = 1;
$fields1["LiqPayUSD"] = 1;
$fields1["LiqPayEUR"] = 1;
$fields1["LiqPayUAH"] = 1;
$fields1["NsmepUAH"] = 1;
$fields["WMI_PTENABLED"] = 1;
}
if($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_PTENABLED_NAL')){
$fields1["MobileRetailsRUB"] = 1;
$fields1["SberbankRUB"] = 1;
$fields1["PrivatbankUAH"] = 1;
$fields1["RussianPostRUB"] = 1;
$fields1["ContactRUB"] = 1;
$fields1["UnistreamRUB"] = 1;
$fields1["AnelikRUB"] = 1;
$fields1["LiderRUB"] = 1;
$fields["WMI_PTENABLED"] = 1;
}
// Формирование сообщения, путем объединения значений формы,
// отсортированных по именам ключей в порядке возрастания.
uksort($fields, "strcasecmp");
$fieldValues = "";
foreach($fields as $name => $val){
if ($name == 'WMI_PTENABLED'){
uksort($fields1, "strcasecmp");
foreach($fields1 as $_i=>$_v){
$fieldValues .= $_i;
}
} else {
$fieldValues .= $val;
}
}
// Формирование значения параметра WMI_SIGNATURE, путем
// вычисления отпечатка, сформированного выше сообщения,
// по алгоритму MD5 или SHA1 и представление его в Base64
if ($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_HASH_METOD') == 2){
$signature = base64_encode(pack("H*", md5($fieldValues . $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_SECRET_KEY'))));
$fields["WMI_SIGNATURE"] = $signature;
} elseif ($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_HASH_METOD') == 3) {
$signature = base64_encode(pack("H*", sha1($fieldValues . $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_SECRET_KEY'))));
$fields["WMI_SIGNATURE"] = $signature;
}
// Формирование HTML-кода платежной формы
$res = "";
$res .=
"<table width='100%'>\n".
" <tr>\n".
" <td align='center'>\n".
"<form method=\"post\" action=\"https://merchant.w1.ru/checkout/default.aspx\" accept-charset=\"UTF-8\" id='payform'>\n";
foreach($fields as $key => $val) {
if ($key == 'WMI_PTENABLED'){
foreach($fields1 as $_i=>$_v){
$res .= " <input type=\"hidden\" name=\"WMI_PTENABLED\" value=\"$_i\"/>\n";
}
} else {
$res .= " <input type=\"hidden\" name=\"$key\" value=\"$val\"/>\n";
}
}
$res .= " <table cellspacing='0' cellpadding='0' class='fsttab'><tr><td><table cellspacing='0' cellpadding='0' class='sectb'><tr><td><a href='#' onclick='document.getElementById(\"payform\").submit(); return false'>".STRING_PAY_NOW."</a></td></tr></table></td></tr></table>\n".
"</form>\n".
" </td>\n".
" </tr>\n".
"</table>";
return $res;
}
function after_payment_php( $orderID, $_params)
{
$res = '';
// Извлечение всех параметров POST-запроса, кроме WMI_SIGNATURE
foreach($_params as $name => $value){
if ($name !== "WMI_SIGNATURE") $params[$name] = $value;
}
// Сортировка массива по именам ключей в порядке возрастания
// и формирование сообщения, путем объединения значений формы
uksort($params, "strcasecmp"); $values = "";
foreach($params as $name => $value){
$values .= $params[$name];
}
// Формирование подписи для сравнения ее с параметром WMI_SIGNATURE
if ($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_HASH_METOD') == 2){
$signature = base64_encode(pack("H*", md5($values . $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_SECRET_KEY'))));
} elseif ($this->_getSettingValue('CONF_PAYMENTMODULE_WMI_HASH_METOD') == 3) {
$signature = base64_encode(pack("H*", sha1($values . $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_SECRET_KEY'))));
}
//Сравнение полученной подписи с подписью W1
if ($signature == $_params["WMI_SIGNATURE"]){
if (strtoupper($_params["WMI_ORDER_STATE"]) == "ACCEPTED"){
ostSetOrderStatusToOrder($_params["WMI_PAYMENT_NO"], $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_STATUS_AFTER_PAY'));
$res = 'WMI_RESULT=Ok&WMI_DESCRIPTION=Заказ #' . $_params["WMI_PAYMENT_NO"] . ' оплачен!';
} else if (strtoupper($_params["WMI_ORDER_STATE"]) == "PROCESSING"){
ostSetOrderStatusToOrder($_params["WMI_PAYMENT_NO"], $this->_getSettingValue('CONF_PAYMENTMODULE_WMI_STATUS_AFTER_PAY'));
$res = 'WMI_RESULT=Ok&WMI_DESCRIPTION=Заказ #' . $_params["WMI_PAYMENT_NO"] . ' оплачен!';
} else if (strtoupper($_arams["WMI_ORDER_STATE"]) == "REJECTED"){
$res = 'WMI_RESULT=Ok&WMI_DESCRIPTION=Заказ #' . $_params["WMI_PAYMENT_NO"] . ' отменен!';
} else {
// Случилось что-то странное, пришло неизвестное состояние заказа
$res = 'WMI_RESULT=Retry&WMI_DESCRIPTION=Неверное состояние заказа: '. $_params["WMI_ORDER_STATE"];
}
} else {
// Подпись не совпадает, возможно вы поменяли настройки интернет-магазина
$res = 'WMI_RESULT=Retry&WMI_DESCRIPTION=Неверная подпись заказа';
}
return $res;
}
}
?>
Заменить в файле w1.php
У меня все заработало.