public function store(CreditCardInterface $cardInterface, Address $address = null, $externalCustomerId = null, $merchantId = null, $externalCardId = null)
{
$dispatcher = $this->connectionService->getDispatcher();
$apiContext = $this->connectionService->getApiContext();
$dispatcher->dispatch(CreditCardEvent::STORE_SETUP);
$creditCard = new CreditCard();
$creditCard->setType($cardInterface->getType())->setNumber($cardInterface->getNumber())->setExpireMonth($cardInterface->getExpireMonth())->setExpireYear($cardInterface->getExpireYear())->setCvv2($cardInterface->getCsc())->setFirstName($cardInterface->getFirstName())->setLastName($cardInterface->getLastName());
if ($address instanceof Address) {
$creditCard->setBillingAddress($address);
}
if ($externalCustomerId !== null) {
$creditCard->setExternalCustomerId($externalCustomerId);
}
if ($merchantId !== null) {
$creditCard->setMerchantId($merchantId);
}
if ($externalCardId !== null) {
$creditCard->setExternalCardId($externalCardId);
}
$creditCardEvent = new CreditCardEvent($creditCard);
$dispatcher->dispatch(CreditCardEvent::STORE_START, $creditCardEvent);
$result = $creditCard->create($apiContext);
$creditCardEvent = new CreditCardEvent($result);
$dispatcher->dispatch(CreditCardEvent::STORE_END, $creditCardEvent);
return $result;
}