Оплата комиссии в Робокассе за счет магазина

настройка instantshop и биллинга

#1 7 ноября 2014 в 14:24
Помогите разобраться с оплатой комиссии за свой счёт? В компоненте этого вовсе не предусмотрено.

Я на шел кусок как это делается, но что то не работает (


Для этих целей создан специальный XML-интерфейс:
Метод расчёта суммы к получению магазином — CalcOutSumm
Описание метода: Позволяет расчитать сумму к получению, исходя из текущих курсов ROBOKASSA, по сумме, которую заплатит пользователь.
Параметры метода: MerchantLogin — идентификатор магазина (строка), IncCurrLabel — метка валюты (строка), для которой нужно произвести расчёт суммы, IncSum — сумма, которую должен заплатить пользователь.
Формат запроса: merchant.roboxchange.com/WebService/Service.asmx/CalcOutSumm?MerchantLogin=string&IncCurrLabel=string&IncSum=string

  1.  
  2. if( $this->config->get('robokassa_commission') == 'shop' && !$this->config->get('robokassa_test_mode') )
  3. {
  4. $url = 'http://merchant.roboxchange.com/WebService/Service.asmx/CalcOutSumm?MerchantLogin='.$mrh_login.
  5. '&IncCurrLabel='.$this->data['in_curr'].'&IncSum='.$out_summ;
  6.  
  7. #echo $url;
  8.  
  9. if( extension_loaded('curl') )
  10. {
  11. $c = curl_init($url);
  12. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  13. $page = curl_exec($c);
  14. }
  15. else
  16. {
  17. $page = file_get_contents($url);
  18. }
  19.  
  20. $ar = array();
  21. //<OutSum>93.200000</OutSum>
  22.  
  23. if( $page && preg_match("/<OutSum>([\d\.]+)<\/OutSum>/", $page, $ar) )
  24. {
  25. if( !empty($ar[1]) )
  26. {
  27. $out_summ = $ar[1];
  28. }
  29. }
  30. }
  31.  

Как бы это всё воткнуть в InstantShop

components/shop/payments/robokassa/robokassa.php
попробовал так (( не выходит.


  1.  
  2. <?php
  3.  
  4. class ps_robokassa extends shopPaymentSystem{
  5.  
  6. /* ========================================================================== */
  7. /* ========================================================================== */
  8.  
  9. /**
  10.   * Получает всю информацию о заказе в массиве $order
  11.   * и сохраняет внутри класса
  12.   * @param array $order
  13.   */
  14. public function __construct($order, $config){
  15.  
  16. parent::__construct();
  17.  
  18. $this->order = $order;
  19. $this->config = $config;
  20.  
  21. }
  22.  
  23. /* ========================================================================== */
  24. /* ========================================================================== */
  25.  
  26. /**
  27.   * Генерирует и возвращает код формы для отправки в платежную систему
  28.   */
  29. public function getHtmlForm($order, $currency){
  30.  
  31. global $_LANG;
  32.  
  33. $currency_kurs = $this->config['currency'][$currency];
  34. $this->order['summ'] = round($this->order['summ']/$currency_kurs, 2);
  35.  
  36. $signature = $this->config['sMerchantLogin']['value'] . ':' .
  37. $this->order['summ'] . ':' .
  38. $this->order['id'] . ':' .
  39. $this->config['sMerchantPass1']['value'];
  40.  
  41. $this->order['secret_key'] = md5($signature);
  42.  
  43.  
  44. include('form.php');
  45.  
  46. return ob_get_clean();
  47.  
  48. }
  49.  
  50. /* ========================================================================== */
  51. /* ========================================================================== */
  52.  
  53. private function preRequest($model) {
  54.  
  55. $inCore = cmsCore::getInstance();
  56.  
  57. $out_summ = $inCore->request('OutSum', 'str');
  58. $out_id = $inCore->request('InvId', 'int');
  59. $out_signature = $inCore->request('SignatureValue', 'str');
  60. $url = 'http://merchant.roboxchange.com/WebService/Service.asmx/CalcOutSumm?MerchantLogin='.$this->config['sMerchantLogin']['value'] . ':' .
  61. '&IncCurrLabel='.$currency_kurs.'&IncSum='.$out_summ;
  62.  
  63. #echo $url;
  64.  
  65. if( extension_loaded('curl') )
  66. {
  67. $c = curl_init($url);
  68. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  69. $page = curl_exec($c);
  70. }
  71. else
  72. {
  73. $page = file_get_contents($url);
  74. }
  75.  
  76. $ar = array();
  77. //<OutSum>93.200000</OutSum>
  78.  
  79. if( $page && preg_match("/<OutSum>([\d\.]+)<\/OutSum>/", $page, $ar) )
  80. {
  81. if( !empty($ar[1]) )
  82. {
  83. $out_summ = $ar[1];
  84. }
  85. }
  86. // Проверяем, не произошла ли подмена суммы
  87. $currency_kurs = $this->config['currency']['RUR'];
  88. $currency_price = ($currency_kurs > 1 ? round($this->order['summ']/$currency_kurs, 2) : round($this->order['summ']*$currency_kurs, 2));
  89.  
  90. if ($currency_price != $out_summ) { return "ERR1: НЕВЕРНАЯ СУММА ЗАКАЗА"; }
  91.  
  92. // Проверяем, не произошла ли подмена номера заказа
  93. if ($this->order['id'] != $out_id) { return "ERR2: НЕВЕРНЫЙ НОМЕР ЗАКАЗА"; }
  94.  
  95. // Проверяем сигнатуру
  96. $signature = $out_summ . ':' .
  97. $this->order['id'] . ':' .
  98. $this->config['sMerchantPass2']['value'];
  99.  
  100. if(strtoupper(md5($signature)) != $out_signature){ return "ERR3: КОНТРОЛЬНЫЕ СУММЫ НЕ СОВПАЛИ"; }
  101.  
  102. // Фиксируем оплату заказа
  103. $model->setOrderStatus($this->order['id'], $this->order['secret_key'], 2);
  104.  
  105. // Очищаем корзину
  106. $model->clearCart($client_sess_id);
  107.  
  108. return "OK{$out_id}";
  109.  
  110. }
  111.  
  112. /* ========================================================================== */
  113. /* ========================================================================== */
  114.  
  115. public function processPayment($model) {
  116.  
  117. return iconv('cp1251', 'utf-8', $this->preRequest($model));
  118.  
  119. }
  120.  
  121. /* ========================================================================== */
  122. /* ========================================================================== */
  123.  
  124. }
  125.  
  126. ?>
  127.  
  128.  
#2 5 сентября 2019 в 17:16
Почти 5 лет прошло, а ответа все нет. В моем случае стало актуально для компонента «Биллинг».
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.