· 5 years ago · Nov 11, 2020, 09:38 AM
1<?php
2
3declare(strict_types=1);
4
5namespace app\modules\novaPay\services;
6
7use GuzzleHttp\Client;
8use Response;
9use yii\helpers\Json;
10
11class NovaPayService
12{
13 private $privateKey = <<<EOD
14-----BEGIN RSA PRIVATE KEY-----
15MIIEowIBAAKCAQEA7YQwYDqNbDIbUXZL2HYvZX6wi59DgsMlYjwpoSgHvn0RTnWl
16/uR2sIJ9tquYh5Ya+TtUhzrc0N6mZPTLUuyK4qKq2NJaG2Xdr2M5LhMjF46llWkD
17qMW/CcMdVTTE4b1FxOOXURNmZ7nWCchuiVU9nm0K5qYAQpPJFzwg9uDljYgcMp3N
189L1WaiyzIqJqL4R9L39j2t4yOUb4m44xyjujGViHm5lQBNklkOcsxMlb0T3AVNcA
19+KckSl32TdvvmSx9BwzK4SDqQAR8MtKA4hbeA3KGCflRlJKv5KcCpPOOzaoUlaTN
20OLmJIhl0/VjpsKqLNMQOyRSkpRVCFhgp6sO/ewIDAQABAoIBAEBaqbTZCIqBRQ+c
21as56rzrjybf67hLXByEHxgvJSdfeETtd+x0GD/ahVKiS8+AA1swivDNrynq5aQI/
22pXuRZcwkYQAgdpOn1Rn5W3vVaZOvbcP+0SQAeFOPzznP82xqmSXQuKYaCIwgORMr
23gG+rbeeoCeUWo0lmu3yVKSVbKDdhXQqQB0EiC1rZoEKr9iKOAS5Hvi7pU/bxpH3a
24xEGh8ov8E89UtubiIL+LhqsN5dVgowWiaPbA945z497VgjAu+/I2jQ6HhuyPNhK1
25SMa0LExXN5xmzF3WJ8ofVMS/hJbLYWgidfUi+MYCgm3W1YtpnNFBKDiDa83cEWqo
26r5/GJYECgYEA9w9yXkAsUe3c3Qw1lGSZJNzSlbwCKA4wMaiLhsZWfyLrkzzQnY+t
27tu+5Tfa3EU3bLof3juwSBSVwYcb3ZJWGeVURYQwO3ZirZQ3xxEQTI5FTCuJRPMsf
288oiq6NxgZrK3NdtmtecH6+IvrO/J3UPKc8a+iop3zR2tTU4rs2jAbMECgYEA9hxV
29yAGXZavNHfrqIn9NCZLySaYrMKSZj36xCcksHK7do77OmsqAp8wQuxYIPoABNO/8
30bd2ry33b8Zd3dv5iRI3GMmmrxQ7yDviKeUptKKBZsm9CWEcGnmNOia+ZyJbRl9Fp
31jnrtUNOCQxwz144eTAKLV2JUD6Kgfr1ee1EDbzsCgYEA7Q0zLV/hppLWUno+hq2n
32i4kdvXHxl8FVWLBhf+WaZM56voGhoSyU/2wwnq/Uo5PSdGkdjVLRT4LGu+qOwUH/
33DzgiPr21HcY43fNtQGYY/w2XYmAYln5HnwynAFtDXAaqZ9CmUm7kWN5j5EkHpXhA
34LqpJdOC7ZmHNQNl6cOBXkYECgYA7Qi9VbSyrCmblJRljHQvLllpIaX5UxA1Fg9fU
355197uI8dckAE/WVlAbm1kmSByAiCWpaJTaqj4LYowbO+LxoyL4DdepwlYqfd+vI8
36qjMGaTWvxSJQZyms0XSDqoh4x/fHemDUMb0ajRL8XboN2OZqnuI2NDLRYPMMEUTC
37pIsTKQKBgGqbsr+cn+Ny2cPO8KCx1y6WWrT2X5k286rjAMGxNNG/aNqejpTixAaJ
38dA8rov0FcJ03MOhw69XYxkVGpLqWhtMjiWSYuHJBSspvp0QcD9nQykXDLfO7FeeA
39p8WexL0FZSkNlkMbcpMI6U0g51cwacZeGA3qXoKWzWfz2Brmom90
40-----END RSA PRIVATE KEY-----
41EOD;
42
43 private $novaPay;
44
45 public function __construct()
46 {
47 $data = [
48 "merchant_id"=>1,
49 "client_first_name" => "Иванов",
50 "client_last_name" => "Иван",
51 "client_patronymic"=> "Иванович",
52 "client_phone"=>"+380982850654",
53 "callback_url"=>"https://028af7cfd26e.ngrok.io/nova-pay",
54 ];
55 $xSign = '';
56 openssl_sign(Json::encode($data), $xSign, $this->privateKey, OPENSSL_ALGO_SHA1);
57 $xSign = base64_encode($xSign);
58
59 $this->novaPay = new Client([
60 'base_uri' => 'https://api-qecom.novapay.ua/v1/',
61 'headers' => [
62 'Accept' => 'application/json',
63 'x-sign' => $xSign,
64 ],
65 ]);
66 }
67
68 /**
69 * @param string $uri
70 * @param array $data
71 * @param string $type
72 * @param string $xSign
73 *
74 * @return array
75 * @throws \Exception
76 */
77 public function request(
78 string $uri,
79 array $data = [],
80 string $type = 'POST'
81 ): array {
82 try {
83 $response = $this->novaPay->request(
84 $type,
85 $uri,
86 [
87 'body' => Json::encode($data),
88 ]
89 );
90
91 $content = $response->getBody()->getContents();
92 if ($response->getStatusCode() !== Response::HTTP_OK) {
93 throw new \Exception(
94 'Ошибка запроса к API NovaPay'
95 . PHP_EOL
96 . $content
97 );
98 }
99
100 return Json::decode($content ?? '');
101 } catch (\Exception $e) {
102 throw new \Exception(
103 'Ошибка запроса к API NovaPay'
104 . PHP_EOL
105 . $e->getMessage()
106 );
107 }
108 }
109
110 public function createSession()
111 {
112 $data = [
113 "merchant_id"=>1,
114 "client_first_name" => "Иванов",
115 "client_last_name" => "Иван",
116 "client_patronymic"=> "Иванович",
117 "client_phone"=>"+380982850654",
118 "metadata"=>["lol"=>"kek"],
119 "callback_url"=>"http://test.com",
120 ];
121
122 $resp = $this->request('session', $data);
123 }
124}