Мерчант Вэб-Мани выносит мой мозг

iSlayter

Новичок
Мерчант Вэб-Мани выносит мой мозг

Ошибка: -2146824867
Application uses a value of the wrong type for the current operation.

Что может означать эта ошибка при попытке оплаты?

или

Ошибка: -1072896658)
System does not support the specified encoding.
step=6.2

при учёте что мерчант весь, абсолютно весь в cp1251 и скрипты так же?

-~{}~ 20.08.08 15:47:

http://forum.webmoney.ru/Default.aspx?g=posts&t=1756

у себя вписал... не помогло, в чём может быть причина?

почему тема в оффтопике?

код:

PHP:
<?php
class paymentsController extends ControllerPrototype
{
    private $paymentsModel = false;
    private $status = false;
    
    public function __construct()
    {
        parent::__construct();
        $this->paymentsModel = Loader::loadModel('payments', true);
        $this->status        = $this->front_controller->get('status');
    }
    
    public function processAction()
    {
        switch ($this->status):
    	    case 'request':
    	    	// проверка и отправка товара
    	    	if ($_POST['service'])
    	    	   $seller_info = 0;
    	    	else
    	    	   $seller_info = $this->paymentsModel->getSeller_INFO($_POST['id']);
    	    	header("Content-type: text/html; charset=iso-8859-1");   

    	    	if (true == ($no_error = $this->paymentsModel->checkDetails($_POST['id'], $_POST['LMI_PAYEE_PURSE'], $_POST['LMI_PAYMENT_AMOUNT']))) {
    	    		if (!isset($_POST['LMI_PREREQUEST']) || $_POST['LMI_PREREQUEST'] != 1) {
    	    			$main_cfg_obj = Registry::get('main_config');
                        $main_cfg   = $main_cfg_obj->iniArr;
    	    			$secret_key= $main_cfg['wm']['secret_key'];
                        // Склеиваем строку параметров
                        $common_string = $_POST['LMI_PAYEE_PURSE'].
$_POST['LMI_PAYMENT_AMOUNT'].
$_POST['LMI_PAYMENT_NO'].
$_POST['LMI_MODE'].$_POST['LMI_SYS_INVS_NO'].
$_POST['LMI_SYS_TRANS_NO'].$_POST['LMI_SYS_TRANS_DATE'].
$secret_key.$_POST['LMI_PAYER_PURSE'].
$_POST['LMI_PAYER_WM'];
                        // Шифруем полученную строку в MD5 и переводим ее в верхний регистр
                        $hash = strtoupper(md5($common_string));
                        //Прерываем работу скрипта, если контрольные суммы не совпадают
                        if($hash != $_POST['LMI_HASH']) die('<h1 style="text-align:center">Работа ПО прервана. Зафиксирована попытка взлома.</p>');
    	    			
                        $inpt_arr = array('order_id'  => $_POST['id'],
    	    		                      'seller_id' => $seller_info['id'],
    	    		                      'amount'    => $_POST['LMI_PAYMENT_AMOUNT'],
    	    		                      'payer_purse' => $_POST['LMI_PAYER_PURSE'],
                                          'payer_wmid'  => $_POST['LMI_PAYER_WM'],
                                          'date' => 'NOW()');
                        $this->paymentsModel->insert($inpt_arr);
    	    		}
    	    		
    	    		echo iconv('windows-1251', 'iso-8859-1', 'YES');
    	    	} else {
    	    		echo iconv('windows-1251', 'iso-8859-1', $no_error);
    	    	}
    	    	break;
    	    	
    	    case 'success':
    	    	$this->view->assign('title', 'Проведение платежа' . SITE_TITLE_SEPARATOR . SITE_TITLE);
    	    	$this->view->assign('status', 'success');
    	    	$this->view->display('frontend/main.tpl');
    	    	break;
    	    	
    	    default:
    	    	$this->view->assign('title', 'Проведение платежа' . SITE_TITLE_SEPARATOR . SITE_TITLE);
    	    	$this->view->assign('status', 'fail');
    	    	$this->view->display('frontend/main.tpl');
    	    	break;
        endswitch;
    }
}
?>
 

whirlwind

TDD infected, paranoid
Лично я тут вообще не вижу где может возникнуть ошибка Application uses a value of the wrong type for the current operation.. Вижу код колбека и все. А когда идет уведомление о платеже, WM по моему накласть что ты там ему возвращать будешь... если мне канеш память не отшибает.
 

iSlayter

Новичок
whirlwind
так самая фича в том, что этот звездец вселенского масштаба начинается тока если в управлении кошельками стоит галочка у пункта "Передавать параметры в предварительном запросе" :(

с первой ошибкой проблема решена. со второй неясная ситуация (
 

Dreammaker

***=Ф=***
Вот простыня метода, который работал на момент испытаний, не думаю, что что-то сильно поменялось :) Может натолкнёт на какие мысли. Там некоторая часть функционала вынесена в модель, если что будет не ясно - спрашивайте.
PHP:
 function wm_1111_result(){

             $data['message']='';

             $this->load->model('pay_model', 'pay');

             if ($this->input->post('LMI_PREREQUEST')) {
                 
                 $is_prerequest = TRUE;

             }

             else {                  
                 
                 $is_prerequest = FALSE;

             }
        
             $this->config->load('pay', TRUE);

             $is_webmoney_passed=$this->pay->webmoney_prerequest( $this->config->item('key', 'pay') );

             if ($this->input->post('BRODO_ACCOUNT')){                  
                   
                  $is_sum_right = ($this->input->post('LMI_PAYMENT_AMOUNT')) ? 1 : 0;
 
                  $payment_no = '';

                  $br_flag = 1;

             }

             else {
                   $count_of_project = $this->pay->get_count_project_for_webmoney($this->input->post('LMI_PAYMENT_NO') );
 
                   $base_price = $this->config->item('quantity', 'pay');

                   $discount_array = $this->config->item('discount', 'pay');

                   $price = $this->pay->price($base_price, $count_of_project, $discount_array);

                   $is_sum_right = $this->pay->is_reseived_sum_right($price);

                   $payment_no = $this->input->post('LMI_PAYMENT_NO');

                   $br_flag = 2;
             }

             if (empty($is_prerequest) && !empty($is_webmoney_passed) && !empty( $is_sum_right)){
                 
                 //тут обрабатываем платёж!!

                 $this->pay->set_wm_data();

                 $this->pay->do_new_payment($this->input->post('LMI_PAYMENT_AMOUNT'),

                 $this->input->post('BRODO_USER_ID'),  $payment_no, 1);

                 if ($br_flag == 2){                         

                     $this->pay->do_new_payment($this->input->post('LMI_PAYMENT_AMOUNT'),
                     
                     $this->input->post('BRODO_USER_ID'),  $payment_no, 0);
                }
             
             }
 
             elseif (!empty($is_prerequest) && !empty( $is_sum_right)){
                 
                    $data['message'] = 'Yes';

             }

             else {                  

                 //$data['message'] = 'Во время процесса оплаты произошёл сбой. Пожалуйста, попробуйте произвести оплату ещё раз. ';
               //  echo $is_reseived_sum_right;
                 // var_dump(!empty(TRUE));

             }


             $output  = $this->load->view('webmoney_result_views',$data, TRUE);

             echo $output;


   }
 

iSlayter

Новичок
оказалось что там вардампилось кое-чего глубоко в коде..

у чувака в топике форума вэбмань видать было тож самое)

крч усё исправил в 3 ночи примерно )
 

iSlayter

Новичок
admin вар_дамп в серверной кодировке (а там изо было) после предварительного запроса (в ошибке об отказе в платеже не показывается, но в левой кодировке влияет на смерть мерчанта) :)
 
Сверху