2013-12-10 3 views
0

opencart에서 많은 제품 옵션을 사용하게되면 paypal express로 전달 된 설명이 127자를 넘게됩니다. 이 때문에 주문을 확인하기 위해 장바구니에 다시 들어 오면 오류 18112가 발생합니다. "설명 매개 변수의 값이 잘 렸습니다."Opencart PayPal Express 오류 18112

Paypal은 "장바구니가 허용 된 한도를 초과하는 설명 값을 전달하는 경우이 경고 오류 메시지가 반환됩니다 .PAYMENTREQUEST_0_DESC의 경우 문자 길이 제한은 127 자이므로 카트가 이 제한보다 큰 경우이 오류가 반환됩니다. "

나는 paypal express가받는 설명을 자르는 방법을 알아내어 126 자 이하가되도록 도움을 필요로합니다.

다음은 옵션 설명을 처리하는 코드 섹션입니다. 누구나 내게 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와 함께 제공되는 기본 페이팔 익스프레스 모듈의 코드입니다. 그리고 나는 이미 바보 같이 느껴지지만, 당신이 준 코드는 어디에 있습니까? 다른 섹션 대신에? –

+0

'$ data [ 'L_PAYMENTREQUEST_0_DESC']를 시작하는'foreach'에서 줄 바꾸기. $ i]'위의 블록을 사용하면 작동합니다. – Machavity

+0

도움을 주셔서 대단히 감사합니다! 이것은 내가 자원 봉사자로 만드는 비영리 사이트 용입니다. 귀하의 도움과 빠른 답변에 정말 감사드립니다! –