Uses
The xmltrans2.cgi module can be used to originate Credit, Force, Postauth, Retry and Void transactions based on previous transactions. It provides the same features as form based transactions such as:

  • Merchant and customer emails.
  • Customized email text
Submission Details

URL

https://(OBTAIN DOMAIN FROM YOUR REP)/cgi-bin/rc/xmltrans2.cgi

Mime Type

xmltrans2.cgi is accessed with a HTTP POST and requires a CONTENT_TYPE header to be specified. Either 'application/x-www-form-urlencoded' or 'text/xml' must be used. If 'application/x-www-form-urlencoded' is sent then the HTTP body must contain valid form markup. See WW3 Form Spec for details. If 'text/xml' is used then the HTTP body should only contain the XML request.

Test Mode Details

You can run all requests through xmltrans2 in test mode in order to help with the integration process. There are three different ways to run a XML transaction in test mode:

1. Enable the TestMode checkbox in your merchant account settings. Please remember this turns on TestMode for all transactions

2. Setup the Test First Name field in your merchant account settings. Any xmltrans2 request that contains a BillingFirstName tag with this same value will be run as a test transaction. This is only applicable to a couple transactions such as CreditTransaction

3. Send through a TestMode tag with the value TRUE. The TestMode tag which is in the TransactionControl structure always overrides the other test settings. This means that sending through TestMode equal to FALSE will cause a transaction to always be run as a live transaction.

XML Structures

CreditTransaction

This will generate a credit transaction and works for both cards and EFTs

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <CreditTransaction>
        <Total>5.00</Total>
        <CustomerData>
            <Email>demo@demo.com</Email>
            <CustId>12345</CustId> <!-- Optional -->   
            <BillingAddress>
                <Address1>test</Address1>
                <FirstName>John</FirstName>
                <LastName>Smith</LastName>
                <City>Bountiful</City>
                <State>UT</State>
                <Zip>84032</Zip>
                <Country>USA</Country>
                <Phone>801-555-1212</Phone>
            </BillingAddress>
            <!-- Optional -->               
            <ShippingAddress>
                <Address1>test</Address1>            
                <FirstName>John</FirstName>
                <LastName>Smith</LastName>
                <City>Bountiful</City>
                <State>UT</State>
                <Zip>84032</Zip>
                <Country>USA</Country>
            </ShippingAddress>
        </CustomerData>
        <AccountInfo>
            <!-- For Credit card transaction. -->
            <CardAccount>
                <AccountNumber>5454545454545454</AccountNumber>
                <ExpirationMonth>01</ExpirationMonth>
                <ExpirationYear>2000</ExpirationYear>
            </CardAccount>
            <!-- For EFT transactions. -->                    
            <CheckAccount>
                <AccountNumber>123456</AccountNumber>
                <ABA>124000054</ABA>
            </CheckAccount>            
        </AccountInfo>        
        <!-- All TransactionControl elements are optional including TransactionControl -->        
        <TransactionControl>
            <SendCustomerEmail>TRUE</SendCustomerEmail> <!-- TRUE/FALSE -->
            <SendMerchantEmail>TRUE</SendMerchantEmail> <!-- TRUE/FALSE -->           
            <TestMode>TRUE</TestMode> <!-- TRUE/FALSE -->
            <EmailText> <!-- Up to 10 EmailTextItem elements allowed -->
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
            </EmailText>
        </TransactionControl>
    	<!-- Optional.  This information will be saved on our servers and is
      	available in the XML transaction report.  This is useful if you want
      	to save your own transaction meta-data with a transaction.    -->        
        <VendorData>
            <Element>
                <Name>repId</Name>
                <Value>1234567</Value>
            </Element>
        </VendorData>
    </CreditTransaction>
</GatewayInterface>

PostAuthTransaction

This will generate a postauth (capture) for a previously run Preauth transaction. The OperationXID field should contain the xid for the original Preauth

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <PostAuthTransaction>
	<OperationXID>12345</OperationXID>
	<Total>5.00</Total> <!-- Optional - Will use original transaction amount if not specified here -->   
        <!-- All TransactionControl elements are optional including TransactionControl -->
        <TransactionControl>
            <SendCustomerEmail>TRUE</SendCustomerEmail> <!-- TRUE/FALSE -->
            <SendMerchantEmail>TRUE</SendMerchantEmail> <!-- TRUE/FALSE -->
            <TestMode>TRUE</TestMode> <!-- TRUE/FALSE -->
            <EmailText> <!-- Up to 10 EmailTextItem elements allowed -->
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
            </EmailText>
        </TransactionControl>
    	<!-- Optional.  This information will be saved on our servers and is
      	available in the XML transaction report.  This is useful if you want
      	to save your own transaction meta-data with a transaction.    -->        
        <VendorData>
            <Element>
                <Name>repId</Name>
                <Value>1234567</Value>
            </Element>
        </VendorData>        
    </PostAuthTransaction>
</GatewayInterface>

TranCredTransaction

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <TranCredTransaction>
	<OperationXID>12345</OperationXID>
	<Total>5.00</Total>
        <!-- All TransactionControl elements are optional including TransactionControl -->
        <TransactionControl>
            <SendCustomerEmail>TRUE</SendCustomerEmail> <!-- TRUE/FALSE -->
            <SendMerchantEmail>TRUE</SendMerchantEmail> <!-- TRUE/FALSE -->
            <TestMode>TRUE</TestMode> <!-- TRUE/FALSE -->
            <EmailText> <!-- Up to 10 EmailTextItem elements allowed -->
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
            </EmailText>
        </TransactionControl>
    	<!-- Optional.  This information will be saved on our servers and is
      	available in the XML transaction report.  This is useful if you want
      	to save your own transaction meta-data with a transaction.    -->        
        <VendorData>
            <Element>
                <Name>repId</Name>
                <Value>1234567</Value>
            </Element>
        </VendorData>        
    </TranCredTransaction>
</GatewayInterface>

TranForceTransaction

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <TranForceTransaction>
        <OperationXID>12345</OperationXID>
        <AuthCode>1234</AuthCode>
        <Total>5.00</Total> <!-- Optional - Will use original transaction amount if not specified here -->   
        <!-- All TransactionControl elements are optional including TransactionControl -->
        <TransactionControl>
            <SendCustomerEmail>TRUE</SendCustomerEmail> <!-- TRUE/FALSE -->
            <SendMerchantEmail>TRUE</SendMerchantEmail> <!-- TRUE/FALSE -->
            <TestMode>TRUE</TestMode> <!-- TRUE/FALSE -->
            <EmailText> <!-- Up to 10 EmailTextItem elements allowed -->
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
            </EmailText>
        </TransactionControl>
    	<!-- Optional.  This information will be saved on our servers and is
      	available in the XML transaction report.  This is useful if you want
      	to save your own transaction meta-data with a transaction.    -->        
        <VendorData>
            <Element>
                <Name>repId</Name>
                <Value>1234567</Value>
            </Element>
        </VendorData>        
    </TranForceTransaction>
</GatewayInterface>

TranRetryTransaction

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <TranRetryTransaction>
	<OperationXID>12345</OperationXID>
    	<!-- Optional.  Description and Total are optional but if used
    	both fields must be passed through -->
        <Description>1.00</Description>
        <Total>1.00</Total>
        <!-- All TransactionControl elements are optional including TransactionControl -->        
        <TransactionControl>
            <SendCustomerEmail>TRUE</SendCustomerEmail> <!-- TRUE/FALSE -->
            <SendMerchantEmail>TRUE</SendMerchantEmail> <!-- TRUE/FALSE -->
            <TestMode>TRUE</TestMode> <!-- TRUE/FALSE -->
            <EmailText> <!-- Up to 10 EmailTextItem elements allowed -->
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
            </EmailText>
        </TransactionControl>
    	<!-- Optional.  This information will be saved on our servers and is
      	available in the XML transaction report.  This is useful if you want
      	to save your own transaction meta-data with a transaction.    -->        
        <VendorData>
            <Element>
                <Name>repId</Name>
                <Value>1234567</Value>
            </Element>
        </VendorData>        
    </TranRetryTransaction>
</GatewayInterface>

VoidTransaction

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <VoidTransaction>
        <OperationXID>12345</OperationXID>
        <!-- All TransactionControl elements are optional including TransactionControl -->
        <TransactionControl>
            <SendCustomerEmail>TRUE</SendCustomerEmail> <!-- TRUE/FALSE -->
            <SendMerchantEmail>TRUE</SendMerchantEmail> <!-- TRUE/FALSE -->
            <TestMode>TRUE</TestMode> <!-- TRUE/FALSE -->
            <EmailText> <!-- Up to 10 EmailTextItem elements allowed -->
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
                <EmailTextItem>test1</EmailTextItem>
            </EmailText>
        </TransactionControl>
    	<!-- Optional.  This information will be saved on our servers and is
      	available in the XML transaction report.  This is useful if you want
      	to save your own transaction meta-data with a transaction.    -->        
        <VendorData>
            <Element>
                <Name>repId</Name>
                <Value>1234567</Value>
            </Element>
        </VendorData>        
    </VoidTransaction>
</GatewayInterface>

TransactionStatus

The purpose of the TransactionStatus request is to provide a way to determine the status of a request that was interrupted for some reason. For a transaction where the response was lost the transaction xid would be unknown to the client. To be able to use this request you have to have passed through a unique transaction identifier of your own using the VendorData elements which can be passed through with the original request. Ideally you would pass through a unique ID with every request, although this request will do the lookup based on multiple VendorData elements.

If more than one record is matched based on the passed VendorData the first matching transaction will be used to generate the response. The transaction response will contain a warning message indicating that multiple transactions were matched in this case.

Please note that this is NOT a search tool since it does not return multiple responses. This tool was also not written to automate the retreival of past transaction history.

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <TransactionStatus>
        <VendorData>
            <Element>
                <Name>field1</Name>
                <Value>1234567</Value>
            </Element>
            <Element>
                <Name>field2</Name>
                <Value>1234567</Value>
            </Element>            
        </VendorData>        
    </TransactionStatus>
</GatewayInterface>

TransactionResponse

All transaction requests return this response structure. The customer data fields are populated with data from the request designated by the OperationXID field in the request.

<?xml version="1.0" standalone="yes"?>
<GatewayInterface>
  <TransactionResponse>
    <TransactionResult>
      <Status>text</Status> <!-- Will be one of: ERROR, FAIL, OK -->      
    	<!-- ErrorCategory will be one of :
	AVS_FAILURE - Transaction will be automatically voided.
	CVV2_FAILURE - Transaction will be automatically voided.
	INTERNAL_ERROR - Something unexpected happened.
	PROCESSOR_ERROR - Something such as DECLINED, etc .
	PROCESSOR_FAIL - 
	REQUEST_FORMAT - Request received has an invalid format.
	REQUEST_VALIDATION - XML content is invalid.
	-->            
      <ErrorCategory>text</ErrorCategory>
      <!-- ErrorMessage could be anything. -->      	
      <ErrorMessage>text;/ErrorMessage>
      <!-- Authorization code received from processing network. -->      
      <AuthCode></AuthCode>
      <!-- AVSCategory will be one of :
	address - Address Matched
	address_postal - Address and postal patched
	address_zip5 - Address and five digit zip matched
	address_zip9 - Address and nine digit zip matched
	address_ok_postal_format_error - Address matched, postal format error
	global_non_participant - International with no AVS support
	international_address_not_verified - International with no AVS support
	no_match - No address or postal match
	no_response - No response
	not_allowed - Not allowed
   	postal - Postal match
   	postal_ok_address_format_error - Postal matched, address format error
   	service_not_supported - AVS service not supported for card
   	unavailable - AVS service unavailable.
   	zip5 - Five digit zip matched
   	zip9 - Nine digit zip matched
	-->                  
      <AVSCategory></AVSCategory>
      <!-- AVSResponse is actual AVS response received from the processing network. -->      
      <AVSResponse></AVSResponse>
      <!-- CVV2Response is actual CVV response received from the processing network. -->            
      <CVV2Response></CVV2Response>
      <TimeStamp></TimeStamp>
      <!-- TestMode indicates the test status of your gateway account. TRUE/FALSE -->      
      <TestMode>FALSE</TestMode>
      <Total></Total>
      <XID></XID>
      <CustomerData>
        <BillingAddress>
          <Address1 />
          <City></City>
          <FirstName></FirstName>
          <LastName></LastName>
          <State></State>
          <Zip></Zip>
          <Country></Country>
          <Phone></Phone>
        </BillingAddress>
        <ShippingAddress>
          <Address1></Address1>
          <City></City>
          <FirstName></FirstName>
          <LastName></LastName>
          <State></State>
          <Zip></Zip>
          <Country></Country>
          <Phone></Phone>
        </ShippingAddress>
      </CustomerData>
    </TransactionResult>
  </TransactionResponse>
</GatewayInterface>

Recurring Update

This request allows you to modify the transaction information and recurring commands for a recurring transaction.

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <!-- Other than OperationXID, all of the child elements of RecurUpdate are individually optional but you must pass -->            
    <!-- one of Recipe, RemReps, CustomerData, OrderItems or Total -->                
    <RecurUpdate>
      <OperationXID>12345</OperationXID>
        <!-- Optional.-->        
        <RemReps>123</RemReps>
        <!-- Optional.-->        
        <Recipe>Recipe Name</Recipe>        
        <!-- Optional.  Will update customer info tied to recurring transaction if passed-->        
        <CustomerData>
            <Email>demo@demo.com</Email>
            <CustId>12345</CustId> <!-- Optional -->
            <BillingAddress>
                <Address1>test</Address1>
                <FirstName>John</FirstName>
                <LastName>Smith</LastName>
                <City>Bountiful</City>
                <State>UT</State>
                <Zip>84032</Zip>
                <Country>USA</Country>
                <Phone>801-555-1212</Phone>
            </BillingAddress>
            <!-- Optional -->
            <ShippingAddress>
                <Address1>test</Address1>            
                <FirstName>John</FirstName>
                <LastName>Smith</LastName>
                <City>Bountiful</City>
                <State>UT</State>
                <Zip>84032</Zip>
                <Country>USA</Country>
            </ShippingAddress>
        </CustomerData>
        <!-- Optional.  Will update customer info tied to recurring transaction if passed-->                
        <AccountInfo>
            <!-- For Credit card transaction. -->
            <CardAccount>
                <AccountNumber>5454545454545454</AccountNumber>
                <ExpirationMonth>01</ExpirationMonth>
                <ExpirationYear>2000</ExpirationYear>
            </CardAccount>
            <!-- For EFT transactions. -->                    
            <CheckAccount>
                <AccountNumber>123456</AccountNumber>
                <ABA>124000054</ABA>
            </CheckAccount>            
        </AccountInfo>        
        <!-- Only one of OrderItems or Total elements may be passed in but neither are required -->
        <OrderItems>
          <Item>
            <Description>item1</Description>
            	<Cost>5</Cost>
            	<Qty>1</Qty>
          </Item>
        </OrderItems>        
        <!-- To use the Total element the original transaction can only have one item associated with it  -->        
        <Total>5.00</Total>        
    </RecurUpdate>
</GatewayInterface>

This request will return the following response

<?xml version="1.0" standalone="yes"?>
<GatewayInterface>
  <RecurUpdateResponse>
    <Status>ok</Status>
    <ErrorCategory></ErrorCategory>
    <ErrorMessage></ErrorMessage>
    <TimeStamp>20060621154341</TimeStamp>
    <TestMode>FALSE</TestMode> <!-- TRUE/FALSE -->
    <RecurDetails>
      <RemReps>10</RemReps>
      <RecipeName>daily</RecipeName>
      <RecurTotal>1.00</RecurTotal>
    </RecurDetails>
  </RecurUpdateResponse>
</GatewayInterface>

Recurring Details

This request allows you to query for details on an existing recurring transaction. Currently this request will return the number of remaining repetitions, the recipe name and total.

<?xml version="1.0"?>
<GatewayInterface>
    <VendorIdentification>
        <VendorId>1</VendorId>
        <VendorPassword>test</VendorPassword>
        <HomePage>text</HomePage>
    </VendorIdentification>
    <RecurDetails>
	<OperationXID>12345</OperationXID>
    </RecurDetails>
</GatewayInterface>

This request will return the following response

<?xml version="1.0" standalone="yes"?>
<GatewayInterface>
  <RecurDetailsResponse>
    <Status>ok</Status>
    <ErrorCategory></ErrorCategory>
    <ErrorMessage></ErrorMessage>
    <TimeStamp>20060621154341</TimeStamp>
    <TestMode>FALSE</TestMode> <!-- TRUE/FALSE -->
    <RecurDetails>
      <RemReps>10</RemReps>
      <RecipeName>daily</RecipeName>
      <RecurTotal>1.00</RecurTotal>
    </RecurDetails>
  </RecurDetailsResponse>
</GatewayInterface>