Detectar o plugin e a versão
O plugin grátis define a constante INFIXS_CORREIOS_AUTOMATICO_PLUGIN_VERSION (na 1.14.0, '1.14.0') ao ser carregado, e o PRO define INFIXS_CORREIOS_AUTOMATICO_PRO_PLUGIN_VERSION ('1.6.2'). A função infixs_correios_automatico() devolve o contêiner de serviços do grátis. Teste as constantes no plugins_loaded com prioridade 20: o PRO inicia nesse gancho com prioridade 11, então nesse ponto os dois já estão prontos.
add_action( 'plugins_loaded', 'meu_plugin_integrar_correios', 20 );
function meu_plugin_integrar_correios() {
if ( ! defined( 'INFIXS_CORREIOS_AUTOMATICO_PLUGIN_VERSION' ) || ! function_exists( 'wc_get_order' ) ) {
return; // Correios Automático ou WooCommerce inativo: nada a registrar.
}
if ( version_compare( INFIXS_CORREIOS_AUTOMATICO_PLUGIN_VERSION, '1.11.0', '<' ) ) {
return; // A NF-e do pedido na pré-postagem chegou na 1.11.0.
}
$tem_pro = defined( 'INFIXS_CORREIOS_AUTOMATICO_PRO_PLUGIN_VERSION' );
add_filter( 'infixs_correios_automatico_order_invoice', 'meu_plugin_nfe_do_pedido', 10, 3 );
if ( $tem_pro ) {
add_filter( 'infixs_correios_automatico_auto_prepost_wait_invoice', 'meu_plugin_esperar_nfe', 10, 3 );
}
}Para saber se um recurso existe, independentemente do número da versão, teste a classe ou o método que o oferece:
| Recurso | Como detectar | Desde |
|---|---|---|
| NF-e do pedido na pré-postagem | class_exists( '\Infixs\CorreiosAutomatico\Services\OrderInvoiceResolver' ) | Grátis 1.11.0 |
| Status da NF-e na lista de pedidos | version_compare( INFIXS_CORREIOS_AUTOMATICO_PLUGIN_VERSION, '1.12.0', '>=' ) | Grátis 1.12.0 |
| DANFE simplificada na etiqueta | method_exists( '\Infixs\CorreiosAutomatico\Services\OrderDanfeResolver', 'resolve' ) e a constante OrderDanfeResolver::SCHEMA (hoje 1) | Grátis 1.12.0 |
| Página que imprime só a DANFE | method_exists( '\Infixs\CorreiosAutomatico\Core\Admin\PrintUrl', 'orders' ) | Grátis 1.12.0 |
| Documento fiscal da logística reversa e pendências próprias na lista | version_compare( INFIXS_CORREIOS_AUTOMATICO_PLUGIN_VERSION, '1.14.0', '>=' ) | Grátis 1.14.0 |
| Pré-postagem automática que espera a NF-e | class_exists( '\Infixs\CorreiosAutomaticoPro\Services\AutoPrepostInvoice' ) | PRO 1.3.0 |
| Armazém Correios LOG+ | \Infixs\CorreiosAutomaticoPro\Integrations\LogPlus\LogPlusIntegration::isSupported() (PRO 1.6.0+ com o grátis 1.14.0+) | PRO 1.6.0 |
| Mensagem própria para o XML recusado no LOG+ | version_compare( INFIXS_CORREIOS_AUTOMATICO_PRO_PLUGIN_VERSION, '1.6.2', '>=' ) | PRO 1.6.2 |
| Aviso de nota pronta que adianta o XML do LOG+ | method_exists( '\Infixs\CorreiosAutomaticoPro\Integrations\LogPlus\Invoice\LogPlusInvoiceXml', 'onInvoiceReady' ) | PRO 1.6.2 |
Requisitos declarados: grátis 1.14.0 com WordPress 6.0+, PHP 7.4+ e WooCommerce 7.7+; PRO 1.6.2 com WooCommerce 8.0+ e o grátis 1.14.0. Os dois declaram compatibilidade com o HPOS (tabelas de pedidos do WooCommerce).
Quando registrar os ganchos
- O grátis liga os serviços enquanto o arquivo dele é incluído e dispara
infixs_correios_automatico_plugin_loadednesse momento, antes doplugins_loaded. Como o WordPress carrega os plugins em ordem alfabética, use oplugins_loadedcomo ponto de entrada: ele sempre chega depois. - O PRO inicia no
plugins_loadedcom prioridade 11 e disparainfixs_correios_automatico_pro_plugin_loadedlogo no começo, antes de conferir o grátis. Com o grátis ausente ou anterior à 1.8.4, ele para ali, sem registrar nada; por isso, para saber se um recurso do PRO está ligado, teste a classe ou oisSupported()dele (tabela acima). Com o grátis compatível, o PRO registra os ouvintes de nota pronta e de falha em toda requisição (front, admin, REST e cron). - Registre os filtros de NF-e no
plugins_loaded(prioridade 20) ou noinit. O painel conferehas_filter( 'infixs_correios_automatico_order_danfe' )para mostrar as opções da DANFE, então registre esse filtro só quando o seu plugin tiver os dados da nota.
Convenções
| Item | Convenção |
|---|---|
| Ganchos | Começam com infixs_correios_automatico_. Os exclusivos do PRO geralmente seguem com pro_ (ex.: infixs_correios_automatico_pro_logplus_invoice_xml). |
| Rotas REST | Namespace infixs-correios-automatico/v1. As rotas do painel do PRO entram nesse namespace pelo gancho infixs_correios_automatico_register_routes. O namespace próprio do PRO, infixs-correios-automatico-pro/v1, guarda só a consulta interna da licença e fica fora desta referência. |
| Metadados | Pedido: _infixs_correios_automatico_*; Correios LOG+ (PRO): _infixs_logplus_*. |
| Pedidos e HPOS | Leia e grave metadados pelo objeto do pedido: $order->get_meta(), $order->update_meta_data() e $order->save(). Assim a integração funciona com posts e com as tabelas HPOS. |
| Volumes | shipping_item_id é o id da linha de frete (WC_Order_Item_Shipping) de cada volume. 0 quer dizer o pedido inteiro. |
| Marketplace | vendor_id é o vendedor que posta a remessa. 0 quer dizer a própria loja. |
| Valores | As respostas do painel trazem dinheiro em centavos; na DANFE, total também é em centavos. |
| Chave de acesso | Sempre string com 44 dígitos (um número inteiro não comporta 44 dígitos). |
Estabilidade
- Ações, filtros e os metadados da NF-e são a interface pensada para integrações no mesmo WordPress. Os ganchos de NF-e trazem
@sinceno docblock, e é por eles que integrações como SquidCore e Bling se conectam ao Correios Automático. - As rotas REST do namespace
infixs-correios-automatico/v1(as do grátis e as que o PRO acrescenta nele) atendem o painel do plugin e integrações de fora do WordPress. Todas pedem um usuário com a capacidademanage_woocommerce, salvo as exceções públicas listadas em API REST. O namespace próprio do PRO,infixs-correios-automatico-pro/v1, é interno e fica fora desta referência. - Licença do PRO: desde a 1.6.4, as automações, os filtros e as rotas do PRO só agem com a licença ativa, conferida no servidor da Infixs (
\Infixs\CorreiosAutomaticoPro\Container::licenseService()->hasLicense()). Sem ela, os filtros do PRO devolvem o valor recebido, as automações não rodam e as rotas do PRO recusam o pedido com um erro de licença. - Ganchos marcados interno fazem a ponte entre o grátis e o PRO ou servem ao desenvolvimento do próprio plugin. Eles aparecem nesta página para referência e podem mudar entre versões.
Classes e serviços públicos
O contêiner \Infixs\CorreiosAutomatico\Container expõe os serviços do grátis por métodos estáticos. Os mais úteis para integrações:
| Serviço ou classe | O que oferece | Desde |
|---|---|---|
Container::orderInvoiceResolver()->resolve( $order, $context )src/Container.php:325 | A NF-e que o plugin enxerga para o pedido (invoice_number, invoice_key, model, source, source_label) ou null. isWaiting( $order ) diz se a automática do PRO espera a nota. | 1.11.0 |
Container::orderDanfeResolver()->resolve( $order, $context )src/Container.php:335 | { invoice, danfe, status } com status ready, pending, unavailable, invalid ou none. | 1.12.0 |
Container::orderInvoiceStatus()src/Container.php:345 | O status da NF-e mostrado no painel (resolve( $order, $context )). | 1.12.0 |
Container::trackingService()src/Container.php:255 | add( $order_id, $code, $send_email = false, $data = [] ) grava um código de rastreio; getShipmentCodes( $order_id ) lista só os objetos de ida (code, shipping_item_id, carrier); getReverseCodes( $order_id ) lista os de devolução. | 1.0.0 · getShipmentCodes 1.11.0 |
Container::shipmentContextResolver()->resolveShipmentContexts( $order_id, $context )src/Container.php:285 | Um contexto (shipping_item_id, vendor_id) por remessa: volume a volume ou vendedor a vendedor. | 1.11.0 |
Container::contractMode()->prepostError( $reverse = false )src/Container.php:151 · src/Prepaid/ContractMode.php:162 | WP_Error quando a loja ainda não pode pré-postar, null quando pode: auth_not_active (400, Contrato Próprio desligado), prepaid_not_connected (400, conta do Contrato pré-pago desconectada) ou prepaid_reconnect (401, conexão expirada ou revogada). Com $reverse = true no Contrato pré-pago, devolve sempre prepaid_reverse_not_supported (422), mesmo com a conta conectada. mode() devolve own ou prepaid. | 1.14.0 |
Container::prepostService()src/Container.php:265 | createPrepost(), createReversePrepost(), previewReverseFiscalDocument(), getReversePreposts( $order ) e getOrderPrepostErrors( $order ). Veja Pré-postar pelo seu código. | 1.0.0 |
Container::notificationService()->notify( $type, $level, $title, $message, $context, $dedupe_key )src/Container.php:389 | Cria um aviso na central de notificações do painel. | 1.8.0 |
\Infixs\CorreiosAutomatico\Utils\AccessKeysrc/Utils/AccessKey.php:67 | Métodos estáticos para a chave de 44 dígitos: normalize(), model(), isInvoice() (55), isDce() (99), number(), series(), issuerDocument(), checkDigit() e hasValidCheckDigit(). | 1.11.0 · DV e emitente 1.12.0 |
\Infixs\CorreiosAutomatico\Core\Admin\PrintUrl::orders( $ids, $view )src/Core/Admin/PrintUrl.php:51 | URL da página de impressão no admin; PrintUrl::VIEW_DANFE imprime só a DANFE. | 1.12.0 |
DeliveryServiceCode::isReverseService( $service_code )src/Services/Correios/Enums/DeliveryServiceCode.php:499 | Diz se o código de serviço é de logística reversa. | 1.11.0 |
DceRejection::isIcmsTaxpayer( $motivo )src/Services/Correios/DceRejection.php:30 | Reconhece o cancelamento da DC-e por “Contribuinte de ICMS” (rejeição 812), sinal de que a remessa precisa da NF-e. | 1.14.0 |
MarketplaceRegistry::register( MarketplaceAdapter $adapter )src/Marketplace/MarketplaceRegistry.php:44 | Registra um adaptador de marketplace (estenda MarketplaceAdapter). | 1.10.0 |
OrderQuery::ORDER_ID_TOKEN e OrderQuery::usesOrdersTable()src/Utils/OrderQuery.php:44 | Marcador {order_id} e detecção do HPOS para as pendências próprias da lista. | 1.11.0 · pendências 1.14.0 |
DeliveryServiceCode fica em \Infixs\CorreiosAutomatico\Services\Correios\Enums, DceRejection em \Infixs\CorreiosAutomatico\Services\Correios, MarketplaceRegistry em \Infixs\CorreiosAutomatico\Marketplace e OrderQuery em \Infixs\CorreiosAutomatico\Utils.