public function executePayment(PaymentInterface $payment, Request $request) { $order = $payment->getOrder(); $paymentMethod = $order->getPaymentMethod(); $configuration = $paymentMethod->getConfiguration(); $apiContext = $this->getApiContext($configuration); $ccFirstname = $request->request->get('firstname'); $ccLastname = $request->request->get('lastname'); $ccNumber = str_replace(' ', '', $request->request->get('number')); $ccExpiry = $request->request->get('expiry'); $ccCvc = $request->request->get('cvc'); if (strlen($ccExpiry) == 0 || strlen($ccExpiry) < 5) { return new JsonResponse(['success' => false, 'message' => 'Upsss! Wygląda na to, że data ważności karty wpisana jest nieprawidłowo. Prosimy wprowadź ją w formacie MM/YY']); } list($ccExpiryMonth, $ccExpiryYear) = explode('/', $ccExpiry); if (substr($ccExpiryMonth, 0, 1) == 0) { $ccExpiryMonth = substr($ccExpiryMonth, 1, 1); } $ccExpiryYear = '20' . $ccExpiryYear; $cardType = $this->cardType($ccNumber); if (strlen($ccExpiryMonth) == 0 || strlen($ccExpiryYear) < 4) { return new JsonResponse(['success' => false, 'message' => 'Upsss! Wygląda na to, że data ważności karty wpisana jest nieprawidłowo. Prosimy wprowadź ją w formacie MM/YY']); } if ('' == $cardType) { return new JsonResponse(['success' => false, 'message' => 'Upsss! Wygląda na to, że wpisany numer karty jest nieprawidłowy. Prosimy wprowadź numer ponownie.']); } $card = new CreditCard(); $card->setType($cardType); $card->setNumber($ccNumber); $card->setExpireMonth($ccExpiryMonth); $card->setExpireYear($ccExpiryYear); $card->setCvv2($ccCvc); $card->setFirstName($ccFirstname); $card->setLastName($ccLastname); $card->setBillingAddress($this->createAddress($order)); $fundingInstrument = new FundingInstrument(); $fundingInstrument->setCreditCard($card); $payer = $this->createPayer($configuration['paypal_type']); $payer->setFundingInstruments([$fundingInstrument]); $transaction = $this->createTransaction($order); $payPalPayment = new Payment(); $payPalPayment->setIntent("sale"); $payPalPayment->setPayer($payer); $payPalPayment->setTransactions([$transaction]); try { $payPalPayment->create($apiContext); } catch (PayPalConnectionException $e) { $error_object = json_decode($e->getData()); $message = 'Upsss! Wystąpił nieoczekiwany błąd w trakcie przetwarzania transakcji. Skontaktuj się z obsługą sklepu.'; switch ($error_object->name) { case 'CREDIT_CARD_CVV_CHECK_FAILED': case 'MISSING_CVV2': case 'GATEWAY_DECLINE_CVV2': $message = 'Upsss! Wygląda na to, że podany przez Ciebie kod CVV2 lub CVC2 jest nieprawidłowy lub niepełny. Prosimy sprawdź numer i wprowadź go ponownie.'; break; case 'CREDIT_CARD_REFUSED': $message = 'Upsss! Wygląda na to, że twój bank nie autoryzował transakcji. Prosimy spróbuj zapłacić przy użyciu innej karty.'; break; case 'EXPIRED_CREDIT_CARD': $message = 'Upsss! Wygląda na to, że upłynął termin ważności twojej karty. Prosimy spróbuj zapłacić przy użyciu innej karty.'; break; case 'PAYER_EMPTY_BILLING_ADDRESS': $message = 'Upsss! Wygląda na to, że podałeś niepełne dane adresowe. Prosimy sprawdź swoje dane adresowe i spróbuje ponowić płatność.'; break; case 'INVALID_CC_NUMBER': $message = 'Upsss! Wygląda na to, że wpisany numer karty jest nieprawidłowy. Prosimy wprowadź numer ponownie.'; break; case 'CC_TYPE_NOT_SUPPORTED': $message = 'Upsss! Nasz system nie obsługuje płatności dokonywanych tego typu kartą. Prosimy spróbuj użyć innej karty lub zmień metodę płatności na Paypal lub przelew bankowy.'; break; case 'VALIDATION_ERROR': $message = 'Upsss! Podałeś niepoprawne dane karty. Spróbuj ponownie.'; break; } return new JsonResponse(['success' => false, 'message' => $message]); } $payment->setExternalIdentifier($payPalPayment->getId()); if ($payment->getState() == 'approved') { $payment->setState(PaymentInterface::PAYMENT_STATE_APPROVED); return new JsonResponse(['success' => true, 'message' => 'Płatność zakończona sukcesem']); } return new JsonResponse(['success' => false, 'message' => 'Wystąpił nieoczekiwany błąd. Skontaktuj się z obsługą sklepu']); }