· 7 years ago · Dec 13, 2018, 07:26 AM
1<?php
2
3namespace Kemana\Checkout\Observer;
4
5use Magento\Framework\Event\ObserverInterface;
6
7/**
8 * Class PaymentActive
9 * @package Kemana\Checkout\Observer
10 */
11class PaymentActive implements ObserverInterface
12{
13 const PAYMENT_CODE_PARADOXLABS_STRIPE = 'paradoxlabs_stripe';
14
15 /**
16 * @var \Magento\Store\Model\StoreManagerInterface
17 */
18 protected $storeManager;
19
20 /**
21 * @var \ParadoxLabs\TokenBase\Model\Method\Factory
22 */
23 protected $methodFactory;
24
25 /**
26 * PaymentActive constructor.
27 * @param \Magento\Store\Model\StoreManagerInterface $storeManager
28 * @param \ParadoxLabs\TokenBase\Model\Method\Factory $methodFactory
29 */
30 public function __construct(
31 \Magento\Store\Model\StoreManagerInterface $storeManager,
32 \ParadoxLabs\TokenBase\Model\Method\Factory $methodFactory
33 )
34 {
35 $this->storeManager = $storeManager;
36 $this->methodFactory = $methodFactory;
37 }
38
39 /**
40 * @param \Magento\Framework\Event\Observer $observer
41 */
42 public function execute(\Magento\Framework\Event\Observer $observer)
43 {
44 $event = $observer->getEvent();
45 $method = $event->getMethodInstance();
46 if ($method->getCode() == self::PAYMENT_CODE_PARADOXLABS_STRIPE) {
47 $isAvailable = true;
48 $storeId = $this->storeManager->getStore()->getStoreId();
49
50 $currentMethod = $this->methodFactory->getMethodInstance(self::PAYMENT_CODE_PARADOXLABS_STRIPE);
51 $currentMethod->setStore($storeId);
52
53 //check public key and secret key
54 $publicKey = $currentMethod->getConfigData('public_key');
55 $secretKey = $currentMethod->getConfigData('secret_key');
56 if (empty($publicKey) || empty($secretKey)) {
57 $isAvailable = false;
58 }
59
60 if ($isAvailable) {
61 //checking have 'test' value inside secretKey
62 $publicKeyIsTest = substr($secretKey, 3, 4) === 'test';
63 $secretKeyIsTest = substr($secretKey, 3, 4) === 'test';
64 if ($publicKeyIsTest && !$secretKeyIsTest) {
65 $isAvailable = false;
66 } elseif (!$publicKeyIsTest && $secretKeyIsTest) {
67 $isAvailable = false;
68 }
69
70 if ($isAvailable) {
71 //check json return result
72 if (json_decode($currentMethod->getConfigData('field_style'), true, 4) === null) {
73 $isAvailable = false;
74 }
75
76 if ($isAvailable) {
77 //connect to stripe api to check connection
78 $gateway = $currentMethod->gateway();
79 try {
80 $account = $gateway->getAccount();
81 } catch (\Exception $e) {
82 $isAvailable = false;
83 }
84 }
85 }
86 }
87
88 if (!$isAvailable) {
89 $result = $event->getResult();
90 $result->setData('is_available', false);
91 }
92 }
93 }
94}