1. Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.
    Сокриј

[Туторијал] cPay/CaSys PHP интеграција во 3 чекори

Дискусија во форумот 'PHP, ASP, JSP (JavaServer Pages)' започната од Pulse, 30 Мај 2016.

  1. Pulse

    Pulse
    Practice makes perfect

    1,180
    1,084
    26 oктомври 2014
    Машко
    Full Stack Web Developer
    Гледам многу прашања и дилеми има поврзано со ова, па решив да ги разоткриеме и решиме.
    Тоа што CaSys како платежен систем имаат малку документација и објаснувања, не ги прави да се недофатливи.
    Изгубив многу време додека и влезам во штос, но кога ќе сфатиш на крај како работи, ќе се чудиш дали ти како девелопер cи за оваа работа... :D
    [​IMG]
    Чекор 1 - Подготвување на формата за плаќање
    Код:
    <form name="aspnetForm" method="post" action="https://www.cpay.com.mk/client/Page/default.aspx?xml_id=/<?php echo $language; ?>/.loginToPay/.simple/" id="aspnetForm" target="cPayFrame">
    <input id='AmountToPay' name='AmountToPay' value='<?php echo $AmountToPay; ?>' type='hidden' />
    <input id='PayToMerchant' name='PayToMerchant' value='<?php echo $PayToMerchant; ?>' type='hidden' />
    <input id='MerchantName' name='MerchantName' value='<?php echo $MerchantName; ?>' type='hidden' />
    <input id='AmountCurrency' name='AmountCurrency' value='<?php echo $AmountCurrency; ?>' type='hidden' />
    <input id='Details1' name='Details1' value='<?php echo $Details1; ?>' type='hidden' />
    <input id='Details2' name='Details2' value='<?php echo $Details2; ?>' type='hidden' />
    <input id='PaymentOKURL' size='10' name='PaymentOKURL' value='<?php echo $PaymentOKURL; ?>' type='hidden' />
    <input id='PaymentFailURL' size='10' name='PaymentFailURL' value='<?php echo $PaymentFailURL; ?>' type='hidden' />
    <input id='CheckSumHeader' name='CheckSumHeader' value='<?php echo $CheckSumHeader; ?>' type='hidden' />
    <input id='CheckSum' name='CheckSum' value='<?php echo $CheckSum; ?>' type='hidden' />
    <input id='FirstName' size='10' name='FirstName' value='<?php echo $FirstName; ?>' type='hidden' />
    <input id='LastName' size='10' name='LastName' value='<?php echo $LastName; ?>' type='hidden' />
    <input id='Address' size='10' name='Address' value='<?php echo $Address; ?>' type='hidden' />
    <input id='City' size='10' name='City' value='<?php echo $City; ?>' type='hidden' />
    <input id='Zip' size='10' name='Zip' value='<?php echo $Zip; ?>' type='hidden' />
    <input id='Telephone' size='10' name='Telephone' value='<?php echo $Telephone; ?>' type='hidden' />
    <input id='Email' size='10' name='Email' value='<?php echo $Email; ?>' type='hidden' />
    <input id='OriginalAmount' name='OriginalAmount' value='<?php echo $OriginalAmount; ?>' type='hidden' />
    <input class='button' value='Плати' type='submit'/>
    </form>
    <iframe src="simple.html" style="width:521px;height:500px;border:medium none;" name="cPayFrame" id="cPayFrame" frameborder="0" scrolling="auto"></iframe>
    
    Формата погоре ќе ви изгенерира едно копче „Плати“ при што кога ќе се кликне на него ќе излезе целосната форма за плаќање во iframe прозорот.
    Чекор 2 - Објаснување на PHP променливите што се користат во формата погоре
    PHP код
    Код:
    $globalpay = 5000; // cena shto treba da se plati
    $arr2 = "0001/0003/00010"; // unikatni redni broevi na narachkata so koi podocna ke vrshite detekcija dali e plateno ili ne
    $mult = $globalpay * 100; // cenata shto treba da se plati pomnozena so 100
    $customer_name = "Ime na korisnikot";
    $customer_lastname = "Prezime na korisnikot";
    $customer_address = "Adresa na korisnikot";
    $customer_town = "Grad";
    $customer_zip = "Postenski kod";
    $customer_tel = "Telefonski broj";
    $customer_email = "Email";
    // CheckSum & CheckSumHeader
    // step 1
    $AmountToPay = $mult; // cenata shto treba da se plati pomnozena so 100
    $PayToMerchant = "XXXXXXXXXX"; // ova ne treba da se menuva, vi go imaat dadeno od CaSys
    $MerchantName = "Ime na firmata"; // ova ne treba da se menuva, vi go imaat dadeno od CaSys
    $AmountCurrency = "MKD"; // valuta vo koja se vrshi plakjanjeto
    $Details1 = "Online prodavnica"; // Ovde mozete da napisete shto sakate
    $Details2 = $arr2; // unikatnite redni broevi
    $PaymentOKURL = "http://vashata_strana.mk/proverka.php?state=ok"; // strana kade formata kje prenasocuva koga plakjanjeto e uspeshno
    $PaymentFailURL = "http://vashata_strana.mk/proverka.php?state=error"; // strana kade formata kje prenasocuva koga plakjanjeto e neuspeshno
    $FirstName = $customer_name;
    $LastName = $customer_lastname;
    $Address = $customer_address;
    $City = $customer_town;
    $Zip = $customer_zip;
    $Telephone = $customer_tel;
    $Email = $customer_email;
    $OriginalAmount = $globalpay; // cenata shto treba da se plati
    $md5password = "TEST_PASS"; // za chudo ovde ne treba da ja napisete vashata lozinka tuku vaka treba da si ostane kaj sekogo
    // step 2 - Vo ovie polinja se generira kolku karakteri sodrzi edno pole so zerofilled na 3 brojki, primer "Zdravo" sodrzi 6 bukvi i imate izgenerirano 006, ova kje vi bide potrebno podocna za generiranje na CheckSum i CheckSumHeader
    $AmountToPay2 = sprintf("%03d", strlen($AmountToPay));
    $PayToMerchant2 = sprintf("%03d", strlen($PayToMerchant));
    $MerchantName2 = sprintf("%03d", strlen($MerchantName));
    $AmountCurrency2 = sprintf("%03d", strlen($AmountCurrency));
    $Details12 = sprintf("%03d", strlen($Details1));
    $Details22 = sprintf("%03d", strlen($Details2));
    $PaymentOKURL2 = sprintf("%03d", strlen($PaymentOKURL));
    $PaymentFailURL2 = sprintf("%03d", strlen($PaymentFailURL));
    $FirstName2 = sprintf("%03d", strlen($FirstName));
    $LastName2 = sprintf("%03d", strlen($LastName));
    $Address2 = sprintf("%03d", strlen($Address));
    $City2 = sprintf("%03d", strlen($City));
    $Zip2 = sprintf("%03d", strlen($Zip));
    $Telephone2 = sprintf("%03d", strlen($Telephone));
    $Email2 = sprintf("%03d", strlen($Email));
    $OriginalAmount2 = sprintf("%03d", strlen($OriginalAmount));
    // step 3
    $CheckSumHeader = "16AmountToPay,PayToMerchant,MerchantName,AmountCurrency,Details1,Details2,PaymentOKURL,PaymentFailURL,FirstName,LastName,Address,City,Zip,Telephone,Email,OriginalAmount," . $AmountToPay2 . $PayToMerchant2 . $MerchantName2 . $AmountCurrency2 . $Details12 . $Details22 . $PaymentOKURL2 . $PaymentFailURL2 . $FirstName2 . $LastName2 . $Address2 . $City2 . $Zip2 . $Telephone2 . $Email2 . $OriginalAmount2;
    $CheckSumHeader2 = $CheckSumHeader . $AmountToPay . $PayToMerchant . $MerchantName . $AmountCurrency . $Details1 . $Details2 . $PaymentOKURL . $PaymentFailURL . $FirstName . $LastName . $Address . $City . $Zip . $Telephone . $Email . $OriginalAmount . $md5password;
    $CheckSum = md5($CheckSumHeader2);
    // step 4 - jazik na formata za plakjanje dokolku imate prethodno cookie so koe odreduvate koj jazik go koristi kupuvachot, dokolku nemate avtomatski ke bide na Makedonski
    if($_COOKIE['language'] == "mk"){
       $language = "mk-MK";
    } else if($_COOKIE['language'] == "en"){
       $language = "en-US";
    } else{
       $language = "mk-MK";
    }
    
    simple.html код/содржина
    Код:
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title></title>
    </head>
    <body></body>
    </html>
    
    Чекор 3 - PaymentOKURL и PaymentFailURL
    proverka.php код/содржина
    Код:
    <?php
    if($_SERVER['REQUEST_METHOD'] === 'POST'){
       $step = mysql_real_escape_string($_GET['state']);
       if($step == "ok"){
         // ovde kod sto treba da se izvrshi koga plakjanjeto e uspeshno
       } else if($step == "error"){
         // ovde kod sto treba da se izvrshi koga plakjanjeto e neuspeshno
       } else{
         header("Location: http://vashata_strana.mk/");
       }
    } else{
       header("Location: http://vashata_strana.mk/");
    }
    ?>
    <!DOCTYPE html>
    <head>
    <meta charset="UTF-8">
    <title>Naslov na stranata</title>
    <link rel="icon" type="image/x-icon" href="images/favicon.png" />
    <link rel="shortcut icon" type="image/x-icon" href="images/favicon.png" />
    </head>
    <body>
    <?php
    if($state == "ok"){
       echo "ПЛАЌАЊЕТО БЕШЕ УСПЕШНО!";
    } else if($state == "error"){
       echo "ПЛАЌАЊЕТО БЕШЕ НЕУСПЕШНО! ОБИДЕТЕ СЕ ПОВТОРНО!";
    }
    ?>
    </body>
    </html>
    
    * ВАЖНО Е ДА СЕ НАПОМЕНИ
    proveri.php документот се вчитува со POST method и во _POST ќе ги имате сите информации што претходно ги пративте до CaSys серверот, со кои можете во state = ok делот да правите споредба и апдејтирате база, што како кога е купено и слично.
    Пример: во $_POST['Details2'] ги имате уникатните редни броеви на нарачката, така да во state = ok делот можете да правите апдејт дека таа нарачка е платена успешно!

    Доколку сакате некој друг да го заврши целиот процес на интеграција за вас, контактирајте ме во ПП, не сум од оние што дерат на суво :D :D
    BUY ME A BEER! :p
     
    На betim89, xristijanGTI, Frozen. и уште 47 други им се допаѓа ова.
  2. masterwu

    masterwu
    Gaining Experience

    519
    347
    11 Февруари 2016
    Машко
    Фала за туторијалчево, дефинитивно ќе се заштеди доста време (а уште повеќе ако направиш WooCommerce плагинче од ова :) )
     
  3. gokica

    gokica
    Модератор

    7,845
    9,038
    13 Јуни 2009
    Секоја чест! Благодарност што посвети време и го сподели знаењето со нас тука.
     
    На Daniel86 му/ѝ се допаѓа ова.
  4. smole

    smole
    Unstoppable

    2,694
    2,834
    18 Април 2007
    Браво за темава!
     
  5. Can4sta

    Can4sta
    Gaining Experience

    311
    283
    19 Јануари 2008
    Bravo, ke im koristi na mnogumina.
     
  6. Fatal1ty_

    Fatal1ty_
    Großmeister

    20,593
    21,184
    28 Февруари 2008
    Машко
    Experienced Web Developer
    @Pulse Ај во порака пушти ми портфолио со php проекти. Стрикно php. И саатница.

    Благодарам
     
  7. Cika

    Cika
    V.I.P

    2,178
    690
    8 Декември 2009
    На karagunov и Pulse им се допаѓа ова.
  8. Pasla

    Pasla
    Intern

    1
    0
    19 Март 2016
    Женско
    Здраво,
    Случајно налетав на туторијалчево ама да сум поискрена не ми се замара бидејки ми е за на работа и секогаш може да плати газда некој друг да го направи ;) Се работи за страна во OpenCart.Договор со Уни Банка имаме склучено се само се чека на инсталацијата.Ако има заинтересирани пратете ми понуда во порака или на info@tabletennismk.com. ке ви бидам многу благодарна :)
    (пс. не стигнав да ги прочитам правилата на форумов да се извинам унапред на модераторот ако има грешки )
     
  9. spiritBreaker

    spiritBreaker
    Unstoppable

    2,406
    2,658
    27 oктомври 2015
    Машко
    g4m3R
    Иванче, не се праат овие работи така. А и башка нарушуваш договор за кршење нс деловна тајна, али нели, ова е македонија :)
     
  10. Pulse

    Pulse
    Practice makes perfect

    1,180
    1,084
    26 oктомври 2014
    Машко
    Full Stack Web Developer
    Само да пуштам еден апдејт!
    Во делот каде генерирате колку карактери содржи внесениот стринг и го заокружувате на 3 цифри.
    Ова
    Код:
    $AmountToPay2 = sprintf("%03d", strlen($AmountToPay));
    целиов овој дел со заокружување на 3 цифри заменете го со
    Код:
    $AmountToPay2 = sprintf("%03d", mb_strlen($AmountToPay, 'UTF-8'));
    Причина за ова дејство:
    strlen функцијата враќа колку бајти содржи стрингот, а не колку карактери. При внесување на кирилични карактери, должината на стрингот ќе се „дуплира“, а со внес на латиница ќе остане непроменета. „Дуплира“ значи дека кириличните карактери се 2 бајта и автоматски добивате погрешен број на карактери.

    * Доколку го прочита некој ова од администрацијата, може постот да се спои со првиот како апдејт. :)
    Благодарам.
     
    На Alucard му/ѝ се допаѓа ова.
  11. CHukio

    CHukio
    Intern

    111
    31
    7 Март 2013
    Машко
    Имам едно прашање. Како можам да истестирам дали функционира сето ова со мојот MerchantID?
     
  12. Pulse

    Pulse
    Practice makes perfect

    1,180
    1,084
    26 oктомври 2014
    Машко
    Full Stack Web Developer
    многу лесно, го копираш кодот според туторијалот, го ставаш на локалхост, променуваш со твојот MerchantID и плаќаш :D
     
  13. maksten

    maksten
    Intern

    4
    0
    7 oктомври 2015
    Машко
    Некој дали има искуство или да препорача некој кој може да помогне со имплементирање на комерцијален модул за онлајн наплата со Magento?
     
  14. Pulse

    Pulse
    Practice makes perfect

    1,180
    1,084
    26 oктомври 2014
    Машко
    Full Stack Web Developer
    ако збориме за Casys/Cpay, овие кодови од првиот пост можеш да ги имплементираш во било која скрипта. Само ти треба малку разбирање од програмирање.
     
  15. maksten

    maksten
    Intern

    4
    0
    7 oктомври 2015
    Машко
    Pulse,

    Ви благодариме на Вашата препорака.
    Во моментов немаме девелопер кој би можел да ни ги изработи и овие едноставни решенија.

    Потребен ни е девелопер со малку поголемо искуство со Magento за имплементација со оглед дека сакаме да воведеме и онлајн плаќање на рати и автоматски обновливи плаќања за кои имаме добиено одобрение и упатства од Стопанска банка за нивно имплементирање.

    Дали би можеле Вас или некој со Ваша препорака да ангажираме и колкав буџет би ни требало да можеме да го реализираме ова.
     
  16. Pulse

    Pulse
    Practice makes perfect

    1,180
    1,084
    26 oктомври 2014
    Машко
    Full Stack Web Developer
    Јас да би се нафатил, мое мислење за имплементација би било околу 150-200Е еднократко.
    Побарај друг за оваа работа, јас само што се вратив од годишен и сум преокупиран со работа :(
     
  17. maksten

    maksten
    Intern

    4
    0
    7 oктомври 2015
    Машко
    Ако некој друг има на форумов што би сакал да се нафати нека пише слободно.
    Инаку ако не е проблем имплементацијата да биде направена односно целосно во функција до 1ви Септември.

    Што се однесува до цената и плаќањето останува да се видиме и да прецизираме за истото.

    Дали има разлика ако е решението за magento 1.9.3 или за magento 2.2 или ќе може да се примени и на двете верзии.
     
  18. Kokolo

    Kokolo
    Intern

    3
    0
    27 ноември 2009
    Другар дали го имаш пробано плагинчево? Да знам дали вреди.


    А и општо некој да не знае Wordpress плагин/имплементација за cPay/CaSys?
     
  19. Cika

    Cika
    V.I.P

    2,178
    690
    8 Декември 2009
    Функционира.
     
    На Kokolo му/ѝ се допаѓа ова.

Сподели

Вчитување...