PHP Implementare Mobilpay

O multime de aplicatii web aleg sa foloseasca serviciile mobilpay.ro. Aceasta are un mare avantaj pentru afacerile mici si mijlocii online, care nu doresc un contract complex cu o companie ce ofera microplati/plati cu cardul online.
Majoritatea acestor aplicatii web sunt scrise in PHP, si desi mobilpay ofera un exemplu complet de integrare al serviciului intr-o aplicatie PHP, nu este chiar self-explaining iar implementarea in aplicatia proprie este deseori anevoioasa.
Daca cititi acest articol, cel mai probabil ati cautat pe google “php implementare mobilpay”, sau ceva similar.
           In continuare voi prezenta un scurt tutorial pentru implementarea completa a serviciului.
  • Pas I
    • verificati daca aveti versiunea de PHP are suport openSSL. Un simplu
       phpinfo();

      ar trebui sa va dezvaluie aceasta

  • Pas II
    • downloadati/rasfoiti exemplul oficial de implementare PHP mobilpay.
    • downloadati certificatele (public si privat) din admin mobilpay -> conturi de comerciant -> detalii -> setari securitate.
    • tot de acolo copiati intr-un loc sigur semnatura (un cod de forma xxxx-xxxx-xxxx-xxxx-xxxx) si modificati in sms.php linia corespunzatoare (cautare dupa “xxxx”) cu acest cod.
    • intrati in admin mobilpay -> conturi de comerciant -> produse si servici -> click pe semnul plus, si trebuie sa gasiti un numar de forma 000000-000000-000000 (semnatura). copiati si acest numar intr-un loc sigur si modificati in sms.php linia corespunzatoare (cautare dupa “0000”) cu acest cod.
  • Pas III
    • in sms.php- de aici pleaca user-ul de pe site-ul vostru – trebuie sa schimbati urmatoarele:
      • $x509FilePath = ” cu calea catre ceritifcatul public (e.g. $x509FilePath = “../certs/public.cer”;)
      • $orderId este generat ca un uniqid(). veti avea nevoie de acest token – el retine tranzatia curenta (comanda). recomand sa puneti acest token intr-o sesiune PHP ($_SESSION[“orderId”] = $orderId;). recomand adaugarea acestui token de asemenea, si intr-o baza de date persistenta (e.g. cel mai probabil MySQL).
         
        $orderId = sha1(uniqid($someSecretKeyThatOnlyYouKnow, true));
      • evident, trebuie sa integrati formularul in sms.php in adevaratul template pe care il aveti pe site
    • in smsConfirm.php- aceasta pagina va fi accesata de catre sistemul mobilpay cand plata este efectuata – eveniment ASINCRON (se poate intampla DUPA ce utilizatorul a fost redirectat pe site-ul dvs.).
      • modificati $privateKeyFilePath cu calea adevarata catre certificatul privat (e.g. “../certs/private.cer”). IMPORTANT!!! recomand ca folder-ul cu certificatele sa contina un .htaccess cu urmatoarele “deny from all”. Aceasta va face ca certificatele sa nu fie accesibile de catre cineva neautorizat.
      • in mod normal, trebuie sa modificati mai multe lucruri in smsConfirm.php. ar trebui sa luati id-ul tranzactiei (orderId-ul de mai devreme), sa cautati tranzactia in baza de date si sa o marcati activa (daca este cazul – daca server-ul a postat “confirmed” – exista un switch in smsConfirm.php).
        ...
        switch($objPmReq->objPmNotify->action)
        {
          case 'confirmed':
            $orderId = $objPmReqSms->orderId;
            mysql_query("update orders set status='confirmed' where order_id='".$orderId."'");
            $errorMessage = $objPmReq->objPmNotify->getCrc();    
            break;
        ...
    • daca plata s-a efectuat, utilizatorul se va intoarce in smsReturn.php cu parametrul orderId in $_GET. puteti accesa astfel:
      $orderId = mysql_real_escape_string($_GET["orderId"]);
      $result = mysql_query("select * from orders where order_id='".$orderId."' and status='confirmed'");
      if (mysql_fetch_array($result)) {
        // utilizatorul a platit, putem sa-i oferim serviciul...
      }

      puteti eventual si compara cu valoarea din sesiune ($orderId == $_SESSION[“orderId”] pe care ati setat-o in sms.php. Recomand un token puternic – exemplul

      $orderId = md5(uniqid(rand()).SECRET_SEED);

      este destul de bun – pentru a evita atacurile de tip brute-force, unde SECRET_SEED e un string stiut doar de voi.

      • result e istorie – updatati contul userului (daca e cazul) pentru a oferi serviciul, eventual trimiteti-i un email userului si adminului care notifica efectuarea platii. daca este cazul unui document electronic oferiti-i un link catre acesta (aveti grija totusi ca link-ul sa expire).
      • nu in ultimul rand NU UITATI sa distrugeti sesiunea, daca aveti una (unset($_SESSION[“orderId”]))

5 comments

  1. admin says:

    Pentru cei interesati de implementarea completa a serviciului, contactati-ma la marius@marius-bucur.ro.

  2. Cine ar putea sa ma ajute sa integrez modul de plata .
    Ma poate contacta la numarul 0742379789 sa vorbim detalile de pret si etc.

  3. Salut Marius.
    Din pacate, nu se poate descarca exemplul (privilegii insuficiente). Poti uploada fisierul in alta parte? Lucrez momentan la o platforma asemanatoare celei la care ai dat o mana (salveaza o inima) si m-ar ajuta enorm sa arunc un ochi in exemplul tau, pentru ca explicatiile de pe mobilpay lasa mult de dorit.

    Multumesc,
    Ciprian

  4. Adrian says:

    Multumesc din suflet pentru aceasta postare. Mi-am “rupt” capul pana acum cu aceasta implementare mobilpay. Acum totul este clar.
    Astept si alte articole utile.
    Ady

  5. Catalin says:

    Salut,
    Poti sa ma ajuti cu o implementare de plata cu cardul de la MobilPay pentru WordPress/woocommerce? Eventual un script contra cost?

Leave a Reply

Your email address will not be published. Required fields are marked *


× 2 = 8