Created
June 16, 2017 05:23
-
-
Save feelinc/de817030e00adc7ff7001de1807c1835 to your computer and use it in GitHub Desktop.
Process the Paypal express payment information from external app in Magento 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> | |
<type name="Magento\Paypal\Model\Express"> | |
<plugin name="sulaeman_magento_paypal_model_express_plugin" | |
type="Sulaeman\PaypalWebService\Plugin\Paypal\Model\Express" | |
sortOrder="99999" | |
disabled="false" /> | |
</type> | |
</config> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* This file is part of the Sulaeman Paypal Web Service package. | |
* | |
* @author Sulaeman <[email protected]> | |
*/ | |
namespace Sulaeman\PaypalWebService\Plugin\Paypal\Model; | |
use Magento\Framework\Registry; | |
use Magento\Framework\Model\Context; | |
use Magento\Paypal\Model\Express as PaypalExpress; | |
use Magento\Sales\Model\Order; | |
use Magento\Payment\Model\InfoInterface; | |
class Express | |
{ | |
/** | |
* @var \Magento\Framework\App\State | |
*/ | |
protected $_appState; | |
/** | |
* @var Registry | |
*/ | |
protected $_registry; | |
/** | |
* @var LoggerInterface | |
*/ | |
protected $_logger; | |
/** | |
* @var array | |
*/ | |
private $_areas = [ | |
\Magento\Framework\App\Area::AREA_WEBAPI_REST, | |
\Magento\Framework\App\Area::AREA_WEBAPI_SOAP | |
]; | |
/** | |
* @var array | |
*/ | |
private $_paymentPayload = null; | |
/** | |
* @param \Magento\Framework\Model\Context $context | |
* @param \Magento\Framework\Registry $registry | |
* @param \Psr\Log\LoggerInterface $logger | |
*/ | |
public function __construct(Context $context, Registry $registry) | |
{ | |
$this->_appState = $context->getAppState(); | |
$this->_logger = $context->getLogger(); | |
$this->_registry = $registry; | |
} | |
/** | |
* Interceptor capture. | |
* | |
* @param \Magento\Paypal\Model\Express $subject | |
* | |
* {@inheritdoc} | |
*/ | |
public function aroundCapture( | |
PaypalExpress $subject, | |
\Closure $unknown, | |
InfoInterface $payment, | |
$amount | |
) { | |
if (in_array($this->_appState->getAreaCode(), $this->_areas) | |
&& $this->_paymentPayload != null) { | |
$payment->setLastTransId($this->_paymentPayload['id']); | |
$payment->setTransactionId($this->_paymentPayload['id']); | |
foreach ($this->_paymentPayload as $key => $value) { | |
$payment->setTransactionAdditionalInfo($key, $value); | |
} | |
$payment->setIsTransactionPending(false); | |
} | |
return $subject; | |
} | |
/** | |
* Interceptor assignData. | |
* | |
* @param \Magento\Paypal\Model\Express $subject | |
* | |
* {@inheritdoc} | |
*/ | |
public function beforeAssignData( | |
PaypalExpress $subject, | |
\Magento\Framework\DataObject $data | |
) { | |
if (in_array($this->_appState->getAreaCode(), $this->_areas)) { | |
$additionalData = $data->getData('additional_data'); | |
if ($additionalData) { | |
if (isset($additionalData['paypal_express_payment_payload'])) { | |
$this->_paymentPayload = json_decode($additionalData['paypal_express_payment_payload'], true); | |
} | |
} | |
} | |
return [$data]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I suppose your plugin function aroundCapture() has completed bypassed the parent function since \Closure is not executed. As a result, Paypal transactions cannot be captured correctly and Paypal transaction ID(s) was missing. Please fix it by
return $unknown($payment, $amount);
instead ofreturn $subject;
.