restClient = new Client(); $this->requestUrl = 'https://boa.kuveytturk.com.tr/sanalposservice/Home'; if ($paymentInitializeParam['env'] == 'test') { $this->requestUrl = 'https://boatest.kuveytturk.com.tr/boa.virtualpos.services/Home'; } $this->customerId = $paymentInitializeParam['customerId']; $this->merchantId = $paymentInitializeParam['merchantId']; $this->userName = $paymentInitializeParam['userName']; $this->password = $paymentInitializeParam['password']; $this->currencyCodeMapping = [ 'TRY' => '0949', 'USD' => '0840', 'EUR' => '0978', ]; } protected function post($param) { $getResponse = []; $param['logDebug'] = fillOnUndefined($param, 'logDebug', false); try { $paymentRequest = $this->restClient->post($this->requestUrl . '/' . $param['method'], [ 'headers' => [ 'Content-Type' => 'application/xml; charset=UTF8', ], 'body' => $param['payload'] ]); $getResponseBody = $paymentRequest->getBody(); $getResponseXmlBase = $getResponseBody->getContents(); if (!$getResponseXmlBase) { throw new ApiErrorException('Payment Initialize not processing.'); } else { $response = [ 'status' => true, 'data' => $getResponseXmlBase ]; } if ($param['logDebug']) { Log::debug(json_encode($param['param'])); Log::debug($param['param']); Log::debug($getResponse); } } catch (ApiErrorException | Exception | ClientException | ServerException $e) { $message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage(); Log::debug($message); $response['message'] = $e->getMessage(); } return $response; } public function threeDModelPayGate($param = []) { try { $hashData = null; $param['amount'] = (int)(floatval($param['amount']) * 100); $hashedPassword = base64_encode(sha1($this->password, "ISO-8859-9")); $hashData = base64_encode(sha1($this->merchantId . $param['orderId'] . $param['amount'] . $param['paymentCheckUrl'] . $param['paymentCheckUrl'] . $this->userName . $hashedPassword, "ISO-8859-9")); $requestParam['method'] = 'ThreeDModelPayGate'; $requestPayload = new \SimpleXMLElement(''); $currencyCodeBank = isset($this->currencyCodeMapping[$param['currencyCode']]) ? $this->currencyCodeMapping[$param['currencyCode']] : '0949'; $requestPayload->addChild('APIVersion', '1.0.0'); $requestPayload->addChild('OkUrl', $param['paymentCheckUrl']); $requestPayload->addChild('FailUrl', $param['paymentCheckUrl']); $requestPayload->addChild('HashData', $hashData); $requestPayload->addChild('MerchantId', $this->merchantId); $requestPayload->addChild('CustomerId', $this->customerId); $requestPayload->addChild('UserName', $this->userName); $requestPayload->addChild('CardNumber', $param['creditCard']['number']); $requestPayload->addChild('CardExpireDateYear', mb_substr($param['creditCard']['expiryYear'], 2, 2)); $requestPayload->addChild('CardExpireDateMonth', $param['creditCard']['expiryMonth']); $requestPayload->addChild('CardCVV2', $param['creditCard']['cvv']); $requestPayload->addChild('CardHolderName', $param['creditCard']['holderName']); //$requestPayload->addChild('CardType', null); $requestPayload->addChild('BatchID', 0); $requestPayload->addChild('TransactionType', 'Sale'); $requestPayload->addChild('InstallmentCount', $param['creditCard']['installment']); $requestPayload->addChild('Amount', $param['amount']); $requestPayload->addChild('DisplayAmount', $param['amount']); $requestPayload->addChild('CurrencyCode', $currencyCodeBank); $requestPayload->addChild('MerchantOrderId', $param['orderId']); $requestPayload->addChild('TransactionSecurity', 3); $requestParam['payload'] = $requestPayload->asXML(); $paymentRequest = $this->post($requestParam); if (!$paymentRequest['status']) { throw new ApiErrorException($paymentRequest['message']); } $response = [ 'status' => true, 'data' => $paymentRequest['data'] ]; } catch (ApiErrorException | Exception $e) { $response = ['status' => false, 'message' => $e->getMessage()]; } if (isset($getResponseData)) { $response['serviceResponse'] = $paymentRequest; } return $response; } public function checkPaymentStatus($paymentCode, $param = []) { $response = ['status' => false, 'message' => '']; $requestContent = null; $paymentRequest = []; try { $requestContent = urldecode($param["AuthenticationResponse"]); $requestContent = json_decode(json_encode(simplexml_load_string($requestContent)), 1); if ($requestContent['ResponseCode'] != "00") { $errorMessage = $requestContent['ResponseCode'] . ': ' . $requestContent['ResponseMessage']; $paymentRequest['serviceResponse'] = $requestContent; throw new ApiErrorException($errorMessage); } $paymentCheckParam = [ 'merchantOrderId' => isset($requestContent['VPosMessage']['MerchantOrderId']) ? $requestContent['VPosMessage']['MerchantOrderId'] : null, 'amount' => isset($requestContent['VPosMessage']['Amount']) ? $requestContent['VPosMessage']['Amount'] : null, 'md' => isset($requestContent['MD']) ? $requestContent['MD'] : null, ]; $hashData = null; //$param['amount'] = (int)(floatval($param['amount']) * 100); $hashedPassword = base64_encode(sha1($this->password, "ISO-8859-9")); $hashData = base64_encode(sha1($this->merchantId . $paymentCheckParam['merchantOrderId'] . $paymentCheckParam['amount'] . $this->userName . $hashedPassword, "ISO-8859-9")); $requestParam['method'] = 'ThreeDModelProvisionGate'; $requestPayload = new \SimpleXMLElement(''); $requestPayload->addChild('APIVersion', '1.0.0'); $requestPayload->addChild('HashData', $hashData); $requestPayload->addChild('MerchantId', $this->merchantId); $requestPayload->addChild('CustomerId', $this->customerId); $requestPayload->addChild('UserName', $this->userName); $requestPayload->addChild('TransactionType', 'Sale'); $requestPayload->addChild('InstallmentCount', 1); $requestPayload->addChild('CurrencyCode', '0949'); $requestPayload->addChild('Amount', $paymentCheckParam['amount']); $requestPayload->addChild('MerchantOrderId', $paymentCheckParam['merchantOrderId']); $requestPayload->addChild('TransactionSecurity', 3); $kuveytTurkVPosAdditionalData = $requestPayload->addChild('KuveytTurkVPosAdditionalData'); $additionalData = $kuveytTurkVPosAdditionalData->addChild('AdditionalData'); $additionalData->addChild('Key', 'MD'); $additionalData->addChild('Data', $paymentCheckParam['md']); $requestParam['payload'] = $requestPayload->asXML(); $paymentRequest = $this->post($requestParam); if (!$paymentRequest['status']) { throw new ApiErrorException($paymentRequest['message']); } $requestContent = simplexml_load_string($paymentRequest['data']); $requestContent = json_decode(json_encode($requestContent), 1); $paymentRequest['serviceResponse'] = $requestContent; if ($requestContent['ResponseCode'] != "00") { $errorMessage = $requestContent['ResponseCode'] . ': ' . $requestContent['ResponseMessage']; throw new ApiErrorException($errorMessage); } $response = [ 'status' => true, 'data' => $requestContent ]; } catch (ApiErrorException | Exception $e) { $response = ['status' => false, 'message' => $e->getMessage()]; } if (isset($paymentRequest['serviceResponse'])) { $response['serviceResponse'] = $paymentRequest['serviceResponse']; } return $response; } }