워드프레스 우커머스 결제 페이지에서 치명적인 오류, 500 에러 문제 해결

워드프레스 정보를 제공하는 블로그 Avada 2024. 3. 23. 00:01 • 댓글:

워드프레스에서는 우커머스(WooCommerce) 플러그인을 설치하여 쇼핑몰을 운영할 수 있습니다. 우커머스를 사용하면 국내 PG와 연동하여 결제를 받을 수 있습니다. 간혹 우커머스 쇼핑몰에 국내 PG를 연동하여 결제를 받을 때 오류가 발생하는 경우가 있을 수 있습니다. 최근 LMS 사이트에서 결제 단계에서 500 서버 오류가 발생하는 문제의 해결을 맡았습니다.

워드프레스 우커머스 결제 페이지에서 치명적인 오류, 500 에러  문제 해결

우커머스 결제 게이트웨이(PG)와 관련하여 오류가 발생하면 해결하기가 쉽지 않습니다. 직접 결제를 시도하면서 오류가 발생할 경우 오류 로그를 확인하여 문제의 원인을 파악해야 하는데, 우커머스 쇼핑몰 사이트에 많은 플러그인을 설치할 경우 원인을 파악하는 것이 쉽지 않을 수 있습니다.

문제의 사이트는 Gostudy라는 LMS(학습 관리 시스템) 테마와 LearnDash LMS 플러그인으로 제작된 인강 사이트였습니다.

워드프레스 우커머스 결제 페이지에서 치명적인 오류, 500 에러 문제 해결

LMS 사이트의 경우 Eduma라는 테마가 많이 사용됩니다. 

Gostudy 테마는 인기 있는 LMS 테마는 아니지만 엘리멘터 페이지 빌더가 사용되며, Tutor LMS 데모, LearnPress LMS 데모, LearnDash LMS 데모가 포함되어 있습니다. 

워드프레스 Gostudy 테마 데모

Gostudy 테마는 많은 판매가 이루어지지 않았지만 가격이 저렴한 편이고 현재 24달러에 할인 판매되고 있네요.

워드프레스 Gostudy 테마

LMS 사이트 구축 시 LearnDash 플러그인과 Divi 테마 또는 Kadence 테마를 조합하여 사용하는 것을 고려할 수 있습니다. LearnDash와 Kadence 테마는 동일 업체에서 개발하므로 호환성면에서 다른 테마를 사용하는 것보다 더 좋을 수 있을 것입니다.

클라이언트로부터 결제 단계에서 "이 웹사이트 치명적인 오류가 있습니다" 오류가 발생하는 문제 해결을 요청받았습니다.

결제 마지막 단계에서 오류가 납니다.
'이 웹사이트에 치명적인 오류가 있습니다' 라는 문구가 뜨네요.

무통장 입금 방식으로 테스트를 해보니 500 서버 내부 오류가 발생하였습니다. 카드 결제 시에는 결제는 된 것 같지만, 치명적 오류 문구가 뜨면서 우커머스 주문 목록에는 표시되지 않는 문제가 발생했습니다.

카드결제 - 결제 진행 후, 카드사로부터 결제 문자가 온걸 보니 결제는 진행이 된건데 관리자 페이지에서 매출이 뜨거나 우커머스 주문 항목에서 보이지 않습니다. 결제 마지막 단계에서 치명적 오류 문구가 역시 뜨는데 카드 결제는 된 상황입니다. 주문 항목에 뜨지 않으니 테스트 결제 취소를 할 수가 없습니다.

이런 문제를 해결하기 위해서는 오류 로그를 확인하여 문제를 일으키는 원인을 파악해야 합니다. FTP에 접속하여 wp-config.php 파일에서 다음 라인을 찾도록 합니다.

define( 'WP_DEBUG', false );

위의 라인에서 falsetrue로 변경하면 오류 발생 시 오류 메시지가 출력됩니다. 문제의 사이트에서는 결제를 시도할 때 다음과 같은 오류를 내뿜고 있었습니다.

[21-Mar-2024 04:11:26] PHP Warning:  Undefined array key "tabs_tab_align_tablet" in /www/wp-content/plugins/gostudy-core/includes/elementor/widgets/rt-tabs.php on line 780
[21-Mar-2024 04:11:26] PHP Warning:  Undefined array key "tabs_tab_align_mobile" in /www/wp-content/plugins/gostudy-core/includes/elementor/widgets/rt-tabs.php on line 781
[21-Mar-2024 04:11:26] PHP Warning:  Undefined array key "tabs_icon_position_tablet" in /www/wp-content/plugins/gostudy-core/includes/elementor/widgets/rt-tabs.php on line 783
[21-Mar-2024 04:11:26] PHP Warning:  Undefined array key "tabs_icon_position_mobile" in /www/wp-content/plugins/gostudy-core/includes/elementor/widgets/rt-tabs.php on line 784
[21-Mar-2024 04:12:27] PHP Fatal error:  Uncaught TypeError: array_merge(): Argument #2 must be of type array, WP_Error given in /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-order-status-controller.php:47
Stack trace:
#0 /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-order-status-controller.php(47): array_merge(Array, Object(WP_Error))
#1 /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-order-status-controller.php(127): PAFW_Order_Status_Controller::get_matched_rules_by_product_ids(Array)
#2 /www/wp-content/plugins/pgall-for-woocommerce/includes/pafw-functions.php(64): PAFW_Order_Status_Controller::get_order_status('completed', 28007, Object(Automattic\WooCommerce\Admin\Overrides\Order))
#3 /www/wp-includes/class-wp-hook.php(324): pafw_woocommerce_payment_complete_order_status('completed', 28007, Object(Automattic\WooCommerce\Admin\Overrides\Order))
#4 /www/wp-includes/plugin.php(205): WP_Hook->apply_filters('processing', Array)
#5 /www/wp-content/plugins/woocommerce/includes/class-wc-order.php(323): apply_filters('woocommerce_pay...', 'processing', 28007, Object(Automattic\WooCommerce\Admin\Overrides\Order))
#6 /www/wp-content/plugins/woocommerce/includes/class-wc-order.php(300): WC_Order->maybe_set_date_paid()
#7 /www/wp-content/plugins/woocommerce/includes/class-wc-order.php(364): WC_Order->set_status('on-hold', '', false)
#8 /www/wp-content/plugins/pgall-for-woocommerce/includes/gateways/inicis/class-wc-gateway-inicis-stdvbank.php(121): WC_Order->update_status('on-hold')
#9 /www/wp-includes/class-wp-hook.php(324): WC_Gateway_Inicis_StdVbank->process_approval_response(Object(Automattic\WooCommerce\Admin\Overrides\Order), Array)
#10 /www/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters('', Array)
#11 /www/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#12 /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-gateway.php(55): do_action('pafw_approval_r...', Object(Automattic\WooCommerce\Admin\Overrides\Order), Array)
#13 /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-gateway.php(242): PAFW_Gateway::call('approval', Array, Object(Automattic\WooCommerce\Admin\Overrides\Order), Object(WC_Gateway_Inicis_StdVbank))
#14 /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-gateway.php(258): PAFW_Gateway::process_approval(Object(WC_Gateway_Inicis_StdVbank), Object(Automattic\WooCommerce\Admin\Overrides\Order), 'approval')
#15 /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-payment-gateway.php(334): PAFW_Gateway::request_approval(Object(WC_Gateway_Inicis_StdVbank), Object(Automattic\WooCommerce\Admin\Overrides\Order))
#16 /www/wp-includes/class-wp-hook.php(324): PAFW_Payment_Gateway->wc_api_request_payment('')
#17 /www/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters('', Array)
#18 /www/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#19 /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-payment-gateway.php(376): do_action('pafw_inicis_std...')
#20 /www/wp-includes/class-wp-hook.php(324): PAFW_Payment_Gateway->process_payment_response('')
#21 /www/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters('', Array)
#22 /www/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#23 /www/wp-content/plugins/woocommerce/includes/class-wc-api.php(161): do_action('woocommerce_api...')
#24 /www/wp-includes/class-wp-hook.php(324): WC_API->handle_api_requests(Object(WP))
#25 /www/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array)
#26 /www/wp-includes/plugin.php(565): WP_Hook->do_action(Array)
#27 /www/wp-includes/class-wp.php(418): do_action_ref_array('parse_request', Array)
#28 /www/wp-includes/class-wp.php(813): WP->parse_request('')
#29 /www/wp-includes/functions.php(1336): WP->main('')
#30 /www/wp-blog-header.php(16): wp()
#31 /www/index.php(17): require('/www/wp-b...')
#32 {main}
  thrown in /www/wp-content/plugins/pgall-for-woocommerce/includes/class-pafw-order-status-controller.php on line 47

결론적으로는 코드엠샵(CodeMShop)의 워드프레스 결제 심플페이 – 우커머스 결제 플러그인에서 치명적인 오류가 발생했습니다.

이런 경우 문제를 일으키는 파일을 열어서 해당 라인을 체크하여 코드를 수정하여 문제 해결을 시도할 수 있을 것입니다. 

만약 문제를 일으키는 플러그인이 필수 플러그인이 아니라면 해당 플러그인을 사용하지 않는 것을 고려할 수 있지만, PG-ALL 워드프레스 결제 플러그인은 국내 PG 결제를 처리하기 위해 필요한 플러그인이기 때문에 삭제하는 것은 불가능합니다.

이 문제가 다수의 워드프레스 사이트에서 발생하고 있다면 코드엠샵에 보고하여 해결을 요청하는 것도 고려해 볼 수 있을 것입니다.

몇 개월 전, 코스모스팜 페이 for KBoard 플러그인에서 비슷한 증상의 문제를 접한 적이 있었습니다. 당시에는 정확한 원인을 파악하지 못해 문제를 해결하지 못했지만, 이번 건은 다행히 문제를 파악하여 해결할 수 있었습니다.

챗GPT에서 오류 로그를 입력하여 해결 절차를 문의해 보는 것도 가능합니다. 하지만 챗GPT에서는 일반적인 상황에서 해결하는 방법을 알려주기 때문에 해결 방법을 적용하는 데 어려움이 있을 수도 있습니다.

The fatal error mentioned in your log is related to an issue with handling WP_Error objects in the array_merge() function. The specific part of the code where this happens is not directly visible in the snippet you provided. However, based on the error log and the common patterns of issues related to array_merge(), I can suggest a general approach to handling similar situations.

이런 문제가 발생하는 경우...

  1. wp-config.php에서 디버그 모드를 활성화하고
  2. 오류 상황에서 생성되는 오류 로그를 확인하여 문제의 원인을 파악합니다.
  3. 챗GPT에 오류 로그를 입력하여 해결 절차에 대하여 문의해 볼 수 있습니다. 직접 해결해주지 않더라도 문제 해결에 도움이 되는 통찰력을 얻을 수도 있을 것입니다.

워드프레스와 관련된 오류를 해결하는 데 어려움을 겪는 경우 여기에서 서비스(유료)를 의뢰하실 수 있습니다.

참고

https://avada.tistory.com/2897

 

엘리멘터 무료 버전 vs. 프로 버전 비교

엘리멘터(Elmentor)는 500만 개가 넘는 사이트에 설치되어 사용되고 있는 인기 워드프레스 페이지 빌더 플러그인입니다. 엘리멘터는 무료 버전과 프로 버전으로 제공됩니다. Elementor 프로 버전에서

avada.tistory.com

https://avada.tistory.com/2335

 

워드프레스 GeneratePress 테마 라이선스 (+요금제)

워드프레스에는 정말 많은 테마가 있습니다. 테마 라이선스는 테마마다 조금씩 다릅니다. 아바다, 엔폴드, 뉴스페이퍼 등 테마포레스트 테마의 경우 동일한 라이선스가 적용됩니다(참고). Generat

avada.tistory.com

https://avada.tistory.com/3046

 

해외웹호스팅: 클라우드웨이즈 vs. 블루호스트 vs. 카페24 비교 (Cloudways vs. Bluehost vs. Cafe24)

저는 오랫동안 블루호스트(Bluehost)를 이용해 왔으며 2021년부터는 클라우드웨이즈(Cloudways) 웹호스팅 서비스도 함께 이용하고 있습니다. 현재 일부 중요하지 않는 블로그는 Bluehost에서 호스팅되고

avada.tistory.com