@@ -268,13 +268,41 @@ protected function createPaymentToken(Payment $payment, $token)
268268 $ paymentToken ->setTokenDetails (
269269 json_encode ($ payment ->getAdditionalInformation (Transparent::CC_DETAILS ))
270270 );
271- $ expDate = new \ DateTime ( ' now ' , new \ DateTimeZone ( ' UTC ' ));
272- $ expDate -> add ( new \ DateInterval ( ' P1Y ' ));
273- $ paymentToken -> setExpiresAt ( $ expDate -> format ( ' Y-m-d 00:00:00 ' ) );
271+ $ paymentToken -> setExpiresAt (
272+ $ this -> getExpirationDate ( $ payment )
273+ );
274274
275275 $ this ->getPaymentExtensionAttributes ($ payment )->setVaultPaymentToken ($ paymentToken );
276276 }
277277
278+ /**
279+ * Generates CC expiration date by year and month provided in payment.
280+ *
281+ * @param Payment $payment
282+ * @return string
283+ * @throws \Exception
284+ */
285+ private function getExpirationDate (Payment $ payment )
286+ {
287+ $ cardExpDate = new \DateTime (
288+ $ payment ->getCcExpYear ()
289+ . '- '
290+ . $ payment ->getCcExpMonth ()
291+ . '- '
292+ . '01 '
293+ . ' '
294+ . '00:00:00 ' ,
295+ new \DateTimeZone ('UTC ' )
296+ );
297+ $ cardExpDate ->add (new \DateInterval ('P1M ' ));
298+ $ oneYearFromNow = new \DateTime ('now ' , new \DateTimeZone ('UTC ' ));
299+ $ oneYearFromNow ->add (new \DateInterval ('P1Y ' ));
300+ if ($ cardExpDate <= $ oneYearFromNow ) {
301+ return $ cardExpDate ->format ('Y-m-d 00:00:00 ' );
302+ }
303+ return $ oneYearFromNow ->format ('Y-m-d 00:00:00 ' );
304+ }
305+
278306 /**
279307 * Returns payment extension attributes instance.
280308 *
0 commit comments