public function send(ApiClient $apiClient, array $data) : PaymentResponse { if (array_key_exists('resultCode', $data) && is_numeric($data['resultCode'])) { $data['resultCode'] = (int) $data['resultCode']; } if (array_key_exists('paymentStatus', $data) && is_numeric($data['paymentStatus'])) { $data['paymentStatus'] = (int) $data['paymentStatus']; } $response = $apiClient->createResponseByData($data, new SignatureDataFormatter(['payId' => null, 'dttm' => null, 'resultCode' => null, 'resultMessage' => null, 'paymentStatus' => null, 'authCode' => null, 'merchantData' => null])); $data = $response->getData(); return new PaymentResponse($data['payId'], DateTimeImmutable::createFromFormat('YmdHis', $data['dttm']), new ResultCode($data['resultCode']), $data['resultMessage'], isset($data['paymentStatus']) ? new PaymentStatus($data['paymentStatus']) : null, $data['authCode'] ?? null, isset($data['merchantData']) ? base64_decode($data['merchantData']) : null); }
public function testCreateResponseByData() { $data = ['signature' => 'abc', 'foo' => 123, 'bar' => 456]; $cryptoService = $this->getMockBuilder(CryptoService::class)->disableOriginalConstructor()->getMock(); $cryptoService->expects(self::any())->method('verifyData')->willReturn(true); $apiClientDriver = $this->getMockBuilder(ApiClientDriver::class)->getMock(); /** @var CryptoService $cryptoService */ /** @var ApiClientDriver $apiClientDriver */ $apiClient = new ApiClient($apiClientDriver, $cryptoService); $response = $apiClient->createResponseByData($data, new SignatureDataFormatter([])); unset($data['signature']); $this->assertInstanceOf(Response::class, $response); $this->assertSame(ResponseCode::S200_OK, $response->getResponseCode()->getValue()); $this->assertEquals([], $response->getHeaders()); $this->assertEquals($data, $response->getData()); }