Skip to content

Commit 97b3bb2

Browse files
Refactored AllInOne message.
1 parent 197613c commit 97b3bb2

File tree

4 files changed

+136
-106
lines changed

4 files changed

+136
-106
lines changed

src/Message/AllInOne/AbstractRequest.php

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
namespace Omnipay\MoMo\Message\AllInOne;
99

10-
use InvalidArgumentException;
11-
use Omnipay\MoMo\Support\Signature;
1210
use Omnipay\MoMo\Message\AbstractRequest as BaseAbstractRequest;
1311

1412
/**
@@ -17,6 +15,7 @@
1715
*/
1816
abstract class AbstractRequest extends BaseAbstractRequest
1917
{
18+
use Concerns\RequestSignature;
2019
use Concerns\RequestParameters;
2120

2221
/**
@@ -33,9 +32,9 @@ abstract class AbstractRequest extends BaseAbstractRequest
3332
public function getData(): array
3433
{
3534
$parameters = $this->getParameters();
36-
$this->validate('partnerCode', 'accessKey', 'requestId', 'orderId', 'secretKey', 'requestType');
37-
$parameters['signature'] = $this->generateSignature($parameters['requestType']);
3835
unset($parameters['secretKey']);
36+
$this->validate('partnerCode', 'accessKey', 'requestId', 'orderId', 'secretKey', 'requestType');
37+
$parameters['signature'] = $this->generateSignature();
3938

4039
return $parameters;
4140
}
@@ -54,47 +53,4 @@ public function sendData($data)
5453

5554
return $this->response = new $responseClass($this, $responseData);
5655
}
57-
58-
/**
59-
* Trả về chữ ký điện tử gửi đến MoMo dựa theo `$requestType` truyền vào.
60-
*
61-
* @param string $requestType
62-
* @return string
63-
*/
64-
protected function generateSignature(string $requestType): string
65-
{
66-
$data = [];
67-
$signature = new Signature($this->getParameter('secretKey'));
68-
69-
foreach ($this->getSignatureParameters($requestType) as $parameter) {
70-
$data[$parameter] = $this->getParameter($parameter);
71-
}
72-
73-
return $signature->generate($data);
74-
}
75-
76-
/**
77-
* Trả về danh sách param dùng để tạo chữ ký số theo `$requestType`.
78-
*
79-
* @param string $requestType
80-
* @return array
81-
*/
82-
protected function getSignatureParameters(string $requestType): array
83-
{
84-
switch ($requestType) {
85-
case 'captureMoMoWallet':
86-
return [
87-
'partnerCode', 'accessKey', 'requestId', 'amount', 'orderId', 'orderInfo', 'returnUrl', 'notifyUrl',
88-
'extraData',
89-
];
90-
case 'transactionStatus':
91-
case 'refundMoMoWallet':
92-
case 'refundStatus':
93-
return [
94-
'partnerCode', 'accessKey', 'requestId', 'orderId', 'requestType',
95-
];
96-
default:
97-
throw new InvalidArgumentException(sprintf('Request type: (%s) is not valid!', $requestType));
98-
}
99-
}
10056
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
/**
3+
* @link https://github.com/phpviet/omnipay-momo
4+
* @copyright (c) PHP Viet
5+
* @license [MIT](http://www.opensource.org/licenses/MIT)
6+
*/
7+
8+
namespace Omnipay\MoMo\Message\AllInOne\Concerns;
9+
10+
use InvalidArgumentException;
11+
use Omnipay\MoMo\Support\Signature;
12+
13+
/**
14+
* @author Vuong Minh <[email protected]>
15+
* @since 1.0.0
16+
*/
17+
trait RequestSignature
18+
{
19+
/**
20+
* Trả về chữ ký điện tử gửi đến MoMo dựa theo `$requestType` truyền vào.
21+
*
22+
* @return string
23+
*/
24+
protected function generateSignature(): string
25+
{
26+
$data = [];
27+
$signature = new Signature($this->getParameter('secretKey'));
28+
29+
foreach ($this->getSignatureParameters() as $parameter) {
30+
$data[$parameter] = $this->getParameter($parameter);
31+
}
32+
33+
return $signature->generate($data);
34+
}
35+
36+
/**
37+
* Trả về danh sách param dùng để tạo chữ ký số theo `$requestType`.
38+
*
39+
* @return array
40+
*/
41+
protected function getSignatureParameters(): array
42+
{
43+
switch ($this->getParameter('requestType')) {
44+
case 'captureMoMoWallet':
45+
return [
46+
'partnerCode', 'accessKey', 'requestId', 'amount', 'orderId', 'orderInfo', 'returnUrl', 'notifyUrl',
47+
'extraData',
48+
];
49+
case 'transactionStatus':
50+
case 'refundMoMoWallet':
51+
case 'refundStatus':
52+
return [
53+
'partnerCode', 'accessKey', 'requestId', 'orderId', 'requestType',
54+
];
55+
default:
56+
throw new InvalidArgumentException(sprintf('Request type: (%s) is not valid!', $requestType));
57+
}
58+
}
59+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
/**
3+
* @link https://github.com/phpviet/omnipay-momo
4+
* @copyright (c) PHP Viet
5+
* @license [MIT](http://www.opensource.org/licenses/MIT)
6+
*/
7+
8+
namespace Omnipay\MoMo\Message\AllInOne\Concerns;
9+
10+
use Omnipay\MoMo\Support\Signature;
11+
use Omnipay\Common\Exception\InvalidResponseException;
12+
13+
/**
14+
* @author Vuong Minh <[email protected]>
15+
* @since 1.0.0
16+
*/
17+
trait ResponseSignatureValidation
18+
{
19+
/**
20+
* Kiểm tra tính hợp lệ của dữ liệu do MoMo phản hồi.
21+
*
22+
* @throws InvalidResponseException
23+
*/
24+
protected function validateSignature(): void
25+
{
26+
$data = [];
27+
$requestParameters = $this->getRequest()->getParameters();
28+
$signature = new Signature($requestParameters['secretKey']);
29+
30+
foreach ($this->getSignatureParameters() as $param) {
31+
$data[$param] = $this->data[$param];
32+
}
33+
34+
if (! $signature->validate($data, $this->data['signature'])) {
35+
36+
throw new InvalidResponseException(sprintf('Data signature response from MoMo is invalid!'));
37+
}
38+
}
39+
40+
/**
41+
* Trả về danh sách các param data đã dùng để tạo chữ ký dữ liệu theo requestType truyền vào.
42+
*
43+
* @return array
44+
*/
45+
protected function getSignatureParameters(): array
46+
{
47+
switch ($this->data['requestType']) {
48+
case 'captureMoMoWallet':
49+
return [
50+
'requestId', 'orderId', 'message', 'localMessage', 'payUrl', 'errorCode', 'requestType',
51+
];
52+
case 'transactionStatus':
53+
return [
54+
'partnerCode', 'accessKey', 'requestId', 'orderId', 'errorCode', 'transId', 'amount', 'message',
55+
'localMessage', 'requestType', 'payType', 'extraData',
56+
];
57+
case 'refundMoMoWallet':
58+
return [
59+
'partnerCode', 'accessKey', 'requestId', 'orderId', 'errorCode', 'transId', 'message',
60+
'localMessage', 'requestType',
61+
];
62+
case 'refundStatus':
63+
return [
64+
'partnerCode', 'accessKey', 'requestId', 'orderId', 'errorCode', 'transId', 'amount', 'message',
65+
'localMessage', 'requestType',
66+
];
67+
default:
68+
return [];
69+
}
70+
}
71+
}

src/Message/AllInOne/Response.php

Lines changed: 3 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77

88
namespace Omnipay\MoMo\Message\AllInOne;
99

10-
use Omnipay\MoMo\Support\Signature;
1110
use Omnipay\Common\Message\AbstractResponse;
1211
use Omnipay\Common\Message\RequestInterface;
13-
use Omnipay\Common\Exception\InvalidResponseException;
1412

1513
/**
1614
* @author Vuong Minh <[email protected]>
1715
* @since 1.0.0
1816
*/
1917
class Response extends AbstractResponse
2018
{
19+
use Concerns\ResponseSignatureValidation;
20+
2121
/**
2222
* Khởi tạo đối tượng Response.
2323
*
@@ -30,9 +30,7 @@ public function __construct(RequestInterface $request, $data)
3030
parent::__construct($request, $data);
3131

3232
if ($this->isSuccessful()) {
33-
$parameters = $request->getParameters();
34-
35-
$this->validateSignature($parameters['secretKey']);
33+
$this->validateSignature();
3634
}
3735
}
3836

@@ -85,58 +83,4 @@ public function getTransactionReference(): ?string
8583
{
8684
return $this->data['transId'] ?? null;
8785
}
88-
89-
/**
90-
* Kiểm tra tính hợp lệ của dữ liệu do MoMo phản hồi.
91-
*
92-
* @param string $secretKey
93-
* @throws InvalidResponseException
94-
*/
95-
protected function validateSignature(string $secretKey): void
96-
{
97-
$data = [];
98-
$signature = new Signature($secretKey);
99-
100-
foreach ($this->getSignatureParameters($this->data['requestType']) as $param) {
101-
$data[$param] = $this->data[$param];
102-
}
103-
104-
if (! $signature->validate($data, $this->data['signature'])) {
105-
106-
throw new InvalidResponseException(sprintf('Data signature response from MoMo is invalid!'));
107-
}
108-
}
109-
110-
/**
111-
* Trả về danh sách các param data đã dùng để tạo chữ ký dữ liệu theo requestType truyền vào.
112-
*
113-
* @param string $requestType
114-
* @return array
115-
*/
116-
protected function getSignatureParameters(string $requestType): array
117-
{
118-
switch ($requestType) {
119-
case 'captureMoMoWallet':
120-
return [
121-
'requestId', 'orderId', 'message', 'localMessage', 'payUrl', 'errorCode', 'requestType',
122-
];
123-
case 'transactionStatus':
124-
return [
125-
'partnerCode', 'accessKey', 'requestId', 'orderId', 'errorCode', 'transId', 'amount', 'message',
126-
'localMessage', 'requestType', 'payType', 'extraData',
127-
];
128-
case 'refundMoMoWallet':
129-
return [
130-
'partnerCode', 'accessKey', 'requestId', 'orderId', 'errorCode', 'transId', 'message',
131-
'localMessage', 'requestType',
132-
];
133-
case 'refundStatus':
134-
return [
135-
'partnerCode', 'accessKey', 'requestId', 'orderId', 'errorCode', 'transId', 'amount', 'message',
136-
'localMessage', 'requestType',
137-
];
138-
default:
139-
return [];
140-
}
141-
}
14286
}

0 commit comments

Comments
 (0)