/**
  * {@inheritDoc}
  *
  * @param GetCustomerProfileIds $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $response = $this->api->getCustomerProfileIds();
     $model->replace(get_object_vars($response));
 }
 /**
  * {@inheritDoc}
  *
  * @param GetHostedProfilePageRequest $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $model->validateNotEmpty(['customerProfileId', 'settings']);
     $response = $this->api->getHostedProfilePageRequest($model->get('customerProfileId'), $model->getArray('settings'));
     $model->replace(get_object_vars($response));
 }
 /**
  * {@inheritDoc}
  *
  * @param DeleteCustomerPaymentProfile $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $model->validateNotEmpty(['customerProfileId', 'paymentProfileId']);
     $response = $this->api->deleteCustomerPaymentProfile($model->get('customerProfileId'), $model->get('paymentProfileId'));
     $model->replace(get_object_vars($response));
 }
 /**
  * {@inheritDoc}
  *
  * @param UpdateCustomerPaymentProfile $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $model->validateNotEmpty(['customerProfileId']);
     $modelPaymentProfile = $model->getArray('paymentProfile');
     $paymentProfile = new \AuthorizeNetPaymentProfile();
     $paymentProfile->customerType = $modelPaymentProfile['customerType'];
     if ($modelPaymentProfile['billTo']) {
         $paymentBillTo = new \AuthorizeNetAddress();
         $paymentBillTo->firstName = $modelPaymentProfile['billTo']['firstName'];
         $paymentBillTo->lastName = $modelPaymentProfile['billTo']['lastName'];
         $paymentBillTo->company = $modelPaymentProfile['billTo']['company'];
         $paymentBillTo->address = $modelPaymentProfile['billTo']['address'];
         $paymentBillTo->city = $paymentProfile['billTo']['city'];
         $paymentBillTo->state = $modelPaymentProfile['billTo']['state'];
         $paymentBillTo->zip = $modelPaymentProfile['billTo']['state'];
         $paymentBillTo->country = $modelPaymentProfile['billTo']['country'];
         $paymentBillTo->phoneNumber = $modelPaymentProfile['billTo']['phoneNumber'];
         $paymentBillTo->faxNumber = $modelPaymentProfile['billTo']['faxNumber'];
         $paymentProfile->billTo = $paymentProfile;
     }
     if ($paymentProfile['payment']) {
         $payment = new \AuthorizeNetPayment();
         if (isset($modelPaymentProfile['payment']['creditCard'])) {
             $paymentCreditCard = new \AuthorizeNetCreditCard();
             $paymentCreditCard->cardNumber = $modelPaymentProfile['payment']['creditCard']['cardNumber'];
             $paymentCreditCard->expirationDate = $modelPaymentProfile['payment']['creditCard']['expirationDate'];
             $paymentCreditCard->cardCode = $modelPaymentProfile['payment']['creditCard']['cardCode'];
             $payment->creditCard = $paymentCreditCard;
         }
         if (isset($paymentProfiles['payment']['bankAccount'])) {
             $paymentBankAccount = new \AuthorizeNetBankAccount();
             $paymentBankAccount->accountType = $modelPaymentProfile['payment']['bankAccount']["accountType"];
             $paymentBankAccount->routingNumber = $modelPaymentProfile['payment']['bankAccount']['routingNumber'];
             $paymentBankAccount->accountNumber = $modelPaymentProfile['payment']['bankAccount']['accountNumber'];
             $paymentBankAccount->nameOnAccount = $modelPaymentProfile['payment']['bankAccount']['nameOnAccount'];
             $paymentBankAccount->echeckType = $modelPaymentProfile['payment']['bankAccount']['echeckType'];
             $paymentBankAccount->bankName = $modelPaymentProfile['payment']['bankAccount']['bankName'];
             $payment->bankAccount = $paymentBankAccount;
         }
         $paymentProfile->payment = $payment;
     }
     $response = $this->api->updateCustomerPaymentProfile($model->get('customerProfileId'), $model->get('paymentProfileId'), $paymentProfile);
     $model->replace(get_object_vars($response));
 }
 /**
  * {@inheritDoc}
  *
  * @param CreateCustomerProfile $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $address = new \AuthorizeNetAddress();
     $address->firstName = $model->get('firstName', '');
     $address->lastName = $model->get('lastName', '');
     $address->company = $model->get('company', '');
     $address->address = $model->get('address', '');
     $address->city = $model->get('city', '');
     $address->state = $model->get('state', '');
     $address->zip = $model->get('zip', '');
     $address->country = $model->get('country', '');
     $address->phoneNumber = $model->get('phoneNumber', '');
     $address->faxNumber = $model->get('faxNumber', '');
     $response = $this->api->createCustomerShippingAddress($model->get('customerProfileId'), $address);
     $model->replace(get_object_vars($response));
 }
 /**
  * {@inheritDoc}
  */
 protected function populateConfig(ArrayObject $config)
 {
     if (!class_exists(\AuthorizeNetCIM::class)) {
         throw new \LogicException('You must install "authorizenet/authorizenet" library.');
     }
     $config->defaults(array('payum.factory_name' => 'authorize_net_cim', 'payum.factory_title' => 'Authorize.NET CIM', 'payum.action.create_customer_profile' => new CreateCustomerProfileAction(), 'payum.action.create_customer_shipping_address' => new CreateCustomerShippingAddressAction(), 'payum.action.create_customer_profile_transaction' => new CreateCustomerProfileTransactionAction(), 'payum.action.create_customer_payment_profile' => new CreateCustomerPaymentProfileAction(), 'payum.action.delete_customer_payment_profile' => new DeleteCustomerPaymentProfileAction(), 'payum.action.delete_customer_profile' => new DeleteCustomerProfileAction(), 'payum.action.delete_customer_shipping_address' => new DeleteCustomerShippingAddressAction(), 'payum.action.get_customer_payment_profile' => new GetCustomerPaymentProfileAction(), 'payum.action.get_customer_profile_ids' => new GetCustomerProfileIdsAction(), 'payum.action.get_hosted_profile_page_request' => new GetHostedProfilePageRequestAction(), 'payum.action.get_customer_profile' => new GetCustomerProfileAction(), 'payum.action.get_customer_shipping_address' => new GetCustomerShippingAddressAction(), 'payum.action.update_split_tender_group' => new UpdateSplitTenderGroupAction(), 'payum.action.update_customer_shipping_address' => new UpdateCustomerShippingAddressAction(), 'payum.action.update_customer_payment_profile' => new UpdateCustomerPaymentProfileAction(), 'payum.action.update_customer_profile' => new UpdateCustomerProfileAction(), 'payum.action.validate_customer_payment_profile' => new ValidateCustomerPaymentProfileAction()));
     if (false == $config['payum.api']) {
         $config['payum.default_options'] = array('login_id' => '', 'transaction_key' => '', 'sandbox' => true);
         $config->defaults($config['payum.default_options']);
         $config['payum.required_options'] = array('login_id', 'transaction_key');
         $config['payum.api'] = function (ArrayObject $config) {
             $config->validateNotEmpty($config['payum.required_options']);
             $api = new AuthorizeNetCIM($config['login_id'], $config['transaction_key']);
             $api->setSandbox($config['sandbox']);
             return $api;
         };
     }
 }
 /**
  * {@inheritDoc}
  *
  * @param CreateCustomerProfile $request
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $model = ArrayObject::ensureArrayObject($request->getModel());
     $customerProfile = new \AuthorizeNetCustomer();
     $customerProfile->description = $model->get('description', '');
     $customerProfile->merchantCustomerId = $model->get('merchantCustomerId');
     $customerProfile->email = $model->get('email');
     foreach ($model->getArray('paymentProfiles') as $paymentProfiles) {
         $paymentProfile = new \AuthorizeNetPaymentProfile();
         $paymentProfile->customerType = $paymentProfiles['customerType'];
         if ($paymentProfiles['billTo']) {
             $paymentBillTo = new \AuthorizeNetAddress();
             $paymentBillTo->firstName = $paymentProfiles['billTo']['firstName'];
             $paymentBillTo->lastName = $paymentProfiles['billTo']['lastName'];
             $paymentBillTo->company = $paymentProfiles['billTo']['company'];
             $paymentBillTo->address = $paymentProfiles['billTo']['address'];
             $paymentBillTo->city = $paymentProfiles['billTo']['city'];
             $paymentBillTo->state = $paymentProfiles['billTo']['state'];
             $paymentBillTo->zip = $paymentProfiles['billTo']['state'];
             $paymentBillTo->country = $paymentProfiles['billTo']['country'];
             $paymentBillTo->phoneNumber = $paymentProfiles['billTo']['phoneNumber'];
             $paymentBillTo->faxNumber = $paymentProfiles['billTo']['faxNumber'];
             $paymentProfile->billTo = $paymentBillTo;
         }
         if ($paymentProfiles['payment']) {
             $payment = new \AuthorizeNetPayment();
             if (isset($paymentProfiles['payment']['creditCard'])) {
                 $paymentCreditCard = new \AuthorizeNetCreditCard();
                 $paymentCreditCard->cardNumber = $paymentProfiles['payment']['creditCard']['cardNumber'];
                 $paymentCreditCard->expirationDate = $paymentProfiles['payment']['creditCard']['expirationDate'];
                 $paymentCreditCard->cardCode = $paymentProfiles['payment']['creditCard']['cardCode'];
                 $payment->creditCard = $paymentCreditCard;
             }
             if (isset($paymentProfiles['payment']['bankAccount'])) {
                 $paymentBankAccount = new \AuthorizeNetBankAccount();
                 $paymentBankAccount->accountType = $paymentProfiles['payment']['bankAccount']["accountType"];
                 $paymentBankAccount->routingNumber = $paymentProfiles['payment']['bankAccount']['routingNumber'];
                 $paymentBankAccount->accountNumber = $paymentProfiles['payment']['bankAccount']['accountNumber'];
                 $paymentBankAccount->nameOnAccount = $paymentProfiles['payment']['bankAccount']['nameOnAccount'];
                 $paymentBankAccount->echeckType = $paymentProfiles['payment']['bankAccount']['echeckType'];
                 $paymentBankAccount->bankName = $paymentProfiles['payment']['bankAccount']['bankName'];
                 $payment->bankAccount = $paymentBankAccount;
             }
             $paymentProfile->payment = $payment;
         }
         $customerProfile->paymentProfiles[] = $paymentProfile;
     }
     foreach ($model->getArray('shipToList') as $addresses) {
         $address = new \AuthorizeNetAddress();
         $address->firstName = $addresses['firstName'];
         $address->lastName = $addresses['lastName'];
         $address->company = $addresses['company'];
         $address->address = $addresses['address'];
         $address->city = $addresses['city'];
         $address->state = $addresses['state'];
         $address->zip = $addresses['zip'];
         $address->country = $addresses['country'];
         $address->phoneNumber = $addresses['phoneNumber'];
         $address->faxNumber = $addresses['faxNumber'];
         $customerProfile->shipToList[] = $address;
     }
     $response = $this->api->createCustomerProfile($customerProfile);
     $model->replace(get_object_vars($response));
 }