Phil Jackson
Phil Jackson

Reputation: 10288

sage pay testing error

im trying to test my sage pay integration but to no avail.

Here is my code:

private function init_sagepay(){
    extract( static::$post );
    $settings = global_data::get_settings();
    $strConnectTo = "TEST";
    $strVirtualDir = "VSPForm-Kit";
    $strYourSiteFQDN = global_data::get_web_root();  
    $strVSPVendorName = $settings->sagepay_vendor;
    $strEncryptionPassword = "z5phUfjdEB5ZX2ZY";
    $strCurrency = static::$currency;
    $strVendorEMail = $settings->sagepay_email;
    $strTransactionType = "PAYMENT";

    $strProtocol = "2.23";
    if ( $strConnectTo == "LIVE" ) 
        $strPurchaseURL = "https://live.sagepay.com/gateway/service/vspform-register.vsp"; 
    elseif ( $strConnectTo == "TEST" )
        $strPurchaseURL = "https://test.sagepay.com/gateway/service/vspform-register.vsp";
    elseif( $strConnectTo == 'TTEST' )
        $strPurchaseURL = 'https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorRegisterTx';
    else
        $strPurchaseURL = "https://test.sagepay.com/Simulator/VSPDirectGateway.asp";

    $details = self::get_member_details();
    $thisOrderDeteails = 'order details...';
    $ThisVendorTxCode = 'fdsdgfd';
    $ThisAmount = $total;
    $ThisCurrency = static::$currency;
    $ThisDescription = "description...";
    $ThisCustomerEmail = $details->email;
    $ThisCustomerName = $details->first_name . " " . $details->last_name;
    $ThisVendorEmail = $strVendorEMail;
    $ThisApplyAVSCV2 = 1;
    $ThisApply3DSecure = 1;
    $ThisDeliveryAddress = $address_line_1 . ", " . $address_line_2 . ", " . $address_line_3 . ", " . $address_line_4 . ", " . $country;
    $ThisDeliveryPostCode = $postcode;
    $address_full = $ThisDeliveryAddress . ' ' . $ThisDeliveryPostCode;

    $ThisBillingAddress = $details->address_line_1 . ", " . $details->address_line_2 . ", " . $details->address_line_3 . ", " . $details->address_line_4 . ", " . $details->country;
    $ThisBillingPostCode = $details->postcode;

    $ThisContactNumber = $details->home_number;
    $ThisContactFax = $details->fax_number;
    $ThisAllowGiftAid = '';

    $ThisShoppingBasket = 'Basket=' . count( $items ) . ':';
    foreach( $items as $item ) {
        preg_match( "#^\[([^\]]+)\]\[([^\]]+)\]\[([^\]]+)\]$#is", $item, $match );
        $ThisShoppingBasket .= $match[2] . ':' . $match[1] . ':' . static::$cp . ( $match[3] / $match[1] ) . static::$cp . ':0.00:' . static::$cp . $match[3] . ':'; 
    }
    $ThisShoppingBasket .= 'Delivery:1:£4.99';

    $stuff = "VendorTxCode=" . $ThisVendorTxCode . "&";
    $stuff .= "Amount=" . $ThisAmount . "&";
    $stuff .= "Currency=" . $ThisCurrency . "&";
    $stuff .= "Description=" . $ThisDescription . "&";
    $stuff .= "SuccessURL=" . $strYourSiteFQDN . "&";
    $stuff .= "FailureURL=" . $strYourSiteFQDN . "&";

    $varArray = array('CustomerEmail','VendorEmail','CustomerName','DeliveryAddress','DeliveryPostCode','BillingAddress','BillingPostCode','ContactNumber','ContactFax','AllowGiftAid','ApplyAVSCV2','Apply3DSecure');
    foreach( $varArray as $var ) {
        if( ${'This' . $var} ) {
            $stuff .= $var . '=' . ${'This' . $var} . '&';
        }
    }
    if($ThisShoppingBasket) {
        $stuff .= $ThisShoppingBasket;
    }
    $stuff .= "EMailMessage=For an update on the status of your order please email us at $ThisVendorEmail";
    echo $stuff;
    $crypt = self::base64Encode( self::SimpleXor( $stuff,$strEncryptionPassword ) );    
    ob_start();
    ?>
    <form action="<?php echo $strPurchaseURL; ?>" method="post" id="sageForm" name="form1">
        <input TYPE="hidden" name="VPSProtocol" value="<?php echo $strProtocol; ?>">
        <input TYPE="hidden" name="TxType" value="<?php echo $strTransactionType; ?>">
        <input TYPE="hidden" name="Vendor" value="<?php echo $strVSPVendorName; ?>">
        <input TYPE="hidden" name="Crypt" value="<?php echo $crypt; ?>">    
        <input name="sbbutton" type="submit" value="Checkout" class="wpcf7-submit">                  
    </form>     
    <?php
    return ob_get_clean();
}

when using "TEST" im getting an error:

Status Detail:  5005 : The Vendor configuration is missing or invalid

when using "TTEST" im getting an error:

VPSProtocol=2.23
Status=INVALID
StatusDetail=The VendorTxCode you supplied is an invalid length.  VendorTxCodes should be between 1 to 40 characters long

I cannot seem to figure this out at all. If anyone has any ideas it would be greatfuly appreciated.

EDIT: $stuff echos out:

VendorTxCode=fdsdgfd&Amount=45.60&Currency=GBP&Description=description...&SuccessURL=http://localhost/ecom_framework/&FailureURL=http://localhost/ecom_framework/&[email protected]&[email protected]&CustomerName=Luke Snowden&DeliveryAddress=mansfield, nottinghamshire, mansfield, nottinghamshire, United Kingdom&DeliveryPostCode=ng19 8pw&BillingAddress=mansfield, nottinghamshire, mansfield, nottinghamshire, United Kingdom&BillingPostCode=ng19 8pw&ContactNumber=0165656567&ApplyAVSCV2=1&Apply3DSecure=1&Basket=3:Blue Hat - black :2:£2£:0.00:£4.00:Blue Hat - brown :3:£3£:0.00:£9.00:Blue Hat - grey :4:£4£:0.00:£16.00:Delivery:1:£4.99EMailMessage=For an update on the status of your order please email us at [email protected]

Upvotes: 0

Views: 6171

Answers (2)

Random Guest
Random Guest

Reputation: 1

You need to ensure you are posting to a valid Sage Pay account and ensure that the vendorname is correct to stop the 5005 error.

The VendorTxCode field is limited to 40 characters. If you are not building your string correctly you may be posting everything after the VendorTxCode ampersand into your field in error.

Upvotes: 0

xmaestro
xmaestro

Reputation: 1104

Are you trying to make a transaction through Direct or Form-integration method? Looks like you have made a mix-up with the Purchse Urls... update your purchase Urls from :

http://www.sagepay.com/developers/

and make sure they are what they should be.

Upvotes: 1

Related Questions