Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'

#
Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
При формировании заказа, после выбора платежной системы, вылазит такая ошибка. Как пофиксить?
Модератор
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
В разделе "SQL-запросы" выполните запрос:

ALTER TABLE `shop_order_table` ADD `shop_order_ip` VARCHAR( 15 ) NOT NULL DEFAULT '';
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
Спасибо, заработало, но теперь другая ошибка - при нажатии уже оплатить, получаем:
SetExpressCheckout API call failed.
Detailed Error Message: Security header is not valid
Short Error Message: Security error
Error Code: 10002
Error Severity Code: Error
Модератор
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
Это у Вас какая платежная система?
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
alexander.egorov писал(а):
Это у Вас какая платежная система?


PayPal
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'


SetExpressCheckout API call failed.
Detailed Error Message: Security header is not valid
Short Error Message: Security error
Error Code: 10002
Error Severity Code: Error
В корзине нет ни одного товара.

Для оформления заказа добавьте товар в корзину.


Что может быть не так?
Какой код типовой дин. страницы корзины нужно внести в  HostCMS v.6?

такой?:
// ------------------------------------------------
// Подготовка редиректа для PayPal
// ------------------------------------------------
if (isset($_POST['paymentType']))
{
   // Получаем ID заказа
   $order_id = intval(Core_Array::getRequest('orderId'));

   $oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);

   if (!is_null($oShop_Order->id))
   {
      // Вызов обработчика платежной системы
      Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System)
         ->shopOrder($oShop_Order)
         ->paymentProcessing();
   }
}


В Справочник платежных систем вносятся только
Цитата:

private $_Api_Username = "***свое**";
   private $_Api_Password = "***свое**";
   private $_Api_Signature = "***свое**";


или еще что? Где взять?

Вот весь код:

<?php
class Shop_Payment_System_Handler10 extends Shop_Payment_System_Handler
{
   private $_SandboxFlag = TRUE;
   private $_Api_Username = "***свое**";
   private $_Api_Password = "***свое**";
   private $_Api_Signature = "***свое**";
   private $_sBNCode = "PP-ECWizard";
   private $_Api_Endpoint = "";
   private $_Paypal_Url = "";
   private $_Subject = "monument.of.by@yandex.by";
   private $_Use_Proxy = FALSE;
   private $_Proxy_Host = "127.0.0.1";
   private $_Proxy_Port = "808";
   private $_Version = 56.0;
   private $_Ack_Success = "Success";
   private $_Ack_Success_With_Warning = "SuccessWithWarning";
   private $_Default_Currency_Id = 0;
   
   public function __construct(Shop_Payment_System_Model $oShop_Payment_System_Model)
   {
      parent::__construct($oShop_Payment_System_Model);
      $oCurrency = Core_Entity::factory('Shop_Currency')->getByCode('USD');
      !is_null($oCurrency) && $this->_Default_Currency_Id = $oCurrency->id;
      
      if ($this->_SandboxFlag == TRUE)
      {
         $this->_Api_Endpoint = "https://api-3t.sandbox.paypal.com/nvp";
         $this->_Paypal_Url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=";
      }
      else
      {
         $this->_Api_Endpoint = "https://api-3t.paypal.com/nvp";
         $this->_Paypal_Url = "https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=";
      }
   }
   
   /* Вызывается на 4-ом шаге оформления заказа*/
   public function execute()
   {
      parent::execute();

      $this->printNotification();

      return $this;
   }
   
   protected function _processOrder()
   {
      parent::_processOrder();

      // Установка XSL-шаблонов в соответствии с настройками в узле структуры
      $this->setXSLs();

      // Отправка писем клиенту и пользователю
      $this->send();

      return $this;
   }
   
   /* вычисление суммы товаров заказа */
   public function getSumWithCoeff()
   {
      return Shop_Controller::instance()->round(($this->_Default_Currency_Id > 0
            && $this->_shopOrder->shop_currency_id > 0
         ? Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency(
            $this->_shopOrder->Shop_Currency,
            Core_Entity::factory('Shop_Currency', $this->_Default_Currency_Id)
         )
         : 0) * $this->_shopOrder->getAmount() );
   }
   
   /* обработка ответа от платёжной системы */
   public function paymentProcessing()
   {
      /* Пришло подтверждение оплаты, обработаем его */
      if (!is_null(Core_Array::getRequest('PayPalOrderConfirmation')))
      {
         $this->ProcessResult();
         return TRUE;
      }
      
      /* Пришел запрос на редирект, обработаем его */
      if (!is_null(Core_Array::getRequest('paymentType')))
      {
         $this->ReviewOrder();
         return TRUE;
      }
      
      return TRUE;
   }
   
   /* оплачивает заказ */
   function ProcessResult()
   {
      if($this->_shopOrder->paid)
      {
         return FALSE;
      }
      
      ini_set('session.bug_compat_42',0);
      ini_set('session.bug_compat_warn',0);
      
      $token = urlencode(Core_Array::getRequest('token', ''));
      $paymentType = urlencode(Core_Array::getRequest('paymentType', ''));
      $currCodeType = urlencode(Core_Array::getRequest('currencyCodeType', ''));
      $payerID = urlencode(Core_Array::getRequest('PayerID', ''));
      $serverName = urlencode(Core_Array::get($_SERVER, 'SERVER_NAME', ''));
      $paymentAmount = urlencode(Core_Array::get($_SESSION, 'TotalAmount', ''));
      
      $nvpstr = sprintf("&TOKEN=%s&PAYERID=%s&PAYMENTREQUEST_0_PAYMENTACTION=%s&PAYMENTREQUEST_0_AMT=%s&PAYMENTREQUEST_0_CURRENCYCODE=%s&IPADDRESS=%s", $token, $payerID, $paymentType, $paymentAmount, $currCodeType, $serverName);
      
      if($this->_Version < 63)
      {
         $nvpstr .= sprintf("&PAYMENTACTION=%s&AMT=%s", $paymentType, $paymentAmount);
      }
      
      $resArray = $this->hash_call("DoExpressCheckoutPayment", $nvpstr);
      
      $ack = strtoupper($resArray["ACK"]);
      
      if( $ack == "SUCCESS" || $ack == "SUCCESSWITHWARNING" )
      {
         $this->_shopOrder->system_information = sprintf("Товар оплачен через PayPal.\nАтрибуты:\nTransaction ID: %sAmount: %s %s", $resArray['TRANSACTIONID'], $resArray['AMT'], $currCodeType);
         
         $this->_shopOrder->paid();
         $this->setXSLs();
         $this->send();
      }
   }
   
   /* печатает форму отправки запроса на сайт платёжной системы */
   public function getNotification()
   {
      $oSite_Alias = $this->_shopOrder->Shop->Site->getCurrentAlias();
      $site_alias = !is_null($oSite_Alias) ? $oSite_Alias->name : '';
      $shop_path = $this->_shopOrder->Shop->Structure->getPath();
      $handler_url = 'http://'.$site_alias.$shop_path.'cart/';
      
      $default_sum = $this->getSumWithCoeff();
      
      ?>
      <h1>Оплата через систему PayPal</h1>

      <!-- Форма для оплаты через WMR -->
      <form id="pay" name="pay" method="post" action="<?php echo $handler_url?>">
         <input type="hidden" name="paymentType" value="Sale">
         <input type="hidden" name="L_NAME0"   value="Order N <?php echo $this->_shopOrder->invoice?>">
         <input type="hidden" name="L_AMT0" value="<?php echo $default_sum?>" />
         <input type="hidden" name="L_QTY0" value="1" />
         <table>
         <tr>
         <td class="field"><strong><?php echo $default_sum?></strong></td>
         <td><select name="currencyCodeType">
         <option value="USD">USD</option>
         </select></td>
         </tr>
         <tr>
         <td colspan="2" align="center"><input type="image" name="submit"
         src="https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif" /></td>
         </tr>
         <tr>
         <td colspan="2" align="center"><small>Save time. Pay securely without
         sharing your financial information.</small></td>
         </tr>
         </table>

         <!-- Для определения платежной системы на странице корзины --> <input
         type="hidden" name="order_id" value="<?php echo $this->_shopOrder->id?>">

         <div style="clear: both;"></div>
      </form>

      <?php
   }
   
   public function getInvoice()
   {
      return $this->getNotification();
   }
   
   
   /**
    * Обработка формы для получения ссылки и редирект
    */
   function ReviewOrder()
   {
      if($this->_shopOrder->paid)
      {
         return FALSE;
      }
      
      if(is_null(Core_Array::getRequest('token')))
      {
         $currencyCodeType = Core_Array::getRequest('currencyCodeType', '');
         $paymentType = Core_Array::getRequest('paymentType', '');
         
         $oSite_Alias = $this->_shopOrder->Shop->Site->getCurrentAlias();
         $site_alias = !is_null($oSite_Alias) ? $oSite_Alias->name : '';
         $shop_path = $this->_shopOrder->Shop->Structure->getPath();
         $handler_url = 'http://'.$site_alias.$shop_path.'cart/';
         
         $returnURL = urlencode(sprintf("%s?currencyCodeType=%s&paymentType=%s&order_id=%s&payment=success&PayPalOrderConfirmation=1", $handler_url, $currencyCodeType, $paymentType, $this->_shopOrder->id));
         $cancelURL = urlencode(sprintf("%s?paymentType=%s&order_id=%s&payment=failed", $handler_url, $paymentType, $this->_shopOrder->id));
         
         $paymentAmount = $this->getSumWithCoeff();
         
         $nvpstr = sprintf("&PAYMENTREQUEST_0_AMT=%s&PAYMENTREQUEST_0_PAYMENTACTION=%s&RETURNURL=%s&CANCELURL=%s&PAYMENTREQUEST_0_CURRENCYCODE=%s", $paymentAmount, $paymentType, $returnURL, $cancelURL, $currencyCodeType);
         
         if($this->_Version < 63)
         {
            $nvpstr = sprintf("%s&AMT=%s", $nvpstr, $paymentAmount);
         }
         
         $_SESSION["currencyCodeType"] = $currencyCodeType;     
         $_SESSION["PaymentType"] = $paymentType;
         $_SESSION['TotalAmount'] = $paymentAmount;
         
         $resArray = $this->hash_call("SetExpressCheckout", $nvpstr);
         $ack = strtoupper(Core_Array::get($resArray, 'ACK', ''));
   
         if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
         {
            // Redirect to paypal.com here
            $token = urldecode(Core_Array::get($resArray, 'TOKEN', ''));
            $payPalURL = $this->_Paypal_Url . $token;
            
            ?>
            <script language="JavaScript" type="text/javascript">
            location="<?php echo $payPalURL?>";
            </script>
            <?php
            exit();
         }
         else
         {
            //Display a user friendly Error on the page using any of the following error information returned by PayPal
            $ErrorCode = urldecode(Core_Array::get($resArray, 'L_ERRORCODE0', ''));
            $ErrorShortMsg = urldecode(Core_Array::get($resArray, 'L_SHORTMESSAGE0', ''));
            $ErrorLongMsg = urldecode(Core_Array::get($resArray, 'L_LONGMESSAGE0', ''));
            $ErrorSeverityCode = urldecode(Core_Array::get($resArray, 'L_SEVERITYCODE0', ''));

            echo "<p><b>SetExpressCheckout API call failed.</b></p>";
            echo "Detailed Error Message: " . $ErrorLongMsg;
            echo "<br />Short Error Message: " . $ErrorShortMsg;
            echo "<br />Error Code: " . $ErrorCode;
            echo "<br />Error Severity Code: " . $ErrorSeverityCode;
         }
      }
   }
   
   /**
     '-------------------------------------------------------------------------------------------------------------------------------------------
     * hash_call: Function to perform the API call to PayPal using API signature
     * @methodName is name of API  method.
     * @nvpStr is nvp string.
     * returns an associtive array containing the response from the server.
     '-------------------------------------------------------------------------------------------------------------------------------------------
   */
   function hash_call($methodName,$nvpStr)
   {
      //setting the curl parameters.
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $this->_Api_Endpoint);
      curl_setopt($ch, CURLOPT_VERBOSE, 1);

      //turning off the server and peer verification(TrustManager Concept).
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
      curl_setopt($ch, CURLOPT_POST, 1);
      
       //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled.
      //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php
      if($this->_Use_Proxy)
         curl_setopt ($ch, CURLOPT_PROXY, $this->_Proxy_Host. ":" . $this->_Proxy_Port);

      //NVPRequest for submitting to server
      $nvpreq="METHOD=" . urlencode($methodName) . "&VERSION=" . urlencode($this->_Version) . "&PWD=" . urlencode($this->_Api_Password) . "&USER=" . urlencode($this->_Api_Username) . "&SIGNATURE=" . urlencode($this->_Api_Signature) . $nvpStr . "&BUTTONSOURCE=" . urlencode($this->_sBNCode);

      //setting the nvpreq as POST FIELD to curl
      curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);

      //getting response from server
      $response = curl_exec($ch);

      //convrting NVPResponse to an Associative Array
      $nvpResArray = $this->deformatNVP($response);
      $nvpReqArray = $this->deformatNVP($nvpreq);
      $_SESSION['nvpReqArray']=$nvpReqArray;

      if (curl_errno($ch))
      {
         // moving to display page to display curl errors
           $_SESSION['curl_error_no']=curl_errno($ch) ;
           $_SESSION['curl_error_msg']=curl_error($ch);
      }
      else
      {
          //closing the curl
           curl_close($ch);
      }

      return $nvpResArray;
   }

   /** This function will take NVPString and convert it to an Associative Array and it will decode the response.
    * It is usefull to search for a particular key and displaying arrays.
    * @nvpstr is NVPString.
    * @nvpArray is Associative Array.
    */
   function deformatNVP($nvpstr)
   {
      $intial=0;
       $nvpArray = array();

      while(strlen($nvpstr))
      {
         //postion of Key
         $keypos= strpos($nvpstr,'=');
         //position of value
         $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr);

         /*getting the Key and Value values and storing in a Associative Array*/
         $keyval=substr($nvpstr,$intial,$keypos);
         $valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1);
         //decoding the respose
         $nvpArray[urldecode($keyval)] =urldecode( $valval);
         $nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr));
        }
      return $nvpArray;
   }
}


Спасибо.
Модератор
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
Если редакция коммерческая, то напишите в поддержку.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
Пока не коммерческая, просто есть коды для 5-й версии http://www.hostcms.ru/forums/22/3617/ а в 6-й по иному типовая страница сделана, и вот как ее сделать правильно ?
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
Все кажись разобрался, всего то напросто
private $_SandboxFlag = TRUE;
заменить на
FALSE
  чтобы не переходило куда не надо.
#
Re: Ошибка выполнения запроса! - Unknown column 'shop_order_ip' in 'field list'
Модератор плиз порежь лишнее в моих постах тут и удалите эту http://www.hostcms.ru/forums/22/3617/page-1/
спасибо.
Авторизация