PageRenderTime 48ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/paybox/validation_manuelle.php

https://gitlab.com/ptisky/API_prestashop
PHP | 124 lines | 99 code | 13 blank | 12 comment | 18 complexity | cb429ef18a531c5a8a2b76090cae90b3 MD5 | raw file
  1. <?php
  2. /*
  3. * Module de paiement Paybox par l'�quipe de Magavenue
  4. * contact@magavenue.com
  5. * http://www.magavenue.com/blog/
  6. */
  7. include(dirname(__FILE__).'/../../config/config.inc.php');
  8. include(dirname(__FILE__).'/paybox.php');
  9. $paybox = new Paybox();
  10. $httpDirect = $paybox->httpDirect();
  11. $erreurPaybox = true;
  12. $signatureValide = false;
  13. $erreurPayment ='';
  14. logTxt("Validation manuelle");
  15. //Verification des adresses ip du serveur paybox (seulement pour http direct)
  16. if($httpDirect) {
  17. $verification = verification_ip_appelant();
  18. }
  19. $pbx_retour = '';
  20. //recuperation des variables envoyes par Paybox
  21. $vars = $_GET;
  22. foreach ($vars as $key => $val)
  23. {
  24. if ($key == 'pbx_sign')
  25. $pbx_sign = $val;
  26. else
  27. $pbx_retour .= '&' . $key . '=' . $val;
  28. }
  29. $pbx_retour = substr($pbx_retour, 1);
  30. //verification signature :
  31. if(PbxVerSign($pbx_sign, $pbx_retour, 'clefpublique.pem')!= 1){
  32. $signatureValide = false;
  33. $erreurPayment = 'Erreur lors de la verification de la signature';
  34. }else {
  35. $signatureValide = true;
  36. }
  37. //verification du code derreur
  38. $erreurRequetePaybox = $vars['pbx_error'];
  39. switch($erreurRequetePaybox)
  40. {
  41. case '00000':
  42. $erreurPaybox = false;
  43. break;
  44. default:
  45. $erreurPayment ='Code Paybox invalide';
  46. break;
  47. }
  48. $link = new Link();
  49. if(_PS_VERSION_ >= '1.5')
  50. Context::getContext()->link = $link;
  51. //si le numero de commande est present, passons au traitement de la commande
  52. if(isset($vars['ref']))
  53. {
  54. $cart = new Cart($vars['ref']);
  55. //si le code derreur est bon et que la signature est bonne alors nous pouvons valider la commande
  56. if(!$erreurPaybox)
  57. {
  58. $total = floatval(number_format($vars['pbx_amount'], 2, '.', ''))/100;
  59. $order = new Order(Order::getOrderByCartId(intval($cart->id)));
  60. $customer = new Customer((int)$order->id_customer);
  61. if(_PS_VERSION_ < '1.5')
  62. Tools::redirectLink(__PS_BASE_URI__.'order-confirmation.php?id_cart='.intval($cart->id).'&id_module='.intval($paybox->id).'&id_order='.$order->id.'&key='.$order->secure_key);
  63. else
  64. Tools::redirect(__PS_BASE_URI__.'index.php?controller=order-confirmation&id_cart='.$cart->id.'&id_module='.$paybox->id.'&id_order='.Order::getOrderByCartId(intval($cart->id)).'&key='.$customer->secure_key);
  65. } else {
  66. Tools::redirectLink(__PS_BASE_URI__.'history.php');
  67. }
  68. }
  69. Tools::redirectLink(__PS_BASE_URI__.'history.php');
  70. function verification_ip_appelant() {
  71. $unauthorized_server = true;
  72. //les differentes ips autorises sont en dur pour eviter les modifications par base de donnee
  73. $authorized_ips = array('195.101.99.76','194.2.122.158','62.39.109.166','194.50.38.6');
  74. foreach ($authorized_ips as $authorized_ip) {
  75. if ($_SERVER['REMOTE_ADDR'] == $authorized_ip) {
  76. return true;
  77. break;
  78. }
  79. }
  80. }
  81. function LoadKey( $keyfile, $pub=true, $pass='' ) { // chargement de la cl� (publique par d�faut)
  82. $fp = $filedata = $key = FALSE; // initialisation variables
  83. $fsize = filesize( $keyfile ); // taille du fichier
  84. if( !$fsize ) return FALSE; // si erreur on quitte de suite
  85. $fp = fopen( $keyfile, 'r' ); // ouverture fichier
  86. if( !$fp ) return FALSE; // si erreur ouverture on quitte
  87. $filedata = fread( $fp, $fsize ); // lecture contenu fichier
  88. fclose( $fp ); // fermeture fichier
  89. if( !$filedata ) return FALSE; // si erreur lecture, on quitte
  90. if( $pub ){
  91. $key = openssl_pkey_get_public( $filedata ); // recuperation de la cle publique
  92. } else // ou recuperation de la cle privee
  93. $key = openssl_pkey_get_private( array( $filedata, $pass ));
  94. return $key; // renvoi cle ( ou erreur )
  95. }
  96. function PbxVerSign( $sig, $retour , $keyfile ) { // verification signature Paybox
  97. $key = LoadKey( $keyfile ); // chargement de la cle
  98. if( !$key ){
  99. return -1; // si erreur chargement cle
  100. }
  101. $sig = base64_decode($sig);
  102. $openSsl=openssl_verify($retour, $sig, $key );
  103. return $openSsl; // verification : 1 si valide, 0 si invalide, -1 si erreur
  104. }
  105. function logTxt($log){
  106. $fp = fopen('log.txt','a+');
  107. fseek($fp,SEEK_END);
  108. fputs($fp,"##".date("h:i:s A")."##".$log."\r\n");
  109. fclose($fp);
  110. }
  111. ?>