Skip to main content

Documentation Index

Fetch the complete documentation index at: https://bancofcalifornia-preview.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

PHP
<div id="3step_php" class="current_content">
<pre><code class="language-php hljs" id="code_block_158">
<span class="hljs-comment">// API Setup parameters</span>
$gatewayURL = <span class="hljs-string">'https://gateway.bancedge.com/api/v2/three-step'</span>;
$APIKey = <span class="hljs-string">'2F822Rw39fx762MaV7Yy86jXGTC7sCDy'</span>;

<span class="hljs-comment">// If there is no POST data or a token-id, print the initial shopping cart form to get ready for Step One.</span>
<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>($_POST[<span class="hljs-string">'DO_STEP_1'</span>]) &amp;&amp; <span class="hljs-keyword">empty</span>($_GET[<span class="hljs-string">'token-id'</span>])) {

    <span class="hljs-keyword">print</span> <span class="hljs-string">'  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;'</span>;
    <span class="hljs-keyword">print</span> <span class="hljs-string">'
    &lt;html&gt;
      &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
        &lt;title&gt;Collect non-sensitive Customer Info &lt;/title&gt;
      &lt;/head&gt;
      &lt;body&gt;
      &lt;p&gt;&lt;h2&gt;Step One: Collect non-sensitive payment information.&lt;br /&gt;&lt;/h2&gt;&lt;/p&gt;

      &lt;h3&gt; Customer Information&lt;/h3&gt;
      &lt;h4&gt; Billing Details&lt;/h4&gt;

        &lt;form action="" method="post"&gt;
          &lt;table&gt;
          &lt;tr&gt;&lt;td&gt;'</span>.nmHtmlEntities(BRAND_CUSTOMER_VAULT).<span class="hljs-string">' Id  &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="customer-vault-id" value=""&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Company&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-company" value="Acme, Inc."&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;First Name &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-first-name" value="John"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Last Name &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-last-name" value="Smith"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Address &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-address1" value="1234 Main St."&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Address 2 &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-address2" value="Suite 205"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;City &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-city" value="Beverly Hills"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;State/Province &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-state" value="CA"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Zip/Postal &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-zip" value="90210"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Country &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-country" value="US"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Phone Number &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-phone" value="555-555-5555"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Fax Number &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-fax" value="555-555-5555"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Email Address &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="billing-address-email" value="test@example.com"&gt;&lt;/td&gt;&lt;/tr&gt;

          &lt;tr&gt;&lt;td&gt;&lt;h4&gt;&lt;br /&gt; Shipping Details&lt;/h4&gt;
          &lt;tr&gt;&lt;td&gt;Company&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-company" value="Acme, Inc."&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;First Name &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-first-name" value="Mary"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Last Name &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-last-name" value="Smith"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Address &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-address1" value="1234 Main St."&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Address 2&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-address2" value="Suite 205"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;City &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-city" value="Beverly Hills"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;State/Province &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-state" value="CA"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Zip/Postal &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-zip" value="90210"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Country&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-country" value="US"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Phone Number &lt;/td&gt;&lt;td&gt;&lt;input type="text" name="shipping-address-phone" value="555-555-5555"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td colspan="2"&gt;&nbsp;&lt;/td&gt;
          &lt;tr&gt;&lt;td colspan="2" align=center&gt;Total Amount $12.00 &lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td colspan="2" align=center&gt;&lt;input type="submit" value="Submit Step One"&gt;&lt;input type="hidden" name ="DO_STEP_1" value="true"&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;/table&gt;

        &lt;/form&gt;
      &lt;/body&gt;
    &lt;/html&gt;

    '</span>;
}<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (!<span class="hljs-keyword">empty</span>($_POST[<span class="hljs-string">'DO_STEP_1'</span>])) {

    <span class="hljs-comment">// Initiate Step One: Now that we've collected the non-sensitive payment information, we can combine other order information and build the XML format.</span>
    $xmlRequest = <span class="hljs-keyword">new</span> DOMDocument(<span class="hljs-string">'1.0'</span>,<span class="hljs-string">'UTF-8'</span>);

    $xmlRequest-&gt;formatOutput = <span class="hljs-keyword">true</span>;
    $xmlSale = $xmlRequest-&gt;createElement(<span class="hljs-string">'sale'</span>);

    <span class="hljs-comment">// Amount, authentication, and Redirect-URL are typically the bare minimum.</span>
    appendXmlNode($xmlRequest, $xmlSale,<span class="hljs-string">'api-key'</span>,$APIKey);
    appendXmlNode($xmlRequest, $xmlSale,<span class="hljs-string">'redirect-url'</span>,$_SERVER[<span class="hljs-string">'HTTP_REFERER'</span>]);
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'amount'</span>, <span class="hljs-string">'12.00'</span>);
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'ip-address'</span>, $_SERVER[<span class="hljs-string">"REMOTE_ADDR"</span>]);
    <span class="hljs-comment">//appendXmlNode($xmlRequest, $xmlSale, 'processor-id' , 'processor-a');</span>
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'currency'</span>, <span class="hljs-string">'USD'</span>);

    <span class="hljs-comment">// Some additonal fields may have been previously decided by user</span>
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'order-id'</span>, <span class="hljs-string">'1234'</span>);
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'order-description'</span>, <span class="hljs-string">'Small Order'</span>);
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'merchant-defined-field-1'</span> , <span class="hljs-string">'Red'</span>);
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'merchant-defined-field-2'</span>, <span class="hljs-string">'Medium'</span>);
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'tax-amount'</span> , <span class="hljs-string">'0.00'</span>);
    appendXmlNode($xmlRequest, $xmlSale, <span class="hljs-string">'shipping-amount'</span> , <span class="hljs-string">'0.00'</span>);

    <span class="hljs-comment">/*if(!empty($_POST['customer-vault-id'])) {
        appendXmlNode($xmlRequest, $xmlSale, 'customer-vault-id' , $_POST['customer-vault-id']);
    }else {
         $xmlAdd = $xmlRequest-&gt;createElement('add-customer');
         appendXmlNode($xmlRequest, $xmlAdd, 'customer-vault-id' ,411);
         $xmlSale-&gt;appendChild($xmlAdd);
    }*/</span>

    <span class="hljs-comment">// Set the Billing and Shipping from what was collected on initial shopping cart form</span>
    $xmlBillingAddress = $xmlRequest-&gt;createElement(<span class="hljs-string">'billing'</span>);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'first-name'</span>, $_POST[<span class="hljs-string">'billing-address-first-name'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'last-name'</span>, $_POST[<span class="hljs-string">'billing-address-last-name'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'address1'</span>, $_POST[<span class="hljs-string">'billing-address-address1'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'city'</span>, $_POST[<span class="hljs-string">'billing-address-city'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'state'</span>, $_POST[<span class="hljs-string">'billing-address-state'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'postal'</span>, $_POST[<span class="hljs-string">'billing-address-zip'</span>]);
    <span class="hljs-comment">//billing-address-email</span>
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'country'</span>, $_POST[<span class="hljs-string">'billing-address-country'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'email'</span>, $_POST[<span class="hljs-string">'billing-address-email'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'phone'</span>, $_POST[<span class="hljs-string">'billing-address-phone'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'company'</span>, $_POST[<span class="hljs-string">'billing-address-company'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'address2'</span>, $_POST[<span class="hljs-string">'billing-address-address2'</span>]);
    appendXmlNode($xmlRequest, $xmlBillingAddress,<span class="hljs-string">'fax'</span>, $_POST[<span class="hljs-string">'billing-address-fax'</span>]);
    $xmlSale-&gt;appendChild($xmlBillingAddress);

    $xmlShippingAddress = $xmlRequest-&gt;createElement(<span class="hljs-string">'shipping'</span>);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'first-name'</span>, $_POST[<span class="hljs-string">'shipping-address-first-name'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'last-name'</span>, $_POST[<span class="hljs-string">'shipping-address-last-name'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'address1'</span>, $_POST[<span class="hljs-string">'shipping-address-address1'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'city'</span>, $_POST[<span class="hljs-string">'shipping-address-city'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'state'</span>, $_POST[<span class="hljs-string">'shipping-address-state'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'postal'</span>, $_POST[<span class="hljs-string">'shipping-address-zip'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'country'</span>, $_POST[<span class="hljs-string">'shipping-address-country'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'phone'</span>, $_POST[<span class="hljs-string">'shipping-address-phone'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'company'</span>, $_POST[<span class="hljs-string">'shipping-address-company'</span>]);
    appendXmlNode($xmlRequest, $xmlShippingAddress,<span class="hljs-string">'address2'</span>, $_POST[<span class="hljs-string">'shipping-address-address2'</span>]);
    $xmlSale-&gt;appendChild($xmlShippingAddress);

    <span class="hljs-comment">// Products already chosen by user</span>
    $xmlProduct = $xmlRequest-&gt;createElement(<span class="hljs-string">'product'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'product-code'</span> , <span class="hljs-string">'SKU-123456'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'description'</span> , <span class="hljs-string">'test product description'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'commodity-code'</span> , <span class="hljs-string">'abc'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'unit-of-measure'</span> , <span class="hljs-string">'lbs'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'unit-cost'</span> , <span class="hljs-string">'5.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'quantity'</span> , <span class="hljs-string">'1'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'total-amount'</span> , <span class="hljs-string">'7.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'tax-amount'</span> , <span class="hljs-string">'2.00'</span>);

    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'tax-rate'</span> , <span class="hljs-string">'1.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'discount-amount'</span>, <span class="hljs-string">'2.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'discount-rate'</span> , <span class="hljs-string">'1.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'tax-type'</span> , <span class="hljs-string">'sales'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'alternate-tax-id'</span> , <span class="hljs-string">'12345'</span>);

    $xmlSale-&gt;appendChild($xmlProduct);

    $xmlProduct = $xmlRequest-&gt;createElement(<span class="hljs-string">'product'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'product-code'</span> , <span class="hljs-string">'SKU-123456'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'description'</span> , <span class="hljs-string">'test 2 product description'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'commodity-code'</span> , <span class="hljs-string">'abc'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'unit-of-measure'</span> , <span class="hljs-string">'lbs'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'unit-cost'</span> , <span class="hljs-string">'2.50'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'quantity'</span> , <span class="hljs-string">'2'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'total-amount'</span> , <span class="hljs-string">'7.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'tax-amount'</span> , <span class="hljs-string">'2.00'</span>);

    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'tax-rate'</span> , <span class="hljs-string">'1.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'discount-amount'</span>, <span class="hljs-string">'2.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'discount-rate'</span> , <span class="hljs-string">'1.00'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'tax-type'</span> , <span class="hljs-string">'sales'</span>);
    appendXmlNode($xmlRequest, $xmlProduct,<span class="hljs-string">'alternate-tax-id'</span> , <span class="hljs-string">'12345'</span>);

    $xmlSale-&gt;appendChild($xmlProduct);

    $xmlRequest-&gt;appendChild($xmlSale);

    <span class="hljs-comment">// Process Step One: Submit all transaction details to the Payment Gateway except the customer's sensitive payment information.</span>
    <span class="hljs-comment">// The Payment Gateway will return a variable form-url.</span>
    $data = sendXMLviaCurl($xmlRequest,$gatewayURL);

    <span class="hljs-comment">// Parse Step One's XML response</span>
    $gwResponse = @<span class="hljs-keyword">new</span> SimpleXMLElement($data);
    <span class="hljs-keyword">if</span> ((string)$gwResponse-&gt;result ==<span class="hljs-number">1</span> ) {
        <span class="hljs-comment">// The form url for used in Step Two below</span>
        $formURL = $gwResponse-&gt;{<span class="hljs-string">'form-url'</span>};
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">throw</span> <span class="hljs-keyword">New</span> <span class="hljs-keyword">Exception</span>(<span class="hljs-keyword">print</span> <span class="hljs-string">" Error, received "</span> . $data);
    }

    <span class="hljs-comment">// Initiate Step Two: Create an HTML form that collects the customer's sensitive payment information</span>
    <span class="hljs-comment">// and use the form-url that the Payment Gateway returns as the submit action in that form.</span>
    <span class="hljs-keyword">print</span> <span class="hljs-string">'  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;'</span>;

    <span class="hljs-keyword">print</span> <span class="hljs-string">'

        &lt;html&gt;
        &lt;head&gt;
            &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
            &lt;title&gt;Collect sensitive Customer Info &lt;/title&gt;
        &lt;/head&gt;
        &lt;body&gt;'</span>;
    <span class="hljs-comment">// Uncomment the line below if you would like to print Step One's response</span>
    <span class="hljs-comment">// print '&lt;pre&gt;' . (htmlentities($data)) . '&lt;/pre&gt;';</span>
    <span class="hljs-keyword">print</span> <span class="hljs-string">'
        &lt;p&gt;&lt;h2&gt;Step Two: Collect sensitive payment information and POST directly to payment gateway&lt;br /&gt;&lt;/h2&gt;&lt;/p&gt;

        &lt;form action="'</span>.$formURL. <span class="hljs-string">'" method="POST"&gt;
        &lt;h3&gt; Payment Information&lt;/h3&gt;
            &lt;table&gt;
                &lt;tr&gt;&lt;td&gt;Credit Card Number&lt;/td&gt;&lt;td&gt;&lt;INPUT type ="text" name="billing-cc-number" value="4111111111111111"&gt; &lt;/td&gt;&lt;/tr&gt;
                &lt;tr&gt;&lt;td&gt;Expiration Date&lt;/td&gt;&lt;td&gt;&lt;INPUT type ="text" name="billing-cc-exp" value="1012"&gt; &lt;/td&gt;&lt;/tr&gt;
                &lt;tr&gt;&lt;td&gt;CVV&lt;/td&gt;&lt;td&gt;&lt;INPUT type ="text" name="cvv" &gt; &lt;/td&gt;&lt;/tr&gt;
                &lt;tr&gt;&lt;Td colspan="2" align=center&gt;&lt;INPUT type ="submit" value="Submit Step Two"&gt;&lt;/td&gt; &lt;/tr&gt;
            &lt;/table&gt;
        &lt;/form&gt;
        &lt;/body&gt;
        &lt;/html&gt;
        '</span>;

} <span class="hljs-keyword">elseif</span> (!<span class="hljs-keyword">empty</span>($_GET[<span class="hljs-string">'token-id'</span>])) {

    <span class="hljs-comment">// Step Three: Once the browser has been redirected, we can obtain the token-id and complete</span>
    <span class="hljs-comment">// the transaction through another XML HTTPS POST including the token-id which abstracts the</span>
    <span class="hljs-comment">// sensitive payment information that was previously collected by the Payment Gateway.</span>
    $tokenId = $_GET[<span class="hljs-string">'token-id'</span>];
    $xmlRequest = <span class="hljs-keyword">new</span> DOMDocument(<span class="hljs-string">'1.0'</span>,<span class="hljs-string">'UTF-8'</span>);
    $xmlRequest-&gt;formatOutput = <span class="hljs-keyword">true</span>;
    $xmlCompleteTransaction = $xmlRequest-&gt;createElement(<span class="hljs-string">'complete-action'</span>);
    appendXmlNode($xmlRequest, $xmlCompleteTransaction,<span class="hljs-string">'api-key'</span>,$APIKey);
    appendXmlNode($xmlRequest, $xmlCompleteTransaction,<span class="hljs-string">'token-id'</span>,$tokenId);
    $xmlRequest-&gt;appendChild($xmlCompleteTransaction);

    <span class="hljs-comment">// Process Step Three</span>
    $data = sendXMLviaCurl($xmlRequest,$gatewayURL);

    $gwResponse = @<span class="hljs-keyword">new</span> SimpleXMLElement((string)$data);
    <span class="hljs-keyword">print</span> <span class="hljs-string">'  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;'</span>;
    <span class="hljs-keyword">print</span> <span class="hljs-string">'
    &lt;html&gt;
      &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
        &lt;title&gt;Step Three - Complete Transaction&lt;/title&gt;
      &lt;/head&gt;
      &lt;body&gt;'</span>;

    <span class="hljs-keyword">print</span> <span class="hljs-string">"
        &lt;p&gt;&lt;h2&gt;Step Three: Script automatically completes the transaction &lt;br /&gt;&lt;/h2&gt;&lt;/p&gt;"</span>;

    <span class="hljs-keyword">if</span> ((string)$gwResponse-&gt;result == <span class="hljs-number">1</span> ) {
        <span class="hljs-keyword">print</span> <span class="hljs-string">" &lt;p&gt;&lt;h3&gt; Transaction was Approved, XML response was:&lt;/h3&gt;&lt;/p&gt;\n"</span>;
        <span class="hljs-keyword">print</span> <span class="hljs-string">'&lt;pre&gt;'</span> . (htmlentities($data)) . <span class="hljs-string">'&lt;/pre&gt;'</span>;

    } <span class="hljs-keyword">elseif</span>((string)$gwResponse-&gt;result == <span class="hljs-number">2</span>)  {
        <span class="hljs-keyword">print</span> <span class="hljs-string">" &lt;p&gt;&lt;h3&gt; Transaction was Declined.&lt;/h3&gt;\n"</span>;
        <span class="hljs-keyword">print</span> <span class="hljs-string">" Decline Description : "</span> . (string)$gwResponse-&gt;{<span class="hljs-string">'result-text'</span>} .<span class="hljs-string">" &lt;/p&gt;"</span>;
        <span class="hljs-keyword">print</span> <span class="hljs-string">" &lt;p&gt;&lt;h3&gt;XML response was:&lt;/h3&gt;&lt;/p&gt;\n"</span>;
        <span class="hljs-keyword">print</span> <span class="hljs-string">'&lt;pre&gt;'</span> . (htmlentities($data)) . <span class="hljs-string">'&lt;/pre&gt;'</span>;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">print</span> <span class="hljs-string">" &lt;p&gt;&lt;h3&gt; Transaction caused an Error.&lt;/h3&gt;\n"</span>;
        <span class="hljs-keyword">print</span> <span class="hljs-string">" Error Description: "</span> . (string)$gwResponse-&gt;{<span class="hljs-string">'result-text'</span>} .<span class="hljs-string">" &lt;/p&gt;"</span>;
        <span class="hljs-keyword">print</span> <span class="hljs-string">" &lt;p&gt;&lt;h3&gt;XML response was:&lt;/h3&gt;&lt;/p&gt;\n"</span>;
        <span class="hljs-keyword">print</span> <span class="hljs-string">'&lt;pre&gt;'</span> . (htmlentities($data)) . <span class="hljs-string">'&lt;/pre&gt;'</span>;
    }
    <span class="hljs-keyword">print</span> <span class="hljs-string">"&lt;/body&gt;&lt;/html&gt;"</span>;

} <span class="hljs-keyword">else</span> {
  <span class="hljs-keyword">print</span> <span class="hljs-string">"ERROR IN SCRIPT&lt;BR&gt;"</span>;
}

  <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sendXMLviaCurl</span><span class="hljs-params">($xmlRequest,$gatewayURL)</span> </span>{
   <span class="hljs-comment">// helper function demonstrating how to send the xml with curl</span>

    $ch = curl_init(); <span class="hljs-comment">// Initialize curl handle</span>
    curl_setopt($ch, CURLOPT_URL, $gatewayURL); <span class="hljs-comment">// Set POST URL</span>

    $headers = <span class="hljs-keyword">array</span>();
    $headers[] = <span class="hljs-string">"Content-type: text/xml"</span>;
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); <span class="hljs-comment">// Add http headers to let it know we're sending XML</span>
    $xmlString = $xmlRequest-&gt;saveXML();
    curl_setopt($ch, CURLOPT_FAILONERROR, <span class="hljs-number">1</span>); <span class="hljs-comment">// Fail on errors</span>
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, <span class="hljs-number">1</span>); <span class="hljs-comment">// Allow redirects</span>
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-number">1</span>); <span class="hljs-comment">// Return into a variable</span>
    curl_setopt($ch, CURLOPT_PORT, <span class="hljs-number">443</span>); <span class="hljs-comment">// Set the port number</span>
    curl_setopt($ch, CURLOPT_TIMEOUT, <span class="hljs-number">30</span>); <span class="hljs-comment">// Times out after 30s</span>
    curl_setopt($ch, CURLOPT_POST, <span class="hljs-number">1</span>);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlString); <span class="hljs-comment">// Add XML directly in POST</span>

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, <span class="hljs-number">2</span>);

    <span class="hljs-comment">// This should be unset in production use. With it on, it forces the ssl cert to be valid</span>
    <span class="hljs-comment">// before sending info.</span>
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, <span class="hljs-number">0</span>);

    <span class="hljs-keyword">if</span> (!($data = curl_exec($ch))) {
        <span class="hljs-keyword">print</span>  <span class="hljs-string">"curl error =&gt;"</span> .curl_error($ch) .<span class="hljs-string">"\n"</span>;
        <span class="hljs-keyword">throw</span> <span class="hljs-keyword">New</span> <span class="hljs-keyword">Exception</span>(<span class="hljs-string">" CURL ERROR :"</span> . curl_error($ch));

    }
    curl_close($ch);

    <span class="hljs-keyword">return</span> $data;
  }

  <span class="hljs-comment">// Helper function to make building xml dom easier</span>
  <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">appendXmlNode</span><span class="hljs-params">($domDocument, $parentNode, $name, $value)</span> </span>{
        $childNode      = $domDocument-&gt;createElement($name);
        $childNodeValue = $domDocument-&gt;createTextNode($value);
        $childNode-&gt;appendChild($childNodeValue);
        $parentNode-&gt;appendChild($childNode);
  }

</code>
</pre>
</div>