Waterticket / rx-module-hotopay

라이믹스용 결제모듈 hotopay 입니다
https://hotopaydocs.potatosoft.kr
GNU General Public License v2.0
17 stars 3 forks source link

상품 상세보기 클릭시 발생하는 오류(새로고침시 정상동작함) #43

Open eondcom opened 2 months ago

eondcom commented 2 months ago

TypeError #0 "HotopayModel::getProductByDocumentSrl(): Return value must be of type object, null returned" in modules/hotopay/hotopay.model.php on line 471 modules/hotopay/hotopay.model.php:471

상품등록시 게시물번호를 입력후에 해당 게시물을 클릭하면 저런 오류가 발생합니다. 다시 새로고침할 경우 정상 동작합니다. (게시물 클릭시마다 이 과정이 매번 동일하게 발생합니다.)

eondcom commented 2 months ago

오류 나는 부분...

 public static function getProduct(int $product_srl)
    {
        $cache_key = 'hotopay:product:' . $product_srl;
        $product = Rhymix\Framework\Cache::get($cache_key);
        if(!$product->product_srl) {
            $args = new stdClass();
            $args->product_srl = $product_srl;
            $output = executeQuery('hotopay.getProducts', $args);

            if(!$output->toBool() || empty($output->data))
            {
                return new \BaseObject(-1, "Product does not exist.");
            }

            $output->data->extra_vars = unserialize($output->data->extra_vars);
            $product = $output->data;
        }

        $product->product_option = self::getProductOptions($product_srl);

        Rhymix\Framework\Cache::set($cache_key, $output->data);
        return $output->data;
    }

아래 코드로 수정함

    public static function getProduct(int $product_srl): object
    {
        $cache_key = 'hotopay:product:' . $product_srl;
        $product = Rhymix\Framework\Cache::get($cache_key);

        if (!$product || !$product->product_srl) {
            $args = new stdClass();
            $args->product_srl = $product_srl;
            $output = executeQuery('hotopay.getProducts', $args);

            if (!$output->toBool() || empty($output->data)) {
                // 예외를 던져 일관된 오류 처리
                throw new \Exception("Product does not exist.");
            }

            $output->data->extra_vars = unserialize($output->data->extra_vars);
            $product = $output->data;
        }

        $product->product_option = self::getProductOptions($product_srl);

        Rhymix\Framework\Cache::set($cache_key, $product);

        return $product;
    }

이렇게 처리해주니 해당 문제는 없어졌습니다.