ErrorException Warning: Trying to access array offset on null
-
Erro no Sentry:
PM-STORE-Y
ErrorExceptionWarning: Trying to access array offset on null
Level: Warning
Unhandled
|
New
|
/wp-content/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.php in Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomer
21ResolveArchive
Priority
Med
AssigneeAll Envs14D
Events
2
User
1012Jan 25 5:00 AMFeb 1 5:00 AMReleases
<bdi>https://store.pericialmed.com/</bdi>100%2804:14d:4cd8:a33c:591c:8f50:e3d6:8dd0100%3.5.1100%production
All TagsEvents
in this issue
- First
- Last
- Recommended
All Events6ab02208
2 hours ago
|
Jump to:
HighlightsStack TraceTraceTagsContextReplay
?
2804:14d:4cd8:a33c:591c:8f50:e3d6:8dd0
Chrome
132
Windows
Linux
6.8.0-49-generic
php
8.4.3
production
HighlightsEdit
handled
handled
no
level
level
warning
url
url
https://store.pericialmed.com/
Trace: Trace ID
795d3276188e43ff992638d5511fbc35
Stack TraceMost RelevantFull Stack TraceNewestErrorExceptionWarning: Trying to access array offset on nullmechanismgenerichandledfalsecode0
… tent/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.phpinWoocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomerat line522Set up Code MappingIn App… tent/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.phpinWoocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getCustomerat line431In App- Called from:
… yments-for-woocommerce/vendor/pagarme/ecommerce-module-core/src/Kernel/Services/OrderService.phpinPagarme\Core\Kernel\Services\OrderService::extractPaymentOrderFromPlatformOrderShow 1 more frame /wp-content/plugins/pagarme-payments-for-woocommerce/src/Controller/Orders.phpinWoocommerce\Pagarme\Controller\Orders::create_orderat line64In App/wp-content/plugins/pagarme-payments-for-woocommerce/src/Model/Checkout.phpinWoocommerce\Pagarme\Model\Checkout::processat line132In App/wp-content/plugins/pagarme-payments-for-woocommerce/src/Controller/Gateways/AbstractGateway.phpinWoocommerce\Pagarme\Controller\Gateways\AbstractGateway::process_paymentat line202In App/wp-content/plugins/woocommerce/includes/class-wc-checkout.phpinWC_Checkout::process_order_paymentat line1083In App/wp-content/plugins/woocommerce/includes/class-wc-checkout.phpinWC_Checkout::process_checkoutat line1324In App/wp-content/plugins/woocommerce/includes/class-wc-ajax.phpinWC_AJAX::checkoutat line520In App- Called from:
/wp-includes/class-wp-hook.phpinWP_Hook::apply_filtersShow 2 more frames /wp-content/plugins/woocommerce/includes/class-wc-ajax.phpinWC_AJAX::do_wc_ajaxat line96In App- Called from:
/wp-includes/class-wp-hook.phpinWP_Hook::apply_filtersShow 3 more frames /wp-blog-header.phpinrequireat line19In App/index.phpat line17In App
Session Replay
Trace Preview
0.00ms
10.00s
20.00s
30.00s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
0s
1 hidden span, 28 hidden issues
Warning—Warning: Undefined array key “home_phone” ErrorException /wp-content/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.php Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomer /wp-content/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.php in Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomer
Warning—Warning: Trying to access array offset on null ErrorException /wp-content/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.php Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomer /wp-content/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.php in Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomer
Warning—Warning: Undefined array key “home_phone” ErrorException /wp-content/plugins/pagarme-payments-for-woocommerce/src/Helper/Utils.php Woocommerce\Pagarme\Helper\Utils::build_customer_phones_from_order /wp-content/plugins/pagarme-payments-for-woocommerce/src/Helper/Utils.php in Woocommerce\Pagarme\Helper\Utils::build_customer_phones_from_order
Warning—Warning: Trying to access array offset on null ErrorException /wp-content/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.php Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomer /wp-content/plugins/pagarme-payments-for-woocommerce/src/Concrete/WoocommercePlatformOrderDecorator.php in Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomer
Warning—Warning: Undefined property: FastCGI_Purger::$nginx_helper_admin ErrorException /wp-content/plugins/nginx-helper/admin/class-fastcgi-purger.php FastCGI_Purger::purge_amp_version /wp-content/plugins/nginx-helper/admin/class-fastcgi-purger.php in FastCGI_Purger::purge_amp_version
Warning—Warning: Trying to access array offset on null ErrorException /wp-content/plugins/nginx-helper/admin/class-fastcgi-purger.php FastCGI_Purger::purge_amp_version /wp-content/plugins/nginx-helper/admin/class-fastcgi-purger.php in FastCGI_Purger::purge_amp_version
Warning—Warning: Attempt to read property “options” on null ErrorException /wp-content/plugins/nginx-helper/admin/class-fastcgi-purger.php FastCGI_Purger::purge_amp_version /wp-content/plugins/nginx-helper/admin/class-fastcgi-purger.php in FastCGI_Purger::purge_amp_version
21 hidden issues
HTTP RequestFormattedcurl
POST/<small>store.pericialmed.com</small>
Body_wp_http_referer/?wc-ajax=update_order_reviewbilling_address_1Rua Itajaíbilling_address_2billing_cityGuaíbabilling_cnpj08.998.845/0001-20billing_companyDEFFENSOR PRODUTOS E SERVICOS FITOSSANITARIOS LTDAbilling_countryBRbilling_cpfbilling_emailpaulo@deffensor.com.brbilling_first_namePaulobilling_last_nameSchneiderbilling_neighborhoodBom Fimbilling_number450billing_persontype2billing_phonebilling_postcode92718500billing_stateRSorder_celular_do_advogado51998812439order_commentsorder_cpf_cnpj_do_representado08.998.845/[email protected]_nome_da_parte_contraria_controle_internoDANIEL DO NASCIMENTO DA SILVAorder_nome_do_advogadoNathalia Beduhn Schneiderorder_nome_do_representadoDEFFENSOR PRODUTOS E SERVICOS FITOSSANITARIOS LTDAorder_numero_do_processo_cnj0020593-83.2024.5.04.0871pagarme{
2_cards: {
cards: {2 items}},
credit_card: {
cards: {1 item}}}pagarme_payment_request{}payment_methodwoo-pagarme-payments-credit_cardtermsonterms-field1wc_order_attribution_referrerhttps://store.pericialmed.com/product/colaborador-sem-especialidade-atuacao-completa/wc_order_attribution_session_count1wc_order_attribution_session_entryhttps://store.pericialmed.com/cart-2/wc_order_attribution_session_pages2wc_order_attribution_session_start_time2025-02-04 17:37:27wc_order_attribution_source_typetypeinwc_order_attribution_user_agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36wc_order_attribution_utm_campaign(none)wc_order_attribution_utm_content(none)wc_order_attribution_utm_creative_format(none)wc_order_attribution_utm_id(none)wc_order_attribution_utm_marketing_tactic(none)wc_order_attribution_utm_medium(none)wc_order_attribution_utm_source(direct)wc_order_attribution_utm_source_platform(none)wc_order_attribution_utm_term(none)woocommerce-process-checkout-nonce750099bb8f
Query String
wc-ajax
checkout
Cookies
PHPSESSID
[Filtered]
_fbp
fb.1.1738614892586.30985921525257416
_ga
GA1.1.949223067.1738614883
_ga_P3P9XMLYSH
GS1.1.1738690645.1.1.1738691068.0.0.0
_ga_V1PEP7QC14
GS1.1.1738614883.1.1.1738616020.60.0.0
Headers
Accept
application/json, text/javascript, */*; q=0.01
Accept-Encoding
gzip, br
Accept-Language
pt-PT,pt;q=0.9,en-US;q=0.8,en;q=0.7
Cdn-Loop
cloudflare; loops=1
Cf-Connecting-Ip
2804:14d:4cd8:a33c:591c:8f50:e3d6:8dd0
Environment
REMOTE_ADDR
2804:14d:4cd8:a33c:591c:8f50:e3d6:8dd0
Tags
View All Issue TagsAllCustomApplicationClientOther
browser
browser
Chrome 132
browser.name
name
Chrome
client_os
client_os.name
name
Windows
environment
environment
production
handled
handled
no
language
language
pt-BR
level
level
warning
mechanism
mechanism
generic
os
os
Linux 6.8.0-49-generic
os.name
name
Linux
release
release
runtime
runtime
php 8.4.3
runtime.name
name
php
server_name
server_name
s143839
url
url
https://store.pericialmed.com/
user
user
ip:2804:14d:4cd8:a33c:591c:8f50:e3d6:8dd0
wordpress
wordpress
6.7.1
Contexts
User
?
Geography
Porto Alegre, Brazil (BR)
IP Address
2804:14d:4cd8:a33c:591c:8f50:e3d6:8dd0
Browser
Name
Chrome
Version
132
Operating System
Name
Windows
Operating System
Build
#49-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 4 02:06:24 UTC 2024
Kernel Version
Linux s143839 6.8.0-49-generic #49-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 4 02:06:24 UTC 2024 x86_64
Name
Linux
Version
6.8.0-49-generic
Runtime
Name
php
sapi
fpm-fcgi
Version
8.4.3
Trace Details
Span ID
c8061012434543f6
Status
unknown
Trace ID
795d3276188e43ff992638d5511fbc35
SDK
Event Grouping Information
Grouped by: exception stack-trace, in-app exception stack-traceGive FeedbackBy Exception Stack-traceContributing valuesAll valuesHash
538ad79f2dd11a741dd341ea6e750f05Type
componentGrouping
system
- exception
- stack-trace
- frame
- filename
index.php
- context-line
require __DIR__ . '/wp-blog-header.php';
- filename
- frame
- filename
wp-blog-header.php
- function
require
- context-line
require_once ABSPATH . WPINC . '/template-loader.php';
- filename
- frame
- filename
template-loader.php
- function
require_once
- context-line
do_action( 'template_redirect' );
- filename
- show 17 similar
- frame
- type
ErrorException
- stack-trace
By In-app Exception Stack-traceContributing valuesAll valuesHash
23d500cc7f3c87925e6c663fbd6d1670Type
componentGrouping
in-app
- exception
- stack-trace
- frame
- filename
index.php
- context-line
require __DIR__ . '/wp-blog-header.php';
- filename
- frame
- filename
wp-blog-header.php
- function
require
- context-line
require_once ABSPATH . WPINC . '/template-loader.php';
- filename
- frame
- filename
class-wc-ajax.php
- function
WC_AJAX::do_wc_ajax
- context-line
do_action( 'wc_ajax_' . $action );
- filename
- show 8 similar
- frame
- type
ErrorException
Solução Chatgpt:
- stack-trace
Analisando o problema
Pelos logs do Sentry, o erro principal é:
Warning: Trying to access array offset on null ... in Woocommerce\Pagarme\Concrete\WoocommercePlatformOrderDecorator::getGuestCustomerIsso acontece especificamente nas linhas em que se faz algo como:
$homeNumber = $phones["home_phone"]["complete_phone"]; $mobileNumber = $phones["mobile_phone"]["complete_phone"];ou seja, o índice
"mobile_phone"ou"home_phone"dentro do array$phonesnão existe ou está nulo, causando o PHP Notice/Warning de “undefined array key” e, em seguida, o “trying to access array offset on null”.O método que constrói
$phonesé:$phones = Utils::build_customer_phones_from_order($order);Se, por algum motivo, o WooCommerce não tiver dados de telefone (por exemplo, se o campo
billing_phoneestiver vazio ou formatado de maneira diferente), então$phones["mobile_phone"]ou$phones["home_phone"]podem não existir. Por que isso acontece?- O checkout pode não exigir o preenchimento de número de telefone ou pode estar usando um campo que não seja o
billing_phone, então$phones["mobile_phone"]não é construído pelo plugin. - Ou existe alguma customização que altera como os campos de telefone são enviados no checkout, e o plugin não encontra o que espera.
Como resolver?
A correção pode ser feita de duas formas principais:
- Corrigir/adequar a coleta do telefone
- Assegurar que, no checkout, o(s) campo(s) de telefone sejam obrigatórios e preenchidos.
- Confirmar que o WooCommerce realmente está salvando o telefone em
billing_phonee que ele corresponde ao que o plugin do Pagar.me espera.
- Aplicar verificações e “fallbacks” no código do plugin
- No trecho onde você tem:
$homeNumber = $phones["home_phone"]["complete_phone"]; $mobileNumber = $phones["mobile_phone"]["complete_phone"];substituir por algo como:$homeNumber = isset($phones["home_phone"]["complete_phone"]) ? $phones["home_phone"]["complete_phone"] : ''; $mobileNumber = isset($phones["mobile_phone"]["complete_phone"]) ? $phones["mobile_phone"]["complete_phone"] : '';
$phones["home_phone"]ou$phones["mobile_phone"]não existirem, não ocorrerá o erro, pois o código passa a tratar a ausência do campo de forma segura (por exemplo, assumindo uma string vazia'').- Algo similar pode ser aplicado para outras ocorrências, como:
$phones["home_phone"]["complete_phone"] $phones["mobile_phone"]["complete_phone"]em outros métodos (por exemplo,getRegisteredCustomer), fazendo sempre a checagem deisset()ouarray_key_exists().
- No trecho onde você tem:
Onde ajustar?
No seu caso, as linhas que precisam ser corrigidas aparecem em:
WoocommercePlatformOrderDecorator::getGuestCustomer()(linhas ~522 em diante)WoocommercePlatformOrderDecorator::getCustomer()(caso chamegetRegisteredCustomer()ougetGuestCustomer())
Além disso, verifique se no
Utils::build_customer_phones_from_order()a lógica de construir$phones["home_phone"]e$phones["mobile_phone"]já não faz essa verificação. Se não fizer, talvez seja melhor corrigir ali diretamente, garantindo que sempre retorne algo consistente para["home_phone"]e["mobile_phone"](mesmo que vazios). Resumo das possíveis soluções- Exigir que o usuário preencha telefone: se o seu fluxo de vendas requer sempre um telefone, pode configurar no WooCommerce para exigir (
billing_phone) como campo obrigatório. Assim, não corre o risco de chegar vazio. - Adicionar tratamento de erro/valores vazios no plugin: no arquivo
WoocommercePlatformOrderDecorator.php, onde ocorre:$homeNumber = $phones["home_phone"]["complete_phone"]; $mobileNumber = $phones["mobile_phone"]["complete_phone"];Mude para algo como:$homeNumber = isset($phones["home_phone"]["complete_phone"]) ? $phones["home_phone"]["complete_phone"] : ''; $mobileNumber = isset($phones["mobile_phone"]["complete_phone"]) ? $phones["mobile_phone"]["complete_phone"] : '';Fazendo isso, você evita o Warning: Trying to access array offset on null. - Revisar
build_customer_phones_from_order(): preferencialmente, garantir que essa função retorne sempre as chaves mínimas necessárias. Exemplo:return [ 'home_phone' => [ 'complete_phone' => $home_phone ?? '' ], 'mobile_phone' => [ 'complete_phone' => $mobile_phone ?? '' ] ];Então, mesmo que não haja telefone, não quebrará em outro ponto do código.
Conclusão
- O erro se deve à tentativa de acessar
["mobile_phone"]ou["home_phone"]em um array que não contém essas chaves (provavelmente porque o checkout foi feito sem fornecer o número de telefone). - Corrija tornando o telefone obrigatório ou adicionando checagens de existência (via
isset()) antes de acessar esses índices no plugin. - Dessa forma, você evitará os avisos PHP Notice/Warning e o plugin conseguirá continuar sem travar caso algum campo esteja vazio.
The topic ‘ErrorException Warning: Trying to access array offset on null’ is closed to new replies.