paybox.lib.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. /* Copyright (C) 2008-2009 Laurent Destailleur <eldy@users.sourceforge.net>
  3. * Copyright (C) 2005-2007 Regis Houssin <regis.houssin@inodbox.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  17. */
  18. /**
  19. * \file htdocs/paybox/lib/paybox.lib.php
  20. * \ingroup paybox
  21. * \brief Library for common paybox functions
  22. */
  23. /**
  24. * Create a redirect form to paybox form
  25. *
  26. * @param int $PRICE Price
  27. * @param string $CURRENCY Currency
  28. * @param string $EMAIL EMail
  29. * @param string $urlok Url to go back if payment is OK
  30. * @param string $urlko Url to go back if payment is KO
  31. * @param string $TAG Full tag
  32. * @return int 1 if OK, -1 if ERROR
  33. */
  34. function print_paybox_redirect($PRICE, $CURRENCY, $EMAIL, $urlok, $urlko, $TAG)
  35. {
  36. global $conf, $langs, $db;
  37. dol_syslog("Paybox.lib::print_paybox_redirect", LOG_DEBUG);
  38. // Clean parameters
  39. $PBX_IDENTIFIANT = "2"; // Identifiant pour v2 test
  40. if (!empty($conf->global->PAYBOX_PBX_IDENTIFIANT)) {
  41. $PBX_IDENTIFIANT = $conf->global->PAYBOX_PBX_IDENTIFIANT;
  42. }
  43. $IBS_SITE = "1999888"; // Site test
  44. if (!empty($conf->global->PAYBOX_IBS_SITE)) {
  45. $IBS_SITE = $conf->global->PAYBOX_IBS_SITE;
  46. }
  47. $IBS_RANG = "99"; // Rang test
  48. if (!empty($conf->global->PAYBOX_IBS_RANG)) {
  49. $IBS_RANG = $conf->global->PAYBOX_IBS_RANG;
  50. }
  51. $IBS_DEVISE = "840"; // Currency (Dollar US by default)
  52. if ($CURRENCY == 'EUR') {
  53. $IBS_DEVISE = "978";
  54. }
  55. if ($CURRENCY == 'USD') {
  56. $IBS_DEVISE = "840";
  57. }
  58. $URLPAYBOX = "";
  59. if ($conf->global->PAYBOX_CGI_URL_V1) {
  60. $URLPAYBOX = $conf->global->PAYBOX_CGI_URL_V1;
  61. }
  62. if ($conf->global->PAYBOX_CGI_URL_V2) {
  63. $URLPAYBOX = $conf->global->PAYBOX_CGI_URL_V2;
  64. }
  65. if (empty($IBS_DEVISE)) {
  66. dol_print_error('', "Paybox setup param PAYBOX_IBS_DEVISE not defined");
  67. return -1;
  68. }
  69. if (empty($URLPAYBOX)) {
  70. dol_print_error('', "Paybox setup param PAYBOX_CGI_URL_V1 and PAYBOX_CGI_URL_V2 undefined");
  71. return -1;
  72. }
  73. if (empty($IBS_SITE)) {
  74. dol_print_error('', "Paybox setup param PAYBOX_IBS_SITE not defined");
  75. return -1;
  76. }
  77. if (empty($IBS_RANG)) {
  78. dol_print_error('', "Paybox setup param PAYBOX_IBS_RANG not defined");
  79. return -1;
  80. }
  81. $conf->global->PAYBOX_HASH = 'sha512';
  82. // Definition des parametres vente produit pour paybox
  83. $IBS_CMD = $TAG;
  84. $IBS_TOTAL = $PRICE * 100; // En centimes
  85. $IBS_MODE = 1; // Mode formulaire
  86. $IBS_PORTEUR = $EMAIL;
  87. $IBS_RETOUR = "montant:M;ref:R;auto:A;trans:T"; // Format des parametres du get de validation en reponse (url a definir sous paybox)
  88. $IBS_TXT = ' '; // Use a space
  89. $IBS_EFFECTUE = $urlok;
  90. $IBS_ANNULE = $urlko;
  91. $IBS_REFUSE = $urlko;
  92. $IBS_BKGD = "#FFFFFF";
  93. $IBS_WAIT = "2000";
  94. $IBS_LANG = "GBR"; // By default GBR=english (FRA, GBR, ESP, ITA et DEU...)
  95. if (preg_match('/^FR/i', $langs->defaultlang)) {
  96. $IBS_LANG = "FRA";
  97. }
  98. if (preg_match('/^ES/i', $langs->defaultlang)) {
  99. $IBS_LANG = "ESP";
  100. }
  101. if (preg_match('/^IT/i', $langs->defaultlang)) {
  102. $IBS_LANG = "ITA";
  103. }
  104. if (preg_match('/^DE/i', $langs->defaultlang)) {
  105. $IBS_LANG = "DEU";
  106. }
  107. if (preg_match('/^NL/i', $langs->defaultlang)) {
  108. $IBS_LANG = "NLD";
  109. }
  110. if (preg_match('/^SE/i', $langs->defaultlang)) {
  111. $IBS_LANG = "SWE";
  112. }
  113. $IBS_OUTPUT = 'E';
  114. $PBX_SOURCE = 'HTML';
  115. $PBX_TYPEPAIEMENT = 'CARTE';
  116. $PBX_HASH = $conf->global->PAYBOX_HASH;
  117. $PBX_TIME = dol_print_date(dol_now(), 'dayhourrfc', 'gmt');
  118. $msg = "PBX_IDENTIFIANT=".$PBX_IDENTIFIANT.
  119. "&PBX_MODE=".$IBS_MODE.
  120. "&PBX_SITE=".$IBS_SITE.
  121. "&PBX_RANG=".$IBS_RANG.
  122. "&PBX_TOTAL=".$IBS_TOTAL.
  123. "&PBX_DEVISE=".$IBS_DEVISE.
  124. "&PBX_CMD=".$IBS_CMD.
  125. "&PBX_PORTEUR=".$IBS_PORTEUR.
  126. "&PBX_RETOUR=".$IBS_RETOUR.
  127. "&PBX_EFFECTUE=".$IBS_EFFECTUE.
  128. "&PBX_ANNULE=".$IBS_ANNULE.
  129. "&PBX_REFUSE=".$IBS_REFUSE.
  130. "&PBX_TXT=".$IBS_TXT.
  131. "&PBX_BKGD=".$IBS_BKGD.
  132. "&PBX_WAIT=".$IBS_WAIT.
  133. "&PBX_LANGUE=".$IBS_LANG.
  134. "&PBX_OUTPUT=".$IBS_OUTPUT.
  135. "&PBX_SOURCE=".$PBX_SOURCE.
  136. "&PBX_TYPEPAIEMENT=".$PBX_TYPEPAIEMENT;
  137. "&PBX_HASH=".$PBX_HASH;
  138. "&PBX_TIME=".$PBX_TIME;
  139. $binKey = pack("H*", dol_decode($conf->global->PAYBOX_HMAC_KEY));
  140. $hmac = strtoupper(hash_hmac($PBX_HASH, $msg, $binKey));
  141. dol_syslog("Soumission Paybox", LOG_DEBUG);
  142. dol_syslog("IBS_MODE: $IBS_MODE", LOG_DEBUG);
  143. dol_syslog("IBS_SITE: $IBS_SITE", LOG_DEBUG);
  144. dol_syslog("IBS_RANG: $IBS_RANG", LOG_DEBUG);
  145. dol_syslog("IBS_TOTAL: $IBS_TOTAL", LOG_DEBUG);
  146. dol_syslog("IBS_DEVISE: $IBS_DEVISE", LOG_DEBUG);
  147. dol_syslog("IBS_CMD: $IBS_CMD", LOG_DEBUG);
  148. dol_syslog("IBS_PORTEUR: $IBS_PORTEUR", LOG_DEBUG);
  149. dol_syslog("IBS_RETOUR: $IBS_RETOUR", LOG_DEBUG);
  150. dol_syslog("IBS_EFFECTUE: $IBS_EFFECTUE", LOG_DEBUG);
  151. dol_syslog("IBS_ANNULE: $IBS_ANNULE", LOG_DEBUG);
  152. dol_syslog("IBS_REFUSE: $IBS_REFUSE", LOG_DEBUG);
  153. dol_syslog("IBS_BKGD: $IBS_BKGD", LOG_DEBUG);
  154. dol_syslog("IBS_WAIT: $IBS_WAIT", LOG_DEBUG);
  155. dol_syslog("IBS_LANG: $IBS_LANG", LOG_DEBUG);
  156. dol_syslog("IBS_OUTPUT: $IBS_OUTPUT", LOG_DEBUG);
  157. dol_syslog("PBX_IDENTIFIANT: $PBX_IDENTIFIANT", LOG_DEBUG);
  158. dol_syslog("PBX_SOURCE: $PBX_SOURCE", LOG_DEBUG);
  159. dol_syslog("PBX_TYPEPAIEMENT: $PBX_TYPEPAIEMENT", LOG_DEBUG);
  160. dol_syslog("PBX_HASH: $PBX_HASH", LOG_DEBUG);
  161. dol_syslog("PBX_TIME: $PBX_TIME", LOG_DEBUG);
  162. header("Content-type: text/html; charset=".$conf->file->character_set_client);
  163. header("X-Content-Type-Options: nosniff");
  164. print '<html>'."\n";
  165. print '<head>'."\n";
  166. print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$conf->file->character_set_client."\">\n";
  167. print '</head>'."\n";
  168. print '<body>'."\n";
  169. print "\n";
  170. // Formulaire pour module Paybox
  171. print '<form action="'.$URLPAYBOX.'" NAME="Submit" method="POST">'."\n";
  172. // For Paybox V2 (PBX_xxx)
  173. print '<!-- Param for Paybox v2 -->'."\n";
  174. print '<input type="hidden" name="PBX_IDENTIFIANT" value="'.$PBX_IDENTIFIANT.'">'."\n";
  175. print '<input type="hidden" name="PBX_MODE" value="'.$IBS_MODE.'">'."\n";
  176. print '<input type="hidden" name="PBX_SITE" value="'.$IBS_SITE.'">'."\n";
  177. print '<input type="hidden" name="PBX_RANG" value="'.$IBS_RANG.'">'."\n";
  178. print '<input type="hidden" name="PBX_TOTAL" value="'.$IBS_TOTAL.'">'."\n";
  179. print '<input type="hidden" name="PBX_DEVISE" value="'.$IBS_DEVISE.'">'."\n";
  180. print '<input type="hidden" name="PBX_CMD" value="'.$IBS_CMD.'">'."\n";
  181. print '<input type="hidden" name="PBX_PORTEUR" value="'.$IBS_PORTEUR.'">'."\n";
  182. print '<input type="hidden" name="PBX_RETOUR" value="'.$IBS_RETOUR.'">'."\n";
  183. print '<input type="hidden" name="PBX_EFFECTUE" value="'.$IBS_EFFECTUE.'">'."\n";
  184. print '<input type="hidden" name="PBX_ANNULE" value="'.$IBS_ANNULE.'">'."\n";
  185. print '<input type="hidden" name="PBX_REFUSE" value="'.$IBS_REFUSE.'">'."\n";
  186. print '<input type="hidden" name="PBX_TXT" value="'.$IBS_TXT.'">'."\n";
  187. print '<input type="hidden" name="PBX_BKGD" value="'.$IBS_BKGD.'">'."\n";
  188. print '<input type="hidden" name="PBX_WAIT" value="'.$IBS_WAIT.'">'."\n";
  189. print '<input type="hidden" name="PBX_LANGUE" value="'.$IBS_LANG.'">'."\n";
  190. print '<input type="hidden" name="PBX_OUTPUT" value="'.$IBS_OUTPUT.'">'."\n";
  191. print '<input type="hidden" name="PBX_SOURCE" value="'.$PBX_SOURCE.'">'."\n";
  192. print '<input type="hidden" name="PBX_TYPEPAIEMENT" value="'.$PBX_TYPEPAIEMENT.'">'."\n";
  193. print '<input type="hidden" name="PBX_HASH" value="'.$PBX_HASH.'">'."\n";
  194. print '<input type="hidden" name="PBX_TIME" value="'.$PBX_TIME.'">'."\n";
  195. // Footprint of parameters
  196. print '<input type="hidden" name="PBX_HMAC" value="'.$hmac.'">'."\n";
  197. print '</form>'."\n";
  198. print "\n";
  199. print '<script type="text/javascript">'."\n";
  200. print ' document.Submit.submit();'."\n";
  201. print '</script>'."\n";
  202. print "\n";
  203. print '</body></html>'."\n";
  204. print "\n";
  205. return;
  206. }