NAME

Business::AuthorizeNet::CIM - Authorize.Net Customer Information Manager (CIM) Web Services API

VERSION

version 0.02

SYNOPSIS

use Business::AuthorizeNet::CIM;
use Data::Dumper;

my $cim = Business::AuthorizeNet::CIM->new( login => $cfg{login}, transactionKey => $cfg{password} );

my @ProfileIds = $cim->getCustomerProfileIds();
foreach my $id (@ProfileIds) {
    my $d = $cim->getCustomerProfile($id);
    print Dumper(\$d);
}

DESCRIPTION

Authorize.Net Customer Information Manager (CIM) Web Services API for http://developer.authorize.net/api/cim/, read http://www.authorize.net/support/CIM_XML_guide.pdf for more details.

METHODS

CONSTRUCTION

my $cim = Business::AuthorizeNet::CIM->new(
    login => $cfg{login},
    transactionKey => $cfg{password}
);
  • login

    The valid API Login ID for the developer test or merchant account

  • transactionKey

    The valid Transaction Key for the developer test or merchant account

  • debug

  • test_mode

    validationMode as testMode or liveMode

  • ua_args

    passed to LWP::UserAgent

  • ua

    LWP::UserAgent or WWW::Mechanize instance

createCustomerProfile

Create a new customer profile along with any customer payment profiles and customer shipping addresses for the customer profile.

$cim->createCustomerProfile(
    refId => $refId, # Optional
    
    # one of 'merchantCustomerId', 'description', 'email' is required
    merchantCustomerId => $merchantCustomerId,
    description => $description,
    email => $email,
    
    customerType => $customerType, # Optional
    billTo => { # Optional, all sub items are Optional
        firstName => $firstName,
        lastName  => $lastName,
        company   => $company,
        address   => $address,
        city      => $city,
        state     => $state,
        zip       => $zip,
        country   => $country,
        phoneNumber => $phoneNumber,
        faxNumber => $faxNumber
    },
    # or it uses shipToList address as billTo
    use_shipToList_as_billTo => 1,
    
    creditCard => { # required when the payment profile is credit card
        cardNumber => $cardNumber,
        expirationDate => $expirationDate, # YYYY-MM
        cardCode => $cardCode,  # Optional
    },
    bankAccount => { # required when the payment profile is bank account
        accountType => $accountType, # Optional, one of checking, savings, businessChecking
        routingNumber => $routingNumber,
        accountNumber => $accountNumber,
        nameOnAccount => $nameOnAccount,
        echeckType => $echeckType, # Optionaal, one of CCD, PPD, TEL, WEB
        bankName   => $bankName, # Optional
    },
    
    shipToList => {
        firstName => $firstName,
        lastName  => $lastName,
        company   => $company,
        address   => $address,
        city      => $city,
        state     => $state,
        zip       => $zip,
        country   => $country,
        phoneNumber => $phoneNumber,
        faxNumber => $faxNumber
    },
    
    # or it uses billTo address as shipToList
    use_billTo_as_shipToList => 1,
);

createCustomerPaymentProfileRequest

Create a new customer payment profile for an existing customer profile. You can create up to 10 payment profiles for each customer profile.

$cim->createCustomerPaymentProfileRequest(
    customerProfileId => $customerProfileId, # required

    refId => $refId, # Optional

    customerType => $customerType, # Optional
    billTo => { # Optional, all sub items are Optional
        firstName => $firstName,
        lastName  => $lastName,
        company   => $company,
        address   => $address,
        city      => $city,
        state     => $state,
        zip       => $zip,
        country   => $country,
        phoneNumber => $phoneNumber,
        faxNumber => $faxNumber
    },
    
    creditCard => { # required when the payment profile is credit card
        cardNumber => $cardNumber,
        expirationDate => $expirationDate, # YYYY-MM
        cardCode => $cardCode,  # Optional
    },
    bankAccount => { # required when the payment profile is bank account
        accountType => $accountType, # Optional, one of checking, savings, businessChecking
        routingNumber => $routingNumber,
        accountNumber => $accountNumber,
        nameOnAccount => $nameOnAccount,
        echeckType => $echeckType, # Optionaal, one of CCD, PPD, TEL, WEB
        bankName   => $bankName, # Optional
    },
);

createCustomerShippingAddressRequest

Create a new customer shipping address for an existing customer profile. You can create up to 100 customer shipping addresses for each customer profile.

$cim->createCustomerShippingAddressRequest(
    customerProfileId => $customerProfileId, # required

    refId => $refId, # Optional
    
    firstName => $firstName,
    lastName  => $lastName,
    company   => $company,
    address   => $address,
    city      => $city,
    state     => $state,
    zip       => $zip,
    country   => $country,
    phoneNumber => $phoneNumber,
    faxNumber => $faxNumber
);

createCustomerProfileTransaction

Create a new payment transaction from an existing customer profile.

$cim->createCustomerProfileTransaction(
    'profileTransAuthCapture', # or others like profileTransAuthOnly

    refId => $refId, # Optional, reference id
    
    amount => $amount,
    tax => { # Optional
        amount => $tax_amount,
        name   => $tax_name,
        description => $tax_description
    },
    shipping => { # Optional
        amount => $tax_amount,
        name   => $tax_name,
        description => $tax_description
    },
    duty => { # Optional
        amount => $tax_amount,
        name   => $tax_name,
        description => $tax_description
    },
    
    lineItems => [ { # Optional
        itemId => $itemId,
        name => $name,
        description => $description,
        quantity => $quantity,
        unitPrice => $unitPrice,
        taxable => $taxable,
    } ],

    customerProfileId => $customerProfileId,
    customerPaymentProfileId => $customerPaymentProfileId,
    customerShippingAddressId => $customerShippingAddressId,
    
    extraOptions => $extraOptions, # Optional
    
    ### Only required for profileTransPriorAuthCapture: For Prior Authorization and CaptureTransactions
    ### and profileTransRefund: For Refund Transactions
    ### and profileTransVoid: For Void Transactions
    transId => $transId,
    
    ### Only partly required for profileTransRefund: For Refund Transactions
    creditCardNumberMasked => $creditCardNumberMasked,
    bankRoutingNumberMasked => $bankRoutingNumberMasked,
    bankAccountNumberMasked => $bankAccountNumberMasked,
    
    ### rest are not for profileTransPriorAuthCapture
    order => { # Optional
        invoiceNumber => $invoiceNumber,
        description => $description,
        purchaseOrderNumber => $purchaseOrderNumber,
    },
    taxExempt => 'true', # optional
    recurringBilling => 'false', # optional
    cardCode => $cardCode, # Required only when the merchant would like to use the Card Code Verification (CCV) filter
    splitTenderId => $splitTenderId, # Required for second and subsequent transactions related to a partial authorizaqtion transaction.
    
    #### ONLY required for profileTransCaptureOnly: the Capture Only transaction type.
    approvalCode => $approvalCode,
);

The first argument can be one of

  • profileTransAuthOnly

    For Authorization Only Transactions

  • profileTransAuthCapture

    For Authorization and Capture Transactions

  • profileTransCaptureOnly

    For Capture Only Transactions

  • profileTransPriorAuthCapture

    For Prior Authorization and CaptureTransactions

  • profileTransRefund

    For Refund Transactions

  • profileTransVoid

    For Void Transactions

    $cim->createCustomerProfileTransaction(
        'profileTransVoid', # or others like profileTransAuthOnly
    
        refId => $refId, # Optional, reference id
        
        customerProfileId => $customerProfileId,
        customerPaymentProfileId => $customerPaymentProfileId,
        customerShippingAddressId => $customerShippingAddressId,
        
        extraOptions => $extraOptions, # Optional
    
        transId => $transId,
    );

deleteCustomerProfile

Delete an existing customer profile along with all associated customer payment profiles and customer shipping addresses.

$cim->deleteCustomerProfile($customerProfileId);

deleteCustomerPaymentProfileRequest

Delete a customer payment profile from an existing customer profile.

$cim->deleteCustomerPaymentProfileRequest($customerProfileId, $customerPaymentProfileId);

deleteCustomerShippingAddressRequest

Delete a customer shipping address from an existing customer profile.

$cim->deleteCustomerShippingAddressRequest($customerProfileId, $customerAddressId);

getCustomerProfileIds

Retrieve all customer profile IDs you have previously created.

my @ProfileIds = $cim->getCustomerProfileIds;

getCustomerProfile

Retrieve an existing customer profile along with all the associated customer payment profiles and customer shipping addresses.

$cim->getCustomerProfile($customerProfileId);

getCustomerPaymentProfileRequest

Retrieve a customer payment profile for an existing customer profile.

$cim->getCustomerPaymentProfileRequest($customerProfileId, $customerPaymentProfileId);

getCustomerShippingAddressRequest

Retrieve a customer shipping address for an existing customer profile.

$cim->getCustomerShippingAddressRequest($customerProfileId, $customerAddressId);

updateCustomerProfile

Update an existing customer profile

$cim->updateCustomerProfile(
    customerProfileId => $customerProfileId,
    
    refId => $refId, # Optional
    
    merchantCustomerId => $merchantCustomerId,
    description => $description,
    email => $email
);

updateCustomerPaymentProfile

Update a customer payment profile for an existing customer profile.

$cim->updateCustomerPaymentProfile(
    customerProfileId => $customerProfileId,
    customerPaymentProfileId => $customerPaymentProfileId,
    
    refId => $refId, # Optional
    
    customerType => $customerType, # Optional
    billTo => { # Optional, all sub items are Optional
        firstName => $firstName,
        lastName  => $lastName,
        company   => $company,
        address   => $address,
        city      => $city,
        state     => $state,
        zip       => $zip,
        country   => $country,
        phoneNumber => $phoneNumber,
        faxNumber => $faxNumber
    },
    
    creditCard => { # required when the payment profile is credit card
        cardNumber => $cardNumber,
        expirationDate => $expirationDate, # YYYY-MM
        cardCode => $cardCode,  # Optional
    },
    bankAccount => { # required when the payment profile is bank account
        accountType => $accountType, # Optional, one of checking, savings, businessChecking
        routingNumber => $routingNumber,
        accountNumber => $accountNumber,
        nameOnAccount => $nameOnAccount,
        echeckType => $echeckType, # Optionaal, one of CCD, PPD, TEL, WEB
        bankName   => $bankName, # Optional
    },
);

updateCustomerShippingAddress

Update a shipping address for an existing customer profile.

$cim->updateCustomerShippingAddress(
    customerProfileId => $customerProfileId,
    customerAddressId => $customerAddressId,
    
    refId => $refId, # Optional
    
    firstName => $firstName,
    lastName  => $lastName,
    company   => $company,
    address   => $address,
    city      => $city,
    state     => $state,
    zip       => $zip,
    country   => $country,
    phoneNumber => $phoneNumber,
    faxNumber => $faxNumber
);

updateSplitTenderGroupRequest

Update the status of a split tender group (a group of transactions, each of which pays for part of one order).

$cim->updateSplitTenderGroupRequest($splitTenderId, $splitTenderStatus);
# splitTenderStatus can be voided or completed.

validateCustomerPaymentProfile

Verify an existing customer payment profile by generating a test transaction.

$cim->validateCustomerPaymentProfile(
    customerProfileId => $customerProfileId,
    customerPaymentProfileId => $customerPaymentProfileId,
    customerShippingAddressId => $customerShippingAddressId,
    
    cardCode => $cardCode, # Optional
);

AUTHOR

Fayland Lam <fayland@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2010 by Fayland Lam.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.