Показано с 1 по 4 из 4

Тема: Billmanager не зачисляет платеж

  1. #1
    Member
    Регистрация
    10.09.2015
    Сообщений
    40

    По умолчанию Billmanager не зачисляет платеж

    Здравствуйте, я разрабатываю модулем оплаты Криптонотором.
    В настоящий момент модуль на половину рабочий, то есть модуль работает по методу /startpayment
    Вот страничка настойки AIP Криптонотора
    Клиента переносит на форму оплаты с выбором криптовалют и оплачивает, все нормально на ура.
    В критонаторе используется обозначение рубля как "rur", я решил эту проблему так
    в cryptomatorpayment.cpp
    Код:
    class cryptomatorPayment : public PaymentCgi {
    public:
    	cryptomatorPayment() : PaymentCgi("cryptomator", "cryptomatorpayment")
    	{
    		
    	}
    	
    	virtual bool ValidateAuth() {
    		return true;
    	}
    	
    	virtual void Process() {
    		 string iso = Currency("iso");
    			if (str::Lower(iso) == "rub")
    			iso = "rur";
    		StringMap payment_form_param;
    		payment_form_param["merchant_id"] = Method("vl_merchant_id");
    		payment_form_param["invoice_amount"] = Payment("amount");
    		payment_form_param["item_description"] = Payment("description");
    		payment_form_param["item_name"] = Payment("id");
    		
    		string token = str::base64::Encode(str::hex::Encode(mgr_hash::sha1(Payment("amount")+"|"+Payment("id")+"|"+Method("vl_merchant_id")+"|"+Method("vl_secret_key")))); 
    		string form_str = "<html>\n"
    						"<head>"
    						"	<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>\n"
    						"	<link rel='shortcut icon' href='billmgr.ico' type='image/x-icon'/>\n"
    						"	<script language='JavaScript'>\n"
    						"		function DoSubmit() {\n"
    						"			document.cryptomatorform.submit();\n"
    						"		}\n"
    						"	</script>\n"
    						"</head>\n"
    						"<body onload='DoSubmit()'>\n"
    						"	<form name='cryptomatorform' action='https://api.cryptonator.com/api/merchant/v1/startpayment' method='get'>\n";
    		
    		ForEachI(payment_form_param, p) {
    			str::inpl::Append(form_str, 
    						"		<input type='hidden' name='" + p->first + "' value='" + p->second + "'>", "\n");
    		}
    
    		form_str +=					
    						"		<input type='hidden' name='token' value='" + token + "'>\n"
    						"		<input type='hidden' name='invoice_currency' value='" + iso + "'>\n"
    						"	</form>\n"
    						"</body>\n"
    						"</html>\n";
    		
    		std::cout << form_str;
    	}
    Дальше идут проблема billmanager не зачисляет платеж
    В файл cryptomatorresult.cpp
    Код:
    virtual void Process() {
    		mgr_rpc::HttpQuery http;
    
    		string post_url = "https://api.cryptonator.com/api/merchant/v1/getinvoice";
    
    		std::stringstream out;
    		Debug("input data: %s\n, send data: %s", row_input.c_str(), ("cmd=_notify-validate&" + row_input).c_str());
    		Debug("post_url: %s", post_url.c_str());
    		http.Post(post_url, "cmd=_notify-validate&" + row_input, out);
    		string result = out.str();
    
    		Debug("result: %s", result.c_str());
    
    		if (result == "VERIFIED") {
    			string merchant_id = Input("merchant_id");
    			string amount = Input("invoice_id");
    			string invoice_status = Input("invoice_status");
    			Debug("invoice_status: %s, amount: %s, merchant_id: %s", invoice_status.c_str(), amount.c_str(), merchant_id.c_str());
    			if (str::StartsWith(amount, "-")) {
    				Debug("Get absolute value of amount");
    				amount =  str::RGetWord(amount, '-');
    			}
    			if (Payment("amount") == amount && Method("vl_merchant_id") == merchant_id) {
    				Debug("valid amount and merchant");
    				if (invoice_status == "Completed" || invoice_status == "Canceled_Reversal") {
    					SetPaid(MapToStr(input_params, "\n", ":\t"));
    				}
    
    				if (invoice_status == "Pending") {
    					SetInPay(MapToStr(input_params, "\n", ":\t"));
    				}
    
    				if (invoice_status == "Denied" || invoice_status == "Refunded" || invoice_status == "Reversed") {
    					SetNotPaid(MapToStr(input_params, "\n", ":\t"));
    				}
    			} else {
    				throw mgr_err::Error("Invalid")
    						.add_param("amount", amount)
    						.add_param("vl_merchant_id", merchant_id);
    			}
    		} else {
    			throw mgr_err::Error("Invalid")
    					.add_param("result", result);
    		}
    
    		std::cout << "OK" << std::endl;
    	}
    Я не очень хорошо понимаю HTTP-уведомления само приходит или нужно делать запрос на Метод /getinvoice
    И по каким прицепам идет зачисление в billmanagr?
    Какое поле чему должно быть равно, чтоб счет был автоматический зачислен??

  2. #2
    BILLmanager team
    Регистрация
    17.09.2010
    Сообщений
    8,591

    По умолчанию

    Здравствуйте
    Я не очень хорошо понимаю HTTP-уведомления само приходит или нужно делать запрос на Метод /getinvoice
    И по каким прицепам идет зачисление в billmanagr?
    Какое поле чему должно быть равно, чтоб счет был автоматический зачислен??
    механизм зачисления платежа зависит от реализации алгоритма оплату в платежной системе. Если платежная система умеет слать уведомления о смене статуса выставленного счета/проведении транзакции или что-то подобное на определенный URL, указываемый при совершении оплаты или в настройках личного кабинета на стороне платежной системы, то тогда в модуле оплаты в BILLmanager делается скрипт xxxresult на который и приходит это уведомлени, если нет, но есть API функция проверки статуса счета, то в основной файл модуля (pmxxx) нужно добавить функция checkpay которая будет вызываться по крону раз в 3 минут (период опроса по умолчанию) и при вызове этой команды проверять все незачисленные платежи совершенный с помощью вашего модуля на статус на стороне платежной системы

    В итоге счет зачисляется модулем оплаты при вызове SetPaid. Набор и алгоритм проверок при зачислении платежа зависит от платежной системы.

    Так же бывают варианты, что платежная система вызывает скрипт xxxresult, но не имеет механизма проверки достоверности этого вызова. В этом случае при получении от платежной системы инфомрации о смене статуса платежа, есть смысл вызвать API функцию платежной системы для проверки текущего статуса платежа

  3. #3
    Member
    Регистрация
    10.09.2015
    Сообщений
    40

    По умолчанию

    Цитата Сообщение от Azcol Посмотреть сообщение
    на определенный URL, указываемый при совершении оплаты или в настройках личного кабинета на стороне платежной систем
    Вот скриншот настойка личного кабинета на стороне платежной систем
    Screenshot_11.jpg
    Значит в файл cryptomatorresult.cpp поступает HTTP-уведомления от системы типа инпутов с данными?
    А Вот как проверить и увидеть что платежная система присылает какие данные?
    Я бы сразу понял что к чему.

  4. #4
    BILLmanager team
    Регистрация
    17.09.2010
    Сообщений
    8,591

    По умолчанию

    Здравствуйте, в /usr/local/mgr5/etc/debug.conf

    пропишите
    cryptomatorresult.* 9
    в логе должен будет появится максимальный дебаг

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •