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,236
    1,283
    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
     
    На d4n13l, Astraion, Psycore и уште 54 други им се допаѓа ова.
  2. masterwu

    masterwu
    Gaining Experience

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

    gokica
    Модератор

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

    smole
    Unstoppable

    3,107
    3,586
    18 Април 2007
    Браво за темава!
     
  5. Can4sta

    Can4sta
    Баниран/a

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

    Fatal1ty_
    Großmeister

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

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

    Cika
    V.I.P

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

    Pasla
    Intern

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

    spiritBreaker
    Unstoppable

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

    Pulse
    Practice makes perfect

    1,236
    1,283
    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

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

    Pulse
    Practice makes perfect

    1,236
    1,283
    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,236
    1,283
    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,236
    1,283
    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,474
    1,076
    8 Декември 2009
    Функционира.
     
    На artweb и Kokolo им се допаѓа ова.
  20. Mao

    Mao
    On your way to fame

    1,040
    565
    5 Јуни 2007
    Машко
    Да ја освежам темава, успеа некој да направи / набави плагин за Cpay за некој од другиве платофрми како што се Magento, OpenCart, Prestashop? За wodrdpress плагинот го имам, го купив.

    Треба да почнам да работам на веб шоп проект, па си велам да истражам малку првин околу плагиниве како стојат работите, оти ќе ми треба некој.

    by the way, ако некој го сака плагинот нека пише пп ќе му го пратам.
     
    На ssimovski и AleksandarWeb им се допаѓа ова.
  21. Gegovskid

    Gegovskid
    Intern

    1
    8
    18 Мај 2019
    Машко
    Здраво на сите,

    Можеби не го користам моето право за пишување на овој форум по неговите правила (и однапред се извинувам на админот за тоа), но би сакал да споделам едно искуство околу оваа тема.
    Ги завршивме сите потребни папирологии со банката и casys системот, ги добивме потребните упатства, го набавивме плугинот, меѓутоа тука почна нашата мака околу тестирање и имплементација на системот. После скоро 2 недели допишување со корисничката подршка, ние бевме на исто место, т.е. никаде. Го контактирав Pulse и за скромна надокнада го добивме системот истестиран и спремен за работа.
    Зато, мислам дека е во ред, вака јавно да му се заблагодарам на Pulse за укажаната помош и да го препорачам на сите коишто можеби ќе се сретнат со проблемот на имплементација, нека не се нервираат и не бараат решенија и да си го губат времето, го имате вистинскиот човек за ова, неговиот username e Pulse и човекот навистина ќе Ви ги среди сите проблеми за beer и навистина не е еден од оние кои "дерат" на суво.

    Ти благодарам Pulse.

    Со почит, Драгослав :)
     
    На loris, Psycore, Fatal1ty_ и уште 5 други им се допаѓа ова.
  22. spiritBreaker

    spiritBreaker
    Unstoppable

    2,785
    3,249
    27 oктомври 2015
    Машко
    g4m3R
    @Pulse е убо дете :) само да не се нервира многу многу со фордот :)
     
    На Pulse му/ѝ се допаѓа ова.
  23. Pulse

    Pulse
    Practice makes perfect

    1,236
    1,283
    26 oктомври 2014
    Машко
    Full Stack Web Developer
    што му фали на фордот бе :D
     
    Последна промена: 30 Мај 2019
    На stefan_v и spiritBreaker им се допаѓа ова.
  24. stk

    stk
    Intern

    16
    0
    5 Јуни 2009
    Машко
    Здраво на сите,

    Ми треба мала помош околу Casys имплементација на Opencart.

    Најдов еден готов Casys додаток за Opencart кој што во тест мод со TEST_PASS функционира супер додатокот (дава информација дека Checksum е пресметан и прави URL redirection за успешна или неуспешна трансакција) но кога ќе го ставиш во Production mode (со сменета лозинка - наместо TEST_PASS нашата лозинка за најава на касис контролниот дел) на Cpay страната кажува System error.

    Прашањето ми е:
    Дали треба да ги известиме во Касис дека тестирањата завршија и системот да ни го пуштат во употреба односно да можеме да примаме реални нарачки/трансакции или треба ние да направиме некои корекции во додатокот.

    Ми испратија еден код/грешка од одделот за поддршка на Касис и не знам дали е поврзан со мојот додаток или со корисничката сметка на Касис бидејќи бев блокиран поради неуспешно логирање.

    FATAL Invalid CheckSum from Merchant TIN=XXXXXXXXX! Expected -XXXXXXXXXXXXXXXXXXXXXXXXXXXX got- XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Го контактирав девелоперот што го има направено додатокот но не добив никаков повратен одговор од него.

    Ве молам за помош.. :)

    Поздрав.
     
  25. Frozen.

    Frozen.
    Gaining Experience

    106
    127
    4 oктомври 2015
    Машко
    Не ти треба таја лозинка. Следен чекор е да ги известиш cPay да ти издадат лозинка само доколку тестовите се успешни.
     
    На stk му/ѝ се допаѓа ова.

Сподели

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