Completed
Push — master ( bb7932...80c2ce )
by Vuong
01:37
created

PaymentClient::setPrivateCertificateFile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 0
cts 4
cp 0
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
crap 2
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
 * @author Vuong Minh <[email protected]>
18
 * @since 1.0
19
 */
20
class PaymentClient extends BasePaymentClient
21
{
22
    /**
23
     * Hằng khai báo kiểu chữ ký `RSA` được dùng khi gọi phương thức [[signature()]] và [[validateSignature()]].
24
     */
25
    const SIGNATURE_RSA = 'RSA';
26
27
    /**
28
     * Hằng khai báo kiểu chữ ký `HMAC` được dùng khi gọi phương thức [[signature()]] và [[validateSignature()]].
29
     */
30
    const SIGNATURE_HMAC = 'HMAC';
31
32
    /**
33
     * Thuộc tính dùng để khai báo `user` kết nối đến Bảo Kim khi tạo [[request()]] ở [[PaymentGateway]].
34
     * Nó do Bảo Kim cấp khi đăng ký tích hợp website.
35
     *
36
     * @var string
37
     */
38
    public $apiUser;
39
40
    /**
41
     * Thuộc tính dùng để khai báo `password` kết nối đến Bảo Kim khi tạo [[request()]] ở [[PaymentGateway]].
42
     * Nó do Bảo Kim cấp khi đăng ký tích hợp website.
43
     *
44
     * @var string
45
     */
46
    public $apiPassword;
47
48
    /**
49
     * Thuộc tính dùng để khai báo `merchant id` kết nối đến Bảo Kim khi tạo [[request()]] ở [[PaymentGateway]].
50
     * Nó do Bảo Kim cấp khi đăng ký tích hợp website.
51
     *
52
     * @var int
53
     */
54
    public $merchantId;
55
56
    /**
57
     * 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.
58
     * Nó chính là email tài khoản Bảo Kim của bạn.
59
     *
60
     * @var string
61
     */
62
    public $merchantEmail;
63
64
    /**
65
     * 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,
66
     * 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.
67
     *
68
     * @var string
69
     */
70
    public $securePassword;
71
72
    /**
73
     * 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.
74
     *
75
     * @var string
76
     */
77
    public $privateCertificate;
78
79
    /**
80
     * Thuộc tính được dùng để kiểm tra chữ ký dữ liệu. Hiện nó chưa được dùng.
81
     *
82
     * @var string
83
     */
84
    public $publicCertificate;
85
86
    /**
87
     * @param $file
88
     * @return bool
89
     */
90
    public function setPublicCertificateFile($file): bool
91
    {
92
        $file = Yii::getAlias($file);
93
        $this->publicCertificate = file_get_contents($file);
94
95
        return true;
96
    }
97
98
    /**
99
     * @param $file
100
     * @return bool
101
     */
102
    public function setPrivateCertificateFile($file): bool
103
    {
104
        $file = Yii::getAlias($file);
105
        $this->privateCertificate = file_get_contents($file);
106
107
        return true;
108
    }
109
110
    /**
111
     * @inheritdoc
112
     * @return object|\yiiviet\payment\DataSignature
113
     * @throws \yii\base\InvalidConfigException
114
     */
115 5
    protected function initDataSignature(string $data, string $type = null): ?\yiiviet\payment\DataSignature
116
    {
117 5
        if ($type === self::SIGNATURE_RSA) {
118
            $config = [
119 2
                'class' => 'yiiviet\payment\RsaDataSignature',
120 2
                'publicCertificate' => $this->publicCertificate,
121 2
                'privateCertificate' => $this->privateCertificate,
122 2
                'openSSLAlgo' => OPENSSL_ALGO_SHA1
123
            ];
124
125 2
            return Yii::createObject($config, [$data]);
126 3
        } elseif ($type === self::SIGNATURE_HMAC) {
127
            $config = [
128 3
                'class' => 'yiiviet\payment\HmacDataSignature',
129 3
                'key' => $this->securePassword,
130 3
                'hmacAlgo' => 'SHA1'
131
            ];
132
133 3
            return Yii::createObject($config, [$data]);
134
        } else {
135
            return null;
136
        }
137
    }
138
}
139