Completed
Pull Request — master (#1)
by Dmitry
07:27
created

WebmoneyMerchant   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 6

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 3
lcom 2
cbo 6
dl 0
loc 60
ccs 0
cts 28
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A createGateway() 0 8 1
A requestPurchase() 0 20 1
A completePurchase() 0 14 1
1
<?php
2
3
namespace hiqdev\php\merchant\merchants\webmoney;
4
5
use hiqdev\php\merchant\credentials\CredentialsInterface;
6
use hiqdev\php\merchant\factories\GatewayFactoryInterface;
7
use hiqdev\php\merchant\InvoiceInterface;
8
use hiqdev\php\merchant\merchants\AbstractMerchant;
9
use hiqdev\php\merchant\merchants\MerchantInterface;
10
use hiqdev\php\merchant\response\CompletePurchaseResponse;
11
use hiqdev\php\merchant\response\RedirectPurchaseResponse;
12
use Money\Currency;
13
use Money\Money;
14
use Money\MoneyFormatter;
15
use Money\MoneyParser;
16
use Omnipay\WebMoney\Gateway;
17
18
/**
19
 * Class WebmoneyMerchant
20
 *
21
 * @author Dmytro Naumenko <[email protected]>
22
 */
23
class WebmoneyMerchant extends AbstractMerchant
24
{
25
    /**
26
     * @var Gateway
27
     */
28
    protected $gateway;
29
30
    protected function createGateway()
31
    {
32
        return $this->gatewayFactory->build('WebMoney', [
33
            'merchantPurse' => $this->credentials->getPurse(),
34
            'secretKey'  => $this->credentials->getKey1(),
35
            'testMode' => $this->credentials->isTestMode()
36
        ]);
37
    }
38
39
    /**
40
     * @param InvoiceInterface $invoice
41
     * @return RedirectPurchaseResponse
42
     */
43
    public function requestPurchase(InvoiceInterface $invoice)
44
    {
45
        /**
46
         * @var \Omnipay\WebMoney\Message\PurchaseResponse $response
47
         */
48
        $response = $this->gateway->purchase([
49
            'transactionId' => $invoice->getId(),
50
            'description' => $invoice->getDescription(),
51
            'amount' => $this->moneyFormatter->format($invoice->getAmount()),
52
            'currency' => $invoice->getCurrency()->getCode(),
53
            'returnUrl' => $invoice->getReturnUrl(),
54
            'returnMethod' => $invoice->getReturnMethod(),
55
            'notifyUrl' => $invoice->getNotifyUrl(),
56
            'notifyMethod' => $invoice->getNotifyMethod(),
57
            'cancelUrl' => $invoice->getCancelUrl(),
58
            'cancelMethod' => $invoice->getCancelMethod(),
59
        ])->send();
60
61
        return new RedirectPurchaseResponse($response->getRedirectUrl(), $response->getRedirectData());
62
    }
63
64
    /**
65
     * @param array $data
66
     * @return CompletePurchaseResponse
67
     */
68
    public function completePurchase($data)
69
    {
70
        /** @var \Omnipay\WebMoney\Message\CompletePurchaseResponse $response */
71
        $response = $this->gateway->completePurchase($data)->send();
72
73
        return (new CompletePurchaseResponse())
74
            ->setIsSuccessful($response->isSuccessful())
75
            ->setAmount($this->moneyParser->parse($response->getAmount(), $response->getCurrency()))
76
            ->setFee(new Money(0, new Currency($response->getCurrency())))
77
            ->setTransactionReference($response->getTransactionReference())
78
            ->setTransactionId($response->getTransactionId())
79
            ->setPayer($response->getData()['LMI_PAYER_PURSE'])
80
            ->setTime(new \DateTime($response->getData()['LMI_SYS_TRANS_DATE']));
81
    }
82
}
83