Jump to content
php.lv forumi

aaxc

Moderatori
  • Posts

    638
  • Joined

  • Last visited

Everything posted by aaxc

  1. Nosauc cenu, ko esi gatavs maksaat.
  2. aaxc

    Atalgojums

    Vienaa zinjaa jaapiekriit codez, es kaa divu beernu teevs varu apliecinaat, ka vecaakiem IR jaabuut gan pedagogiem gan psihologiem gan aarstiem gan uzticiibas personaam utt. No taa neizbeegsi. Jautaajums, kaadaa liimenii. Bet tas taa, offtopic.
  3. aaxc

    Atalgojums

    Laikam nekad nesapratīšu, kāpēc LV forumos ir jākasās tai vietā, lai palīdzētu viens otram.
  4. Sorry, nvm tad; es neiebraucu, kas tev ir nepieciešams.
  5. Man izskatās. ka tas tāpēc, ka WHERE parametrs ir norādīts tikai vienam no abiem joiniem.
  6. aaxc

    xml to string

    Kā jau briedis teica, izmanto SimpleXML un sadrukā parastā tabulas veidā rezultātus un uzliec header CSV. header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=file.csv"); header("Pragma: no-cache"); header("Expires: 0"); echo "xml11, xml12, xml13" . "\n\r"; echo "xml21, xml22, xml23" . "\n\r"; echo "xml31, xml32, xml33" . "\n\r"; ... Lieta darīta.
  7. Ir kādas atsauksmes par šo kantori? Cik skatos, cenas labas un serviss arī esot ok.
  8. aaxc

    Atalgojums

    Sysadmini bija tie kas man to teica ( loģiski ;), kad es atmetu ar roku administrēšanai un pievērsos programmēšanai.
  9. Vovo, CMS prasības atbils gandrīz jebkuram webā pieejamam gatavam CMSam. Nav jēgas tasiīt ko tādu no jauna, nekāds security ieguvums tur nebūs.
  10. aaxc

    Atalgojums

    Kad es sāku programmēt, gan pastāvēja uzskatas, ka programmētājs ir IT jomas sētnieks ;)
  11. Šodienas dati: Chrome 21 437 13 Maxthon 3.4.1 422 15 Opera 12.00 385 9 Safari 6.0 376 8 Firefox 14 345 9 Internet Explorer 9 138 5
  12. Regulāri sanāk lietot MySQL, PgSQL un Oracle.
  13. Tieši tā. Nofeikot e-pasta adresi ir vieglāk par vieglu. Un ja ar to pietiktu, tad man sen jau piederētu gan draugiem.lv, gan facebook.com gan google.com domeins ... etc.
  14. Nav jau tik traki, tikai 4 meeneshi. Sadales proces knappi saacies ;)
  15. Paga, ja es protams kautko mega "nelunjoju", tad sesija ir piesaistiita maximaali vienam domeinam ... ja iframe ir citaa domeinaa, tad risinaajumu nav. Ja buutu, tad tas buutu diegan liels security breach.
  16. Es jau nenolieku, tik briinos.
  17. Tev ir 24 gadi un tu sevi tik zemo novērtē? Vai tās ir skolas oficiālās atzīmes 5 ballu vērtībā?
  18. Kā būtu, ja mēs palīdzētu cilvēkiem pārmaiņas pēc?
  19. Ir vismaz ejošs demo paraugs kur var apskatīties kā lapa reāli šancē un kāds ir admin panelis?
  20. Jebkurš ir welcome uzlabot šo kodu, lai gala rezultāts būtu pēc iespējas efektīvāks un "skaistāks".
  21. Ja apmierina mans stils, tad vēlāk, kad būs iedvesma, varu tādu pašu izveidot priekš DNB un Citadele.
  22. Sveiki, kā jau solīju kādu laiku atpakaļ, šeit ir paša rakstīts Norvik BankLink izveides īss manuālis. Es personīgi esmu izveidojis divus dažādus failus, vienu requestam ( request.php ), otru responsei ( response.php ). request.php Pašam bankas requestam ir jābūt post formātā ar 3 laukiem: LANG, DATA un MAC Manā gadījumā tas izskatās šādi: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Banklink</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form method="post" name="bank_form" id="bank_form" action=" ' . $this->getBankServer() . '" accept-charset="UTF-8"> <input type="hidden" name="LANG" value="' . $this->getPrefLang() . '" /> <input type="hidden" name="DATA" value="' . $this->getXMLData() . '" /> <input type="hidden" name="MAC" value="' . $this->getMac() . '" /> </form> <script type="text/javascript" language="javascript"> document.bank_form.submit(); </script> </body> </html> LANG: LV, RU vai EN ( domājams ka komentārus neprasa ) DATA: Sastāv no XML veida pieprasījuma šādā izskatā: <?xml version="1.0" encoding="UTF-8" ?> <bl> <snd>' . $this->getSender() . '</snd> <query>NEW</query> <type>' . $this->getSenderType() . '</type> <data> <CLIENT_ID>' . $this->getVendorId() . '</CLIENT_ID> <AMOUNT>' . $this->getOrderAmount() . '</AMOUNT> <CCY_NAME>LVL</CCY_NAME> <CCY_CODE>1</CCY_CODE> <BNF_NAME>' . $this->getCompanyName() . '</BNF_NAME> <BNF_ACCOUNT>' . $this->getVendorAccount() . '</BNF_ACCOUNT> <BNF_ID>' . $this->getVendorRegCode() . '</BNF_ID> <RESIDENCE_ID>LV</RESIDENCE_ID> <RESIDENCE_NAME>LV-LATVIA</RESIDENCE_NAME> <DETAILS>' . $this->getPaymentDetails() .'</DETAILS> </data> <date>' . date( 'dmY' ) . '</date> <time>' . date( 'His' ) .'</time> <reply> <session_id>' . $this->getSessionId() . '</session_id> </reply> <reply_url>' . $this->getReturnUrl() . '</reply_url> </bl> Note: Laukiem ir obligāti jānūt ar LIELAJIEM un mazajiem burtiem! Apskatam katru lauku un tā izveidi : snd = Sūtītāja vārds query = NEW type = Sūtītāja tips ( norāda banka ) date = Aktuālais datums formātā "dmY" time = Aktuālais laiks formātā "His" reply_url = Adrese, uz kuru banka nosūtīs responsi replay: session_id = Unikāls sessijas ID bankas vajadzībām data: CLIENT_ID = Bankas piešķirtais uzņēmuma ID AMOUNT = Summa CCY_NAME = Valūta LVL vai EUR CCY_CODE = Valsrts kods ( 1 = Latvija ) BNF_NAME = Uzņēmuma pilns nosaukums BNF_ACCOUNT = Uzņēmuma Norvik bankas konts BNF_ID = Uzņēmuma reģistra kods RESIDENCE_ID = Uzņēmuma rezidence ( LV = Latvija ) RESIDENCE_NAME = Rezidences pilns nosaukums = LV-LATVIA DETAILS = Maksājuma mēķis MAC: Šī ir svarīgākā daļa. Lai banka pieņemtu maksājumu, ir nepieciešams izveidot MAC, kas sastāv no XML hash vērtības, kas ir parakstīta ar uzņēmuma privāto atslēgu un pēc tam pārvērsta base64 kodējumā. Nolasam privāto atslēgu: private function setPrivateKey( $key_name ) { $fp = fopen( $this->getKeyLocation() . '/' . $key_name, "r" ); $priv_key = fread( $fp, 8192 ); fclose( $fp ); $this -> private_key = openssl_get_privatekey( $priv_key ); } Izveidojam parakstu: private function setSignature() { openssl_sign( $this->getXMLData(), $signature, $this->getPrivateKey() ); $this -> signature = $signature; } Nokodējam un izveidojam MAC vērtību: private function setMac() { $this -> mac = base64_encode( $this->getSignature() ); } Tad kad visas šīs vērtības ir gatavas, saliekam tās jau pieminētajā HTML formā un izpildam to. Voila! response.php Ar responsi ir stipri vienkāršāk. Banka atbildi sūta principā tādā pašā paskatā, kā mēs savu pieprasījumu: LANG, DATA, MAC DATA Šeit mums ir pamata vērtības ( principā viss kas mums ir vajadzīgs ): <?xml version="1.0" encoding="UTF-8" ?> <bl> <snd>NORVIKBANK</snd> <rcv>Company Name</rcv> <date>28042008</date> <time>110536</time> <reply> <session_id>Muusu nosuutiitais session ID</session_id> </reply> <status>12</status> </bl> Principā, kas mums šeit ir vajadzīgs ir status, kas norāda, kas ar mūs interesējušo maksājumu ir noticis. 10 = Signed 11 = Processing 12 = Accepted Payment 20 = Rejected Payment MAC Laigan DATA mums jau ir mūs interesējošā informācija, šis lauks ir OBLIGĀTI jāpārbauda. Pretējā gadījumā jebkurš, kas zina tavu response url, var iesūtīt veiksmīgu maksājumu, ko protams tu īsti nevēlētos. Tātad, nolasam mak atsūtīto signaturi, kas ir izveidota tādā pašā veidā, kā mūsu jau sūtītā: private function checkSignature( $key_name ) { $signature = base64_decode( $this -> getMac () ); $fp = fopen( $this->getKeyLocation() . '/' . $key_name, "r" ); $cert = fread( $fp, 8192 ); fclose( $fp ); $pubkeyid = openssl_get_publickey( $cert ); $ok = openssl_verify( $this->getData(), $signature, $pubkeyid ); if ( $ok == 1 ) { $return = true; } else { $return = false; } openssl_free_key( $pubkeyid ); return $return; } Kad tas ir pārbaudīts, vienkārši apskatam mūsu responses status un izveidojam attiecīgu atbildi! private function getResponseStatus() { $xml = simplexml_load_string( $this->getData() ); $status = (array)$xml -> status; $session_id = (array)$xml -> reply -> session_id; $this -> setSessionId( $session_id[ 0 ] ); return $status[ 0 ]; } switch ( $this->getResponseStatus() ) { # Signed case "10": // Signed break; # auto bank response about payment process case "11": // Processed break; # auto bank response about finished payment case "12": // Finished break; # Rejected Payment case "20": // Failed break; } Tas arī viss. PS: Pielikumā abu scriptu paraugi ar papildus komentāriem. request.php response.php
×
×
  • Create New...