@@ -268,13 +268,41 @@ protected function createPaymentToken(Payment $payment, $token)
268
268
$ paymentToken ->setTokenDetails (
269
269
json_encode ($ payment ->getAdditionalInformation (Transparent::CC_DETAILS ))
270
270
);
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
+ );
274
274
275
275
$ this ->getPaymentExtensionAttributes ($ payment )->setVaultPaymentToken ($ paymentToken );
276
276
}
277
277
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
+
278
306
/**
279
307
* Returns payment extension attributes instance.
280
308
*
0 commit comments