Issues (1)

src/Goldenpay.php (1 issue)

1
<?php
2
3
namespace Orkhanahmadov\Goldenpay;
4
5
use GuzzleHttp\Client;
6
use function GuzzleHttp\json_decode;
7
use Orkhanahmadov\Goldenpay\Enums\CardType;
8
use Orkhanahmadov\Goldenpay\Enums\Language;
9
use Orkhanahmadov\Goldenpay\Exceptions\GoldenpayPaymentKeyException;
10
use Orkhanahmadov\Goldenpay\Response\PaymentKey;
11
use Orkhanahmadov\Goldenpay\Response\PaymentResult;
12
13
class Goldenpay implements PaymentInterface
14
{
15
    /**
16
     * @var string|null
17
     */
18
    private $authKey = null;
19
    /**
20
     * @var string|null
21
     */
22
    private $merchantName = null;
23
    /**
24
     * @var Client
25
     */
26
    private $client;
27
28
    /**
29
     * Goldenpay constructor.
30
     */
31
    public function __construct()
32
    {
33
        $this->client = new Client(['base_uri' => 'https://rest.goldenpay.az/web/service/merchant/']);
34
    }
35
36
    /**
37
     * Sets Goldenpay authentication credentials.
38
     *
39
     * @param string $authKey
40
     * @param string $merchantName
41
     *
42
     * @return self
43
     */
44
    public function authenticate(string $authKey, string $merchantName): PaymentInterface
45
    {
46
        $this->authKey = $authKey;
47
        $this->merchantName = $merchantName;
48
49
        return $this;
50
    }
51
52
    /**
53
     * Gets new payment key from Goldenpay.
54
     *
55
     * @param int           $amount
56
     * @param CardType      $cardType
57
     * @param string        $description
58
     * @param Language|null $lang
59
     *
60
     * @throws GoldenpayPaymentKeyException
61
     *
62
     * @return PaymentKey
63
     */
64
    public function payment(int $amount, CardType $cardType, string $description, ?Language $lang = null): PaymentKey
65
    {
66
        $result = $this->request('getPaymentKey', [
67
            'merchantName' => $this->merchantName,
68
            'amount'       => $amount,
69
            'cardType'     => $cardType->getValue(),
70
            'description'  => $description,
71
            'lang'         => $lang ? $lang->getValue() : 'lv',
72
            'hashCode'     => md5($this->authKey . $this->merchantName . $cardType->getValue() . $amount . $description),
73
        ]);
74
75
        if ($result['status']['code'] !== 1) {
76
            throw new GoldenpayPaymentKeyException($result['status']['message'] . '. Code: ' . $result['status']['code']);
77
        }
78
79
        return new PaymentKey(
80
            $result['paymentKey'],
81
            $result['status']['code'],
82
            $result['status']['message']
83
        );
84
    }
85
86
    /**
87
     * Checks result of payment using existing payment key.
88
     *
89
     * @param PaymentKey|string $paymentKey
90
     *
91
     * @return PaymentResult
92
     */
93
    public function result($paymentKey): PaymentResult
94
    {
95
        $paymentKey = $paymentKey instanceof PaymentKey ? $paymentKey->getPaymentKey() : $paymentKey;
96
97
        $result = $this->request('getPaymentResult', [
98
            'payment_key' => $paymentKey,
99
            'hash_code'   => md5($this->authKey . $paymentKey),
100
        ]);
101
102
        return new PaymentResult(
103
            $result,
104
            $result['status']['code'],
105
            $result['status']['message']
106
        );
107
    }
108
109
    /**
110
     * Sends requests to GoldenPay endpoint.
111
     *
112
     * @param string $endpoint
113
     * @param array  $data
114
     *
115
     * @return array
116
     */
117
    private function request(string $endpoint, array $data)
118
    {
119
        if ($endpoint === 'getPaymentResult') {
120
            $response = $this->client->get($endpoint, [
121
                'headers' => ['Accept' => 'application/json'],
122
                'query'   => $data,
123
            ]);
124
        } else {
125
            $response = $this->client->post($endpoint, [
126
                'headers' => ['Accept' => 'application/json', 'Content-Type' => 'application/json'],
127
                'json'    => $data,
128
            ]);
129
        }
130
131
        return json_decode($response->getBody()->getContents(), true);
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\json_decode() has been deprecated: json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

131
        return /** @scrutinizer ignore-deprecated */ json_decode($response->getBody()->getContents(), true);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
132
    }
133
134
    /**
135
     * @return string|null
136
     */
137
    public function getAuthKey(): ?string
138
    {
139
        return $this->authKey;
140
    }
141
142
    /**
143
     * @return string|null
144
     */
145
    public function getMerchantName(): ?string
146
    {
147
        return $this->merchantName;
148
    }
149
}
150