Magento – Magento 2: Paypal Express Checkout: We can’t place the order

errormagento2orderspaypalpaypal-express

I'm using Magento 2 CE Version 2.1.2. Facing strange issue. My website is live.

Using Paypal Express Checkout. We are using CDN & SSL.

Out of 100 Customers 10 Customers will face above kind of issue. When i turn on Debug Mode ON

I have below ones in the log.

'L_SHORTMESSAGE0' => 'Shipping Address1 Empty', 'L_LONGMESSAGE0' =>
'The field Shipping Address1 is required',

'L_SHORTMESSAGE0' => 'Shipping Address Postal Code Empty',
'L_LONGMESSAGE0' => 'The field Shipping Address Postal Code is
required',

'L_SHORTMESSAGE0' => 'Customer must choose new funding sources.',
'L_LONGMESSAGE0' => 'The customer must return to PayPal to select new
funding sources.',

When i check Customer Address on Admin they have all the information. We disabled Guest Checkout.

The issue is where is data loss from Paypal to Magento? How can solve this issue 100%, so no user will face this issue.

Best Answer

Sending address to Paypal is not working well.

Also, in this similar issue, it seems that Paypal doesn't recommends to send address : Paypal Express Checkout without shipping address

To disable it in Express Checkout, you have to create a plugin :

Declare module - /app/code/Namespace/Module/registration.php :

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Namespace_Module',
    __DIR__
);

Declare Plugin - /app/code/Namespace/Module/etc/di.xml :

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Paypal\Model\Api\Nvp">
        <plugin sortOrder="1" name="namespaceModuleNvp" type="Namespace\Module\Plugin\Model\Api\NvpPlugin"/>
    </type>
</config>

Plugin file - /app/code/Namespace/Module/Plugin/Model/Api/NvpPlugin.php :

<?php

namespace Webart\Base\Plugin\Model\Api;

/**
 * Class NvpPlugin
 * @package Webart\Base\Plugin\Model\Api
 */
class NvpPlugin
{
    /**
     * @param \Magento\Paypal\Model\Api\Nvp $subject
     * @param callable $proceed
     * @param $methodName
     * @param array $request
     * @return mixed
     */
    public function aroundCall(\Magento\Paypal\Model\Api\Nvp $subject, callable $proceed, $methodName, array $request)
    {
        $request['NOSHIPPING'] = 1; // All this stuff for that ;-)
        return $proceed($methodName, $request);
    }
}