Completed
Push — master ( ac749f...8181ea )
by Vuong
01:54
created

PaymentClient::initDataSignature()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 21
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 3.0052

Importance

Changes 0
Metric Value
dl 0
loc 21
ccs 11
cts 12
cp 0.9167
rs 9.3142
c 0
b 0
f 0
cc 3
eloc 15
nc 3
nop 2
crap 3.0052
1
<?php
2
/**
3
 * @link https://github.com/yiiviet/yii2-payment
4
 * @copyright Copyright (c) 2017 Yii Viet
5
 * @license [New BSD License](http://www.opensource.org/licenses/bsd-license.php)
6
 */
7
8
namespace yiiviet\payment\baokim;
9
10
use Yii;
11
12
use yiiviet\payment\BasePaymentClient;
13
14
/**
15
 * Lớp PaymentClient chứa các thuộc tính dùng để hổ trợ [[PaymentGateway]] kết nối đến Bảo Kim.
16
 *
17
 * @method PaymentGateway getGateway()
18
 * @property PaymentGateway $gateway
19
 *
20
 * @author Vuong Minh <[email protected]>
21
 * @since 1.0
22
 */
23
class PaymentClient extends BasePaymentClient
24
{
25
    /**
26
     * Hằng khai báo kiểu chữ ký `RSA` được dùng khi gọi phương thức [[signature()]] và [[validateSignature()]].
27
     */
28
    const SIGNATURE_RSA = 'RSA';
29
30
    /**
31
     * Hằng khai báo kiểu chữ ký `HMAC` được dùng khi gọi phương thức [[signature()]] và [[validateSignature()]].
32
     */
33
    const SIGNATURE_HMAC = 'HMAC';
34
35
    /**
36
     * Thuộc tính dùng để khai báo `user` kết nối đến Bảo Kim khi tạo [[request()]] ở [[PaymentGateway]].
37
     * Nó do Bảo Kim cấp khi đăng ký tích hợp website.
38
     *
39
     * @var string
40
     */
41
    public $apiUser;
42
43
    /**
44
     * Thuộc tính dùng để khai báo `password` kết nối đến Bảo Kim khi tạo [[request()]] ở [[PaymentGateway]].
45
     * Nó do Bảo Kim cấp khi đăng ký tích hợp website.
46
     *
47
     * @var string
48
     */
49
    public $apiPassword;
50
51
    /**
52
     * Thuộc tính dùng để khai báo `merchant id` kết nối đến Bảo Kim khi tạo [[request()]] ở [[PaymentGateway]].
53
     * Nó do Bảo Kim cấp khi đăng ký tích hợp website.
54
     *
55
     * @var int
56
     */
57
    public $merchantId;
58
59
    /**
60
     * Thuộc tính thường được dùng để bổ sung email tài khoản nhận tiền hoặc cần lấy thông tin khi `end-user` không cung cấp thông tin.
61
     * Nó chính là email tài khoản Bảo Kim của bạn.
62
     *
63
     * @var string
64
     */
65
    public $merchantEmail;
66
67
    /**
68
     * Thuộc tính được dùng để tạo và kiểm tra chữ ký dữ liệu khi truy vấn thông tin giao dịch,
69
     * tạo thanh toán theo phương thức Bảo Kim, xác minh BPN (Bao Kim Payment Notification), xác minh success url.
70
     *
71
     * @var string
72
     */
73
    public $securePassword;
74
75
    /**
76
     * Thuộc tính được dùng để tạo chữ ký dữ liệu khi thanh toán theo phương thức PRO, lấy thông tin merchant.
77
     *
78
     * @var string
79
     */
80
    public $privateCertificate;
81
82
    /**
83
     * Thuộc tính được dùng để kiểm tra chữ ký dữ liệu. Hiện nó chưa được dùng.
84
     *
85
     * @var string
86
     */
87
    public $publicCertificate;
88
89
    /**
90
     * @param $file
91
     * @return bool
92
     */
93
    public function setPublicCertificateFile($file): bool
94
    {
95
        $file = Yii::getAlias($file);
96
        $this->publicCertificate = file_get_contents($file);
97
98
        return true;
99
    }
100
101
    /**
102
     * @param $file
103
     * @return bool
104
     */
105
    public function setPrivateCertificateFile($file): bool
106
    {
107
        $file = Yii::getAlias($file);
108
        $this->privateCertificate = file_get_contents($file);
109
110
        return true;
111
    }
112
113
    /**
114
     * @inheritdoc
115
     * @return object|\yiiviet\payment\DataSignature
116
     * @throws \yii\base\InvalidConfigException
117
     */
118 5
    protected function initDataSignature(string $data, string $type = null): ?\yiiviet\payment\DataSignature
119
    {
120 5
        if ($type === self::SIGNATURE_RSA) {
121
            $config = [
122 2
                'class' => 'yiiviet\payment\RsaDataSignature',
123 2
                'publicCertificate' => $this->publicCertificate ?? false,
124 2
                'privateCertificate' => $this->privateCertificate,
125 2
                'openSSLAlgo' => OPENSSL_ALGO_SHA1
126
            ];
127 3
        } elseif ($type === self::SIGNATURE_HMAC) {
128
            $config = [
129 3
                'class' => 'yiiviet\payment\HmacDataSignature',
130 3
                'key' => $this->securePassword,
131 3
                'hmacAlgo' => 'SHA1'
132
            ];
133
        } else {
134
            return null;
135
        }
136
137 5
        return Yii::createObject($config, [$data]);
138
    }
139
}
140