2013-12-10 59 views
0

當我們在opencart中有很多產品選項時,它會導致通過paypal express傳遞的描述長度超過127個字符。因此,當我們返回購物車以確認訂單時,我們收到錯誤18112 - 「描述參數的值已被截斷」。Opencart PayPal Express Error 18112

Paypal說:「如果您的購物車的描述值超過了允許的限制,則返回此警告錯誤消息。對於PAYMENTREQUEST_0_DESC,字符長度限制爲127個字符;因此,如果您的購物車傳遞的值大於此限制,則會返回此錯誤。「

我需要幫助瞭解如何截斷paypal express接收的描述,使其不超過126個字符。

以下是處理選項說明的代碼部分。任何人都可以幫我弄清楚如何將發送給PayPal的描述截斷爲126個字符?

foreach ($this->cart->getProducts() as $item) { 
     $data['L_PAYMENTREQUEST_0_DESC' . $i] = ''; 

     $option_count = 0; 
     foreach ($item['option'] as $option) { 
      if ($option['type'] != 'file') { 
       $value = $option['option_value']; 
      } else { 
       $filename = $this->encryption->decrypt($option['option_value']); 
       $value = utf8_substr($filename, 0, utf8_strrpos($filename, '.')); 
      } 

      $data['L_PAYMENTREQUEST_0_DESC' . $i] .= ($option_count > 0 ? ', ' : '') . $option['name'] . ':' . (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value); 

      $option_count++; 
     } 

回答

1

要做到這一點,最簡單的方法是用substr。我很驚訝,你沒有想到它,因爲你使用utf8_substr,似乎做同樣的事情。

$descr = ($option_count > 0 ? ', ' : '') . $option['name'] . ':' . (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value); 
$descr = substr($descr, 0, 126); 
$data['L_PAYMENTREQUEST_0_DESC' . $i] = $descr; 
+0

我知道我必須使用substr,但我不知道在哪裏/如何使用它。此代碼來自opencart附帶的默認paypal express模塊​​。而且我已經覺得自己像個白癡,但是你給我的代碼去哪了?取代另一部分? –

+0

從'$ data'''L_PAYMENTREQUEST_0_DESC''開始替換'foreach'中的行。 $ i]'與上面的塊並應該工作 – Machavity

+0

非常感謝你的幫助!這是我作爲志願者創建的非營利網站。我非常感謝你的幫助和快速回復! –