Reputation: 10288
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
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
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