index.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. /*
  3. * Фронтенд платежной системы LiqPay получающий ответы в виде POST XML
  4. * согласно протокола: https://docs.google.com/presentation/d/1hCmlmxnIurq1tpd3JJ-8VfntBoJ4ZdDJmMx_xiNmkhs/present?slide=id.p
  5. */
  6. //достаем конфиг
  7. $liqConf = parse_ini_file('config/liqpay.ini');
  8. // подключаем API OpenPayz
  9. include ("../../libs/api.openpayz.php");
  10. /**
  11. *
  12. * Check for POST have needed variables
  13. *
  14. * @param $params array of POST variables to check
  15. * @return bool
  16. *
  17. */
  18. function lq_CheckPost($params) {
  19. $result = true;
  20. if (!empty($params)) {
  21. foreach ($params as $eachparam) {
  22. if (isset($_POST[$eachparam])) {
  23. if (empty($_POST[$eachparam])) {
  24. $result = false;
  25. }
  26. } else {
  27. $result = false;
  28. }
  29. }
  30. }
  31. return ($result);
  32. }
  33. /*
  34. * Check is transaction unique?
  35. *
  36. * @param $hash - transaction hash
  37. *
  38. * @return bool
  39. */
  40. function lq_CheckTransaction($hash) {
  41. $hash = mysql_real_escape_string($hash);
  42. $query = "SELECT `id` from `op_transactions` WHERE `hash`='" . $hash . "'";
  43. $data = simple_query($query);
  44. if (!empty($data)) {
  45. return (false);
  46. } else {
  47. return (true);
  48. }
  49. }
  50. //пытаемся ловить объязательные параметры от LiqPay
  51. if (lq_CheckPost(array('operation_xml', 'signature'))) {
  52. $xml = $_POST['operation_xml'];
  53. $reqSig = $_POST['signature'];
  54. $xml_decoded = base64_decode($xml);
  55. if (!empty($xml_decoded)) {
  56. //разбираем на куски пойманный XML
  57. $xml_arr = xml2array($xml_decoded);
  58. if (isset($xml_arr['response'])) {
  59. $hash = $xml_arr['response']['order_id'];
  60. $customerid = $xml_arr['response']['description'];
  61. $summ = $xml_arr['response']['amount'];
  62. $status = $xml_arr['response']['status'];
  63. $paysys = 'LIQPAY';
  64. $note = 'some debug data here';
  65. if ($status == 'success') {
  66. if (lq_CheckTransaction($hash)) {
  67. $allcustomers = op_CustomersGetAll();
  68. if (isset($allcustomers[$customerid])) {
  69. //регистрируем новую транзакцию
  70. op_TransactionAdd($hash, $summ, $customerid, $paysys, $note);
  71. //вызываем обработчики необработанных транзакций
  72. op_ProcessHandlers();
  73. //тихонько помираем
  74. die('TRANSACTION_OK');
  75. } else {
  76. die('ERROR_NO_SUCH_USER');
  77. }
  78. }
  79. }
  80. } else {
  81. die('ERROR_INVALID_XML');
  82. }
  83. } else {
  84. die('ERROR_EMPTY_XML');
  85. }
  86. } else {
  87. die('ERROR_NO_POST_DATA');
  88. }
  89. ?>