Problema integrare plata prin MobilPay

Salut,

am in plan lansarea unui website ce intermediaza vanzarea serviciilor dintre freelancer si client. Site-ul a fost finalizat iar majoritatea detaliilor au fost puse la punct. Din pacate insa, alegerea unui procesator de plata si integrarea acestuia au fost lasate pe final.

Asadar, am ales Netopia Mobilpay, care atunci mi se parea cea mai buna solutie de procesare a platilor cu cardul avand in vedere raportul calitate-pret, din research-ul facut de mine. Dupa cateva batai de cap cu cheile publice/private (trebuie mentionat ca backend-ul lor este “antic” iar pana la aprobarea contractului, care dureaza in jur de 7 zile, iti dau un cont de safebox pentru teste care te limiteaza destul de mult), am reusit sa fac script-ul sa mearga.

Site-ul meu este facut pe Wordpress, cei de la Mobilpay neavand niciun modul de integrare pentru platforma asta. Dar aveau un model de implementare in PHP, pe care l-am descarcat si adaptat conform documentatiei foarte modeste. Am reusit ca atunci cand un vizitator intra pe pagina produsului/serviciului si se decide sa-l cumpere, sa il redirectionez catre pagina secure.mobilpay.ro, unde se afla form-urile de nume/numar_card/CVV, dar codul lor ma impiedica sa modific pretul in functie de variabila $price din tema de Wordpress, iar pretul ramane unul fix.

Va las aici documentatia si exemplul de implementare in PHP, in speranta ca ma puteti ajuta:

Aici este codul responsabil de pret (poate fi gasit pe liniile 79/80 din fisierul cardRedirect.php):

$objPmReqCard->invoice->currency        = 'RON';
$objPmReqCard->invoice->amount          = '10.00';

Preia datele din fisierul XML (poate fi gasit in folderul ‘XML structure’)

<invoice currency="RON" amount="card">

Am incercat sa modific cele 2 fisiere XML in PHP, facand header-ul XML/UTF-8 si adaugand o noua regula in htaccess ca cele doua fisiere sa fie citite ca XML. In zadar. Am incercat sa scriu in interiorul ghilimelelor cu ob_get_content() dar degeaba. Iar daca vreau sa includ fisierul ce contine variabila $price in cardRedirect.php, toata pagina crapa.

Imi cer scuze daca am fost neclar, dar va voi raspunde daca exista neclaritati. Cer ajutor pe acest forum deoarece cei de la suport tehnic Netopia mi-au comunicat ca ei nu se ocupa de dezvoltare si sa “multiplica linia aia”.

Multumesc anticipat!

1 Like

Faci ceva gresit. Nu se modifica nimic din XML.

De ce nu faci $objPmReqCard->invoice->amount = $price; ?
Folosesti vreun script de e-commerce?

P.S: Eu am un modul facut pe woocommerce pentru wordpress si te pot ajuta cu informatii despre ce vrei sa faci. (nu incerc sa ti-l vand, doar iti spun ca stiu documentatia aia pe de rost deja)

1 Like

Salut, iti multumesc mult pentru reply.

Tema pe care o folosesc este specifica unui site de vanzari servicii si are deja integrata optiunile minimale unui script de e-commerce (post nou -> serviciu nou, alte form-uri pentru pret, purchase button, etc.), deci nu a fost nevoie sa instalez un plugin gen Woocommerce.

$objPmReqCard->invoice->amount = $price;

Sa explic putin structura site-ului. Am un folder separat in root directory numit “plata-cu-cardul” in care am pus acel script de integrare a platii Mobilpay. Sunt novice in PHP, dar din cate stiu ca sa lucrez cu variabile declarate in alte fisiere trebuie sa le includ in fisierul respectiv. Deci in /plata-cu-cardul/cardRedirect.php trebuie sa includ un fisier din /wp-content/themes/numetema/lib/payment-gateways/ceva.php, problema este ca atunci cand incerc sa fac asta, pagina cardRedirect.php pur si simplu crapa si nu imi mai afiseaza nimic. Cum pot face sa preiau variabila aceea?

Iti multumesc inca o data de reply!

Incearca sa pui pretul in sesiune si sa redirectionezi apoi catre pagina cardRedirect.php.

În wp-config.php pune WP_DEBUG pe true. Eventual configurează PHP să afișeze erorile, pentru a-ți da seama ce și unde crapă.

Îți recomand să nu faci tot felul de includes dubioase din afara WP. Cel mai probabil, pagina albă este dată pentru că acel ceva.php folosește metode din WP (care, evident, nu vor fi definite). Varianta cea mai potrivită este să pui totul într-un plugin iar în temă să folosești un hook, e.g. do_action('payment').

De asemenea, dacă spui că ești novice, chiar crezi că e o idee bună să faci tu asta? Ce se întâmplă dacă îți injectează cineva 10 în loc de 1000 (la preț) ?

1 Like

Multumesc, dar cu ce m-ar ajuta asta? Also, te referi la redirectionare prin header? De ce as face asta?

Salut, iti multumesc frumos pentru raspuns. Util.

O sa incerc sa creez un plugin in orele urmatoare. Va tin la curent. Imi va fi mai usor sa integrez variabila aceea in pagina mea daca voi creea un buton cu “cumpara acum” atasat cu un hook ca in exemplul tau? Pot trimite mai usor pretul de acolo?

Pai daca cineva ar vrea sa imi injecteze astazi 10 in loc de 1000, ma gandesc ca ar avea nevoie de un 0day in Wordpress sau vreo vulnerabilitate in vreun plugin, iar eu incerc pe cat posibil sa tin update-urile la zi.

În acest context mă refeream la problemele de securitate :smile:

do_action a fost doar un exemplu simplificat la maximum. Nu sunt (foarte) familiar cu woo, dar aș zice că e de preferat să te legi de hook-urile plugin-ului pentru a avea integrarea optimă (e.g. actualizări prețuri, statistici, conturi clienți etc).

1 Like

O sa incerc sa securizez posibilele gauri in vedera evitarii problemelor de genul. Dar cum sa invat altfel daca nu practicand? Ma voi documenta inainte sa ma apuc de lucru. :stuck_out_tongue:

Nu folosesc woocommerce la proiectul acesta, am specificat putin mai sus:

Tema pe care o folosesc este specifica unui site de vanzari servicii si are deja integrata optiunile minimale unui script de e-commerce (post nou → serviciu nou, alte form-uri pentru pret, purchase button, etc.), deci nu a fost nevoie sa instalez un plugin gen Woocommerce.

Nu stiu exact, dar sper ca asta nu o sa faca lucrurile mai complicate. Oricum, studiind payment gateway-urile instalate implicit (Stripe, PayPal, Payzaa) reusesc sa inteleg cat-de-cat si cum e cu hook-urile astea.

Also, any thoughts on this? HookPress – WordPress plugin | WordPress.org

Salutare,

am rezolvat problema folosind un form cu un hidden input pe pagina de purchase care face POST catre acel cardRedirect.php. Nu a mai fost nevoie sa includ niciun fisier.

Multumesc tuturor pentru raspunsuri!

Faci POST cu pretul pus intr-un hidden input? Super, zi-mi si mie de unde cumpar chestii de la tine.

3 Likes

vrei sa spui ca nu este o metoda sigura ? Poti detalia putin ?
Multumesc

F12 → inspect element → pui ce valoare vrei tu → submit.

Sau, cum spunea un înțelept extrem de modest mai sus:

:see_no_evil:

2 Likes

valoarea este criptata…chiar am incercat cateva metode de a schimba pretul cum ai spus…cu valori deja criptate a altor produse, dar mobilpay-ul se pare ca recunoaste asta. Se schmba sirul de caractere criptate chiar si pentru acelasi pret la fiecare refresh…
Momentan inca ramane o metoda buna :wink:

Dacă nu este criptare one way - și sigur nu este, pentru că altfel n-ar ști mobilpay cât să tragă de pe card - NU este o variantă sigură. Este doar o chestiune de timp până când ceva nu tocmai bun se va întâmpla.

O variantă mai bună ar fi următoarea:

  • fiecare produs are câte o intrare în DB (și implicit un ID);
  • formularul păstrează în acel hidden field ID-ul produsului;
  • la submit iei din DB produsul și prețul acestuia.

Pe acest ID poți să te distrezi cât vrei tu cu criptări și hash-uri. În cazul în care consideră cineva că e o idee bună să schimbe lucruri din inspector, cea mai aiurea chestie ce se va întâmpla este că va fi cumpărat altceva.

2 Likes

din fericire vad ca tema face deja asta. cere din baza de date id-ul postului.
Iti multumesc mult pentru ce mi-ai scris si am si verificat. sunt mai sigur acum ca e in siguranta metoda facuta.

1 Like

Hello,
De doua zile ma confrunt si eu cu acesta problema…
Ma puteti ajuta cu niste informatii ?

Multumesc anticipat,
*cum pot lua legatura cu tine in privat pentru a nu “polua” acest topic si pentru a nu deschide unul nou pe aceeasti tema/similara .

Buna ziua! Am si eu o intrebare. Cine se pricepe si vrea sa implementeze modalitatile de plata de la mobilpay pe www.sezarcom.com? Siteul este facut in wordpress. Ceea ce doresc eu, sunt doua formulare diferite, unul pentru donatii iar altul pentru achizitii, cu pret fix. Vreau ca plata sa se poata face atat prin sms cat si prin card.

Îți recomand să postezi aici: #marketplace:oferte-de-munca

1 Like

Salut, modulul pt woo cat costa si este compatibil cu ultima versiune de wp si woo? Cu update-urile cum procedezi?