Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Epay плащане?

Featured Replies

Здравейте,

опитвам се да направя автоматизирано Epay плащане. Но имам чувството, че някъде ми се проваля логиката.

Значи имам си форма:

<form action="{$submit_url}" method=POST>
                        <input type=hidden name=PAGE value="paylogin">
                        <input type=hidden name=ENCODED value="{$ENCODED}">
                        <input type=hidden name=CHECKSUM value="{$CHECKSUM}">
                        <input type=hidden name=URL_OK value="demo.php">
                        <input type=hidden name=URL_CANCEL value="http://neshto si">
                        <input type="image" src="http://online.datamax.bg/epaynow/b02.gif" name="BUTTON:EPAYNOW" value="" alt="Плащане on-line" title="Плащане on-line">                
                        </form>

До тук всичко е ок:

function hmac($algo,$data,$passwd){
	    /* md5 and sha1 only */
	    $algo=strtolower($algo);
	    $p=array('md5'=>'H32','sha1'=>'H40');
	    if(strlen($passwd)>64) $passwd=pack($p[$algo],$algo($passwd));
	    if(strlen($passwd)<64) $passwd=str_pad($passwd,64,chr(0));
	    $ipad=substr($passwd,0,64) ^ str_repeat(chr(0x36),64);
	    $opad=substr($passwd,0,64) ^ str_repeat(chr(0x5C),64);
	    return($algo($opad.pack($p[$algo],$algo($ipad.$data))));
}
# XXX ePay.bg URL (https://devep2.datamax.bg/ep2/epay2_demo/ if POST to DEMO system)
$submit_url = 'https://www.epay.bg/';
# XXX Secret word with which merchant make CHECKSUM on the ENCODED packet
$secret	 = 'секретное';
$min	    = 'секретное';
$invoice    = sprintf("%.0f", rand(10) * 100000); # XXX Invoice
$sum	    = $p.price;						    # XXX Ammount
$exp_date   = '01.08.2020';					   # XXX Expiration date
$descr	  = 'Поръчка #'.$p.PID;							 # XXX Description
$data = <<<DATA
MIN={$min}
INVOICE={$invoice}
AMOUNT={$sum}
EXP_TIME={$exp_date}
DESCR={$descr}
DATA;
# XXX Packet:
#	 (MIN or EMAIL)=	 REQUIRED
#	 INVOICE=		    REQUIRED
#	 AMOUNT=			 REQUIRED
#	 EXP_TIME=		   REQUIRED
#	 DESCR=			  OPTIONAL
$ENCODED  = base64_encode($data);
$CHECKSUM = hmac('sha1', $ENCODED, $secret); # XXX SHA-1 algorithm REQUIRED

Де факто ако правилно разбирам $ENCODED ми съдържа кодирано съдържание на сума, описание, фактуара и тем подобни.

Потребителят заплаща успешно и се препраща в demo.php

function hmac($algo,$data,$passwd){
	    /* md5 and sha1 only */
	    $algo=strtolower($algo);
	    $p=array('md5'=>'H32','sha1'=>'H40');
	    if(strlen($passwd)>64) $passwd=pack($p[$algo],$algo($passwd));
	    if(strlen($passwd)<64) $passwd=str_pad($passwd,64,chr(0));
	    $ipad=substr($passwd,0,64) ^ str_repeat(chr(0x36),64);
	    $opad=substr($passwd,0,64) ^ str_repeat(chr(0x5C),64);
	    return($algo($opad.pack($p[$algo],$algo($ipad.$data))));
}
$ENCODED  = $_POST['encoded'];
$CHECKSUM = $_POST['checksum'];
# XXX Secret word with which merchant make CHECKSUM on the ENCODED packet
$secret = 'секретное';
$hmac   = hmac('sha1', $ENCODED, $secret); # XXX SHA-1 algorithm REQUIRED
if ($hmac == $CHECKSUM) { # XXX Check if the received CHECKSUM is OK
   
    $data = base64_decode($ENCODED);
    $lines_arr = split("\n", $data);
    $info_data = '';
   
    foreach ($lines_arr as $line) {
	    if (preg_match("/^INVOICE=(\d+):STATUS=(PAID|DENIED|EXPIRED)(:PAY_TIME=(\d+):STAN=(\d+):BCODE=([0-9a-zA-Z]+))?$/", $line, $regs)) {
		    $invoice  = $regs[1];
		    $status   = $regs[2];
		    $pay_date = $regs[4]; # XXX if PAID
		    $stan	 = $regs[5]; # XXX if PAID
		    $bcode    = $regs[6]; # XXX if PAID
		    # XXX process $invoice, $status, $pay_date, $stan, $bcode here
		    # XXX if OK for this invoice
		    $info_data .= "INVOICE=$invoice:STATUS=OK\n";
		    # XXX if error for this invoice
		    # XXX $info_data .= "INVOICE=$invoice:STATUS=ERR\n";
		    # XXX if not recognise this invoice
		    # XXX $info_data .= "INVOICE=$invoice:STATUS=NO\n";
	    }
    }
    echo $info_data, "\n";
}
else {
    echo "ERR=Not valid CHECKSUM\n"; # XXX The description of error is REQUIRED
}

Въпросът ми е правилна ли ми е логиката и реално mysql резултатът къде да го опиша и каква проверка да правя, освен за потребителска сесия и как да проверя дали плащането е успешно? Изглежда с $info_data, но нещо ме обърква начинът, по който е описан.

Мерси

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.