Skip to content

Commit 76006b5

Browse files
committed
ResponseType JSON
1 parent dfdedeb commit 76006b5

File tree

4 files changed

+68
-10
lines changed

4 files changed

+68
-10
lines changed

src/Message/VoidRequest.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,22 @@ public function sendData($data)
8686
'MerchantID_' => $this->getMerchantID(),
8787
'PostData_' => $this->encrypt($data),
8888
]));
89-
var_dump((string) $response->getBody());
9089

91-
$result = [];
92-
parse_str(trim((string) $response->getBody()), $result);
90+
$body = trim((string) $response->getBody());
9391

94-
if (! hash_equals($result['CheckCode'], $this->checkCode($result))) {
95-
throw new InvalidResponseException('Incorrect CheckCode');
92+
$result = json_decode($body, true);
93+
94+
if (json_last_error() === JSON_ERROR_NONE) {
95+
if (! hash_equals($result['Result']['CheckCode'], $this->checkCode($result['Result']))) {
96+
throw new InvalidResponseException('Incorrect CheckCode');
97+
}
98+
} else {
99+
$result = [];
100+
parse_str(trim((string) $response->getBody()), $result);
101+
102+
if (! hash_equals($result['CheckCode'], $this->checkCode($result))) {
103+
throw new InvalidResponseException('Incorrect CheckCode');
104+
}
96105
}
97106

98107
return $this->response = new VoidResponse($this, $result);

src/Message/VoidResponse.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@ public function getMessage()
1919
return $this->data['Message'];
2020
}
2121

22-
public function getTransactionId()
22+
public function getTransactionReference()
2323
{
24-
return $this->data["MerchantOrderNo"];
24+
return array_key_exists('Result', $this->data)
25+
? $this->data['Result']['TradeNo']
26+
: $this->data['TradeNo'];
2527
}
2628

27-
public function getTransactionReference()
29+
public function getTransactionId()
2830
{
29-
return $this->data["TradeNo"];
31+
return array_key_exists('Result', $this->data)
32+
? $this->data['Result']['MerchantOrderNo']
33+
: $this->data['MerchantOrderNo'];
3034
}
3135
}

tests/Message/VoidRequestTest.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
class VoidRequestTest extends TestCase
99
{
10-
public function testGetData(): void
10+
public function testSendData(): void
1111
{
1212
$timestamp = 1641348593;
1313
$request = new VoidRequest($this->getHttpClient(), $this->getHttpRequest());
@@ -30,6 +30,7 @@ public function testGetData(): void
3030
]));
3131

3232
$response = $request->send();
33+
3334
self::assertTrue($response->isSuccessful());
3435
self::assertEquals('SUCCESS', $response->getCode());
3536
self::assertEquals('放棄授權成功', $response->getMessage());
@@ -42,4 +43,35 @@ public function testGetData(): void
4243
$postData['PostData_']
4344
);
4445
}
46+
47+
public function testSendDataForJSON(): void
48+
{
49+
$timestamp = 1641348593;
50+
$request = new VoidRequest($this->getHttpClient(), $this->getHttpRequest());
51+
52+
$this->setMockHttpResponse('VoidSuccessJSON.txt');
53+
54+
$request->initialize(array_merge([
55+
'HashKey' => 'Fs5cX1TGqYM2PpdbE14a9H83YQSQF5jn',
56+
'HashIV' => 'C6AcmfqJILwgnhIP',
57+
'MerchantID' => 'MS127874575',
58+
'testMode' => true,
59+
], [
60+
'RespondType' => 'JSON',
61+
'Version' => '1.0',
62+
'TimeStamp' => $timestamp,
63+
'Amt' => '30',
64+
'MerchantOrderNo' => "Vanespl_ec_".$timestamp,
65+
'IndexType' => '1',
66+
'PayerEmail' => 'tek.chen@ezpay.com.tw',
67+
]));
68+
69+
$response = $request->send();
70+
71+
self::assertTrue($response->isSuccessful());
72+
self::assertEquals('SUCCESS', $response->getCode());
73+
self::assertEquals('放棄授權成功', $response->getMessage());
74+
self::assertEquals('Vanespl_ec_1641348593', $response->getTransactionId());
75+
self::assertEquals('23111221191660146', $response->getTransactionReference());
76+
}
4577
}

tests/Mock/VoidSuccessJSON.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
HTTP/1.1 200 OK
2+
Content-Type: text/html; charset=UTF-8
3+
Strict-Transport-Security: max-age=63072000
4+
X-Akamai-Transformed: 9 234 0 pmb=mRUM,1
5+
Expires: Sun, 12 Nov 2023 13:33:03 GMT
6+
Cache-Control: max-age=0, no-cache, no-store
7+
Pragma: no-cache
8+
Date: Sun, 12 Nov 2023 13:33:03 GMT
9+
Content-Length: 234
10+
Connection: keep-alive
11+
Server-Timing: cdn-cache; desc=MISS, edge; dur=55, origin; dur=51, ak_p; desc="1699795982548_1752377015_139633467_10571_2669_5_828_-";dur=1
12+
13+
{"Status":"SUCCESS","Message":"\u653e\u68c4\u6388\u6b0a\u6210\u529f","Result":{"MerchantID":"MS127874575","Amt":30,"MerchantOrderNo":"Vanespl_ec_1641348593","TradeNo":"23111221191660146","CheckCode":"A71CAB190914DD9432C49B49AA71A5A291EFFFBFFE149417818C0E04D3BEB40B"}}

0 commit comments

Comments
 (0)