Pergunta

Estamos usando a funcionalidade de envio padrão do Magento CE v 1.9.1.0 USPS.Nossas credenciais de API têm permissão para criar uma etiqueta de remessa.

No entanto, quando criamos uma etiqueta de remessa USPS dentro do site usps.com, há uma opção para adicionar um número de referência à etiqueta de remessa que usamos para adicionar o número do pedido à etiqueta.

No entanto, agora que estamos usando o Magento para criar as etiquetas de remessa, não vemos o número do pedido na etiqueta de remessa que os desenvolvedores do Magento usam e gostaríamos de saber como alterar o código para enviar o número do pedido como referência para o USPS quando tivermos Magento gera a etiqueta de envio.

Alguma sugestão sobre o arquivo para editar?

Foi útil?

Solução

Para adicionar informações à etiqueta, você deve modificar o xml enviado ao USPS.Magento coleta as informações de sua remessa, converte-as para xml e depois as envia para a API do USPS, que retorna um arquivo de imagem.O Magento então pega essa imagem e cria o pdf que você obtém ao clicar em "Imprimir etiqueta de envio".

Existe uma tag na API chamada "CustomerRefNo" que parece adequada para seus propósitos.Caso você queira tentar outra coisa, a referência do usps é aqui

Para isso, criei um módulo chamado Yourcompany_UspsLabel.Incluirei todo o conteúdo para maior clareza.

app/code/local/Suaempresa/UspsLabel/etc/config.xml

Basicamente permite que o Magento saiba o que você está reescrevendo.

<?xml version="1.0"?>
<config>
    <modules>
        <Yourcompany_UspsLabel>
            <version>0.1.0</version>
        </Yourcompany_UspsLabel>
    </modules>
    <global>
        <models>
            <yourcompany_uspslabel>
                <class>Yourcompany_UspsLabel_Model</class>
                <resourceModel>yourcompany_uspslabel_resource</resourceModel>
            </yourcompany_uspslabel>
            <yourcompany_uspslabel_resource>
                <class>Yourcompany_UspsLabel_Model_Resource</class>
            </yourcompany_uspslabel_resource>
            <shipping>
                <rewrite>
                    <shipping>Yourcompany_UspsLabel_Model_Shipping_Shipping</shipping>
                </rewrite>
            </shipping>
            <usa>
                <rewrite>
                    <shipping_carrier_usps>Yourcompany_UspsLabel_Model_Usa_Shipping_Carrier_Usps</shipping_carrier_usps>
                </rewrite>
            </usa>
        </models>
        <helpers>
            <yourcompany_uspslabel>
                <class>Yourcompany_UspsLabel_Helper</class>
            </yourcompany_uspslabel>
        </helpers>
    </global>
</config>

app/code/local/Suaempresa/UspsLabel/Model/Shipping/Shipment/Request.php

Observe os @methods no final - getOrderId e setOrderId para disponibilizá-los quando este objeto for passado.

/**
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setOrderShipment(Mage_Sales_Model_Order_Shipment $orderShipment)
 * @method Mage_Sales_Model_Order_Shipment getOrderShipment()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperContactPersonName(string $value)
 * @method string getShipperContactPersonName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperContactPersonFirstName(string $value)
 * @method string getShipperContactPersonFirstName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperContactPersonLastName(string $value)
 * @method string getShipperContactPersonLastName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperContactCompanyName(string $value)
 * @method string getShipperContactCompanyName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperContactPhoneNumber(int $value)
 * @method int getShipperContactPhoneNumber()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperAddressStreet(string $value)
 * @method string getShipperAddressStreet()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperAddressStreet1(string $value)
 * @method string getShipperAddressStreet1()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperAddressStreet2(string $value)
 * @method string getShipperAddressStreet2()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperAddressCity(string $value)
 * @method string getShipperAddressCity()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperAddressStateOrProvinceCode(string $value)
 * @method string getShipperAddressStateOrProvinceCode()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperAddressPostalCode(int $value)
 * @method int getShipperAddressPostalCode()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShipperAddressCountryCode(string $value)
 * @method string getShipperAddressCountryCode()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientContactPersonName(string $value)
 * @method string getRecipientContactPersonName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientContactPersonFirstName(string $value)
 * @method string getRecipientContactPersonFirstName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientContactPersonLastName(string $value)
 * @method string getRecipientContactPersonLastName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientContactCompanyName(string $value)
 * @method string getRecipientContactCompanyName()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientContactPhoneNumber(int $value)
 * @method int getRecipientContactPhoneNumber()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientAddressStreet(string $value)
 * @method string getRecipientAddressStreet()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientAddressStreet1(string $value)
 * @method string getRecipientAddressStreet1()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientAddressStreet2(string $value)
 * @method string getRecipientAddressStreet2()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientAddressCity(string $value)
 * @method string getRecipientAddressCity()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientAddressStateOrProvinceCode(string $value)
 * @method string getRecipientAddressStateOrProvinceCode()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientAddressPostalCode(int $value)
 * @method int getRecipientAddressPostalCode()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setRecipientAddressCountryCode(string $value)
 * @method string getRecipientAddressCountryCode()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setShippingMethod(string $value)
 * @method string getShippingMethod()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setPackageWeight(float $value)
 * @method float getPackageWeight()
 * @method Yourcompany_UspsLabel_Model_Shipping_Shipment_Request setOrderId(string $value)
 * @method string getOrderId()
 *
 * @category    Mage
 * @package     Mage_Shipping
 * @author      Magento Core Team <core@magentocommerce.com>
 */
class Yourcompany_UspsLabel_Model_Shipping_Shipment_Request extends Mage_Shipping_Model_Shipment_Request
{
}

app/code/local/Suaempresa/UspsLabel/Model/Shipping/Shipping.php

A única alteração aqui é adicionar o ID de incremento do pedido - $request->setOrderId($order->getIncrementId());, no final de requestToShipment função.

<?php

class Yourcompany_UspsLabel_Model_Shipping_Shipping extends Mage_Shipping_Model_Shipping {

    public function requestToShipment(Mage_Sales_Model_Order_Shipment $orderShipment)
    {
        $admin = Mage::getSingleton('admin/session')->getUser();
        $order = $orderShipment->getOrder();
        $address = $order->getShippingAddress();
        $shippingMethod = $order->getShippingMethod(true);
        $shipmentStoreId = $orderShipment->getStoreId();
        $shipmentCarrier = $order->getShippingCarrier();
        $baseCurrencyCode = Mage::app()->getStore($shipmentStoreId)->getBaseCurrencyCode();
        if (!$shipmentCarrier) {
            Mage::throwException('Invalid carrier: ' . $shippingMethod->getCarrierCode());
        }
        $shipperRegionCode = Mage::getStoreConfig(self::XML_PATH_STORE_REGION_ID, $shipmentStoreId);
        if (is_numeric($shipperRegionCode)) {
            $shipperRegionCode = Mage::getModel('directory/region')->load($shipperRegionCode)->getCode();
        }

        $recipientRegionCode = Mage::getModel('directory/region')->load($address->getRegionId())->getCode();

        $originStreet1 = Mage::getStoreConfig(self::XML_PATH_STORE_ADDRESS1, $shipmentStoreId);
        $originStreet2 = Mage::getStoreConfig(self::XML_PATH_STORE_ADDRESS2, $shipmentStoreId);
        $storeInfo = new Varien_Object(Mage::getStoreConfig('general/store_information', $shipmentStoreId));

        if (!$admin->getFirstname() || !$admin->getLastname() || !$storeInfo->getName() || !$storeInfo->getPhone()
            || !$originStreet1 || !Mage::getStoreConfig(self::XML_PATH_STORE_CITY, $shipmentStoreId)
            || !$shipperRegionCode || !Mage::getStoreConfig(self::XML_PATH_STORE_ZIP, $shipmentStoreId)
            || !Mage::getStoreConfig(self::XML_PATH_STORE_COUNTRY_ID, $shipmentStoreId)
        ) {
            Mage::throwException(
                Mage::helper('sales')->__('Insufficient information to create shipping label(s). Please verify your Store Information and Shipping Settings.')
            );
        }

        /** @var $request Mage_Shipping_Model_Shipment_Request */
        $request = Mage::getModel('shipping/shipment_request');
        $request->setOrderShipment($orderShipment);
        $request->setShipperContactPersonName($admin->getName());
        $request->setShipperContactPersonFirstName($admin->getFirstname());
        $request->setShipperContactPersonLastName($admin->getLastname());
        $request->setShipperContactCompanyName($storeInfo->getName());
        $request->setShipperContactPhoneNumber($storeInfo->getPhone());
        $request->setShipperEmail($admin->getEmail());
        $request->setShipperAddressStreet(trim($originStreet1 . ' ' . $originStreet2));
        $request->setShipperAddressStreet1($originStreet1);
        $request->setShipperAddressStreet2($originStreet2);
        $request->setShipperAddressCity(Mage::getStoreConfig(self::XML_PATH_STORE_CITY, $shipmentStoreId));
        $request->setShipperAddressStateOrProvinceCode($shipperRegionCode);
        $request->setShipperAddressPostalCode(Mage::getStoreConfig(self::XML_PATH_STORE_ZIP, $shipmentStoreId));
        $request->setShipperAddressCountryCode(Mage::getStoreConfig(self::XML_PATH_STORE_COUNTRY_ID, $shipmentStoreId));
        $request->setRecipientContactPersonName(trim($address->getFirstname() . ' ' . $address->getLastname()));
        $request->setRecipientContactPersonFirstName($address->getFirstname());
        $request->setRecipientContactPersonLastName($address->getLastname());
        $request->setRecipientContactCompanyName($address->getCompany());
        $request->setRecipientContactPhoneNumber($address->getTelephone());
        $request->setRecipientEmail($address->getEmail());
        $request->setRecipientAddressStreet(trim($address->getStreet1() . ' ' . $address->getStreet2()));
        $request->setRecipientAddressStreet1($address->getStreet1());
        $request->setRecipientAddressStreet2($address->getStreet2());
        $request->setRecipientAddressCity($address->getCity());
        $request->setRecipientAddressStateOrProvinceCode($address->getRegionCode());
        $request->setRecipientAddressRegionCode($recipientRegionCode);
        $request->setRecipientAddressPostalCode($address->getPostcode());
        $request->setRecipientAddressCountryCode($address->getCountryId());
        $request->setShippingMethod($shippingMethod->getMethod());
        $request->setPackageWeight($order->getWeight());
        $request->setPackages($orderShipment->getPackages());
        $request->setBaseCurrencyCode($baseCurrencyCode);
        $request->setStoreId($shipmentStoreId);
        $request->setOrderId($order->getIncrementId());

        return $shipmentCarrier->requestToShipment($request);
    }
}

app/code/local/Suaempresa/UspsLabel/Model/Usa/Shipping/Carrier/Usps.php

StackExchange está me impedindo de colar o próximo bit, pois ultrapassa o limite de caracteres.Eu criei uma pasta aqui.As alterações neste arquivo são simples - basta adicionar $xml->addChild('CustomerRefNo', $request->getOrderId()); para cada uma das funções de criação de xml - _formUsExpressShipmentRequest, _formUsSignatureConfirmationShipmentRequest, e _formIntlShipmentRequest.Isso deve ser adicionado depois o $xml->addChild('ImageType', 'PDF'); chamadas.

app/etc/modules/Suaempresa_UspsLabel.xmlPorque, bem, você precisará de um.

<?xml version="1.0"?>
<config>
    <modules>
        <Yourcompany_UspsLabel>
            <active>true</active>
            <codePool>local</codePool>
        </Yourcompany_UspsLabel>
    </modules>
</config>

Poderá ver o número de encomenda na etiqueta - Está à direita, abaixo do peso - Ref:145000008.

label with order number

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top