Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Agreement.php
Go to the documentation of this file.
1 <?php
7 
11 
17  \Magento\Paypal\Model\Billing\Agreement\MethodInterface
18 {
25 
31  protected $_canAuthorize = true;
32 
38  protected $_canCapture = true;
39 
45  protected $_canCapturePartial = true;
46 
52  protected $_canRefund = true;
53 
59  protected $_canRefundInvoicePartial = true;
60 
66  protected $_canVoid = true;
67 
73  protected $_canUseCheckout = true;
74 
80  protected $_canUseInternal = true;
81 
87  protected $_canFetchTransactionInfo = true;
88 
94  protected $_canReviewPayment = true;
95 
101  protected $_pro;
102 
106  protected $_storeManager;
107 
111  protected $_urlBuilder;
112 
116  protected $_cartFactory;
117 
136  public function __construct(
137  \Magento\Framework\Model\Context $context,
138  \Magento\Framework\Registry $registry,
139  \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
141  \Magento\Payment\Helper\Data $paymentData,
142  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
143  \Magento\Payment\Model\Method\Logger $logger,
144  \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory,
146  \Magento\Paypal\Model\ProFactory $proFactory,
147  \Magento\Framework\UrlInterface $urlBuilder,
148  \Magento\Paypal\Model\CartFactory $cartFactory,
149  \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
150  \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
151  array $data = []
152  ) {
153  $this->_storeManager = $storeManager;
154  $this->_urlBuilder = $urlBuilder;
155  $this->_cartFactory = $cartFactory;
156  parent::__construct(
157  $context,
158  $registry,
159  $extensionFactory,
161  $paymentData,
162  $scopeConfig,
163  $logger,
164  $agreementFactory,
165  $resource,
166  $resourceCollection,
167  $data
168  );
169  $proInstance = array_shift($data);
170  if ($proInstance && $proInstance instanceof \Magento\Paypal\Model\Pro) {
171  $this->_pro = $proInstance;
172  } else {
173  $this->_pro = $proFactory->create();
174  }
175  $this->_pro->setMethod($this->_code);
176  }
177 
185  public function setStore($store)
186  {
187  $this->setData('store', $store);
188  if (null === $store) {
189  $store = $this->_storeManager->getStore()->getId();
190  }
191  $this->_pro->getConfig()->setStoreId(is_object($store) ? $store->getId() : $store);
192  return $this;
193  }
194 
201  public function initBillingAgreementToken(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
202  {
203  $api = $this->_pro->getApi()->setReturnUrl(
204  $agreement->getReturnUrl()
205  )->setCancelUrl(
206  $agreement->getCancelUrl()
207  )->setBillingType(
208  $this->_pro->getApi()->getBillingAgreementType()
209  );
210 
211  $api->callSetCustomerBillingAgreement();
212  $agreement->setRedirectUrl($this->_pro->getConfig()->getStartBillingAgreementUrl($api->getToken()));
213  return $this;
214  }
215 
222  public function getBillingAgreementTokenInfo(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
223  {
224  $api = $this->_pro->getApi()->setToken($agreement->getToken());
225  $api->callGetBillingAgreementCustomerDetails();
226  $responseData = [
227  'token' => $api->getData('token'),
228  'email' => $api->getData('email'),
229  'payer_id' => $api->getData('payer_id'),
230  'payer_status' => $api->getData('payer_status'),
231  ];
232  $agreement->addData($responseData);
233  return $responseData;
234  }
235 
242  public function placeBillingAgreement(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
243  {
244  $api = $this->_pro->getApi()->setToken($agreement->getToken());
245  $api->callCreateBillingAgreement();
246  $agreement->setBillingAgreementId($api->getData('billing_agreement_id'));
247  return $this;
248  }
249 
257  public function updateBillingAgreementStatus(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
258  {
259  $targetStatus = $agreement->getStatus();
260  $api = $this->_pro->getApi()->setReferenceId(
261  $agreement->getReferenceId()
262  )->setBillingAgreementStatus(
263  $targetStatus
264  );
265  try {
266  $api->callUpdateBillingAgreement();
267  } catch (\Magento\Framework\Exception\LocalizedException $e) {
268  // when BA was already canceled, just pretend that the operation succeeded
269  if (!(\Magento\Paypal\Model\Billing\Agreement::STATUS_CANCELED == $targetStatus &&
270  $api->getIsBillingAgreementAlreadyCancelled())
271  ) {
272  throw $e;
273  }
274  }
275  return $this;
276  }
277 
286  {
287  return $this->_placeOrder($payment, $amount);
288  }
289 
297  public function void(\Magento\Payment\Model\InfoInterface $payment)
298  {
299  $this->_pro->void($payment);
300  return $this;
301  }
302 
311  {
312  if (false === $this->_pro->capture($payment, $amount)) {
313  $this->_placeOrder($payment, $amount);
314  }
315  return $this;
316  }
317 
327  {
328  $this->_pro->refund($payment, $amount);
329  return $this;
330  }
331 
338  public function cancel(\Magento\Payment\Model\InfoInterface $payment)
339  {
340  $this->_pro->cancel($payment);
341  return $this;
342  }
343 
349  public function canReviewPayment()
350  {
351  return parent::canReviewPayment() && $this->_pro->canReviewPayment($this->getInfoInstance());
352  }
353 
361  {
362  parent::acceptPayment($payment);
363  return $this->_pro->reviewPayment($payment, \Magento\Paypal\Model\Pro::PAYMENT_REVIEW_ACCEPT);
364  }
365 
373  {
374  parent::denyPayment($payment);
375  return $this->_pro->reviewPayment($payment, \Magento\Paypal\Model\Pro::PAYMENT_REVIEW_DENY);
376  }
377 
385  public function fetchTransactionInfo(InfoInterface $payment, $transactionId)
386  {
387  return $this->_pro->fetchTransactionInfo($payment, $transactionId);
388  }
389 
397  protected function _placeOrder(Payment $payment, $amount)
398  {
399  $order = $payment->getOrder();
401  $billingAgreement = $this->_agreementFactory->create()->load(
402  $payment->getAdditionalInformation(
404  )
405  );
406 
407  $cart = $this->_cartFactory->create(['salesModel' => $order]);
408 
409  $proConfig = $this->_pro->getConfig();
410  $api = $this->_pro->getApi()->setReferenceId(
411  $billingAgreement->getReferenceId()
412  )->setPaymentAction(
413  $proConfig->getValue('paymentAction')
414  )->setAmount(
415  $amount
416  )->setCurrencyCode(
417  $payment->getOrder()->getBaseCurrencyCode()
418  )->setNotifyUrl(
419  $this->_urlBuilder->getUrl('paypal/ipn/')
420  )->setPaypalCart(
421  $cart
422  )->setIsLineItemsEnabled(
423  $proConfig->getValue('lineItemsEnabled')
424  )->setInvNum(
425  $order->getIncrementId()
426  );
427 
428  // call api and import transaction and other payment information
429  $api->callDoReferenceTransaction();
430  $this->_pro->importPaymentInfo($api, $payment);
431  $api->callGetTransactionDetails();
432  $this->_pro->importPaymentInfo($api, $payment);
433 
434  $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0);
435 
436  if ($api->getBillingAgreementId()) {
437  $order->addRelatedObject($billingAgreement);
438  $billingAgreement->setIsObjectChanged(true);
439  $billingAgreement->addOrderRelation($order);
440  }
441 
442  return $this;
443  }
444 
450  protected function _isAvailable($quote)
451  {
452  return $this->_pro->getConfig()->isMethodAvailable($this->_code);
453  }
454 
461  public function getConfigPaymentAction()
462  {
463  return $this->_pro->getConfig()->getPaymentAction();
464  }
465 }
__construct(\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Payment\Model\Method\Logger $logger, \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Paypal\Model\ProFactory $proFactory, \Magento\Framework\UrlInterface $urlBuilder, \Magento\Paypal\Model\CartFactory $cartFactory, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[])
Definition: Agreement.php:136
refund(\Magento\Payment\Model\InfoInterface $payment, $amount)
Definition: Agreement.php:326
const PAYMENT_REVIEW_DENY
Definition: Pro.php:24
cancel(\Magento\Payment\Model\InfoInterface $payment)
Definition: Agreement.php:338
initBillingAgreementToken(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
Definition: Agreement.php:201
updateBillingAgreementStatus(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
Definition: Agreement.php:257
$billingAgreement
$quote
$order
Definition: order.php:55
$storeManager
$resource
Definition: bulk.php:12
$amount
Definition: order.php:14
const PAYMENT_REVIEW_ACCEPT
Definition: Pro.php:22
$payment
Definition: order.php:17
void(\Magento\Payment\Model\InfoInterface $payment)
Definition: Agreement.php:297
capture(\Magento\Payment\Model\InfoInterface $payment, $amount)
Definition: Agreement.php:310
placeBillingAgreement(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
Definition: Agreement.php:242
getBillingAgreementTokenInfo(\Magento\Paypal\Model\Billing\AbstractAgreement $agreement)
Definition: Agreement.php:222
fetchTransactionInfo(InfoInterface $payment, $transactionId)
Definition: Agreement.php:385
authorize(\Magento\Payment\Model\InfoInterface $payment, $amount)
Definition: Agreement.php:285
acceptPayment(InfoInterface $payment)
Definition: Agreement.php:360
denyPayment(InfoInterface $payment)
Definition: Agreement.php:372