public function getTransaction(User $user, Product $product) { $orderId = uniqid(); $queryParameters = array('uniqueId' => $orderId, 'user' => $user->getUsername()); $transactionRedirectUrl = $this->router->generate('webservice.purchase.success', $queryParameters, UrlGeneratorInterface::ABSOLUTE_URL); $transactionCancelUrl = $this->router->generate('webservice.purchase.cancel', $queryParameters, UrlGeneratorInterface::ABSOLUTE_URL); $userInfo = json_decode($user->getUserInfoData()); $productArray = array('name' => $product->getProductName(), 'price' => "MYR " . $product->getPricing(), 'vatRate' => (string) $product->getVatPercentage(), 'sku' => $product->getSku(), 'timeSpec' => $product->getTimeSpec()); $parameters = array("orderId" => $orderId, "purchaseDescription" => "Product description", "amount" => "MYR " . $product->getPricing(), 'vatRate' => (string) $product->getVatPercentage(), 'merchantName' => $this->clientId, 'connectId' => $userInfo->sub, "successRedirect" => $transactionRedirectUrl, 'allowedPaymentMethods' => ['DOB'], 'cancelRedirect' => $transactionCancelUrl, "products" => [$productArray]); $parameterString = json_encode($parameters); $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_URL => $this->getTransactionUrl(), CURLOPT_HTTPHEADER => $this->prepareHeaders(array(Headers::CONTENT_TYPE => MimeType::APPLICATION_JSON, Headers::ACCEPT => MimeType::APPLICATION_JSON, Headers::Content_Length => strlen($parameterString), Headers::AUTHORIZATION => "Bearer " . $this->getAccessToken($user))), CURLOPT_POSTFIELDS => $parameterString, CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => 3, CURLOPT_TIMEOUT => 20, CURLOPT_POST => 1)); $output = curl_exec($curl); curl_close($curl); return json_decode($output); }