ошибка тестирования мудреца - PullRequest
0 голосов
/ 17 февраля 2011

я пытаюсь проверить мою интеграцию с Sage Pay, но безрезультатно.

Вот мой код:

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();
}

при использовании "TEST" я получаю ошибку:

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

при использовании "TTEST" я получаю сообщение об ошибке:

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

Кажется, я вообще не могу этого понять.Если у кого-то есть какие-либо идеи, это было бы очень признательно.

РЕДАКТИРОВАТЬ: $ stuff echos out:

VendorTxCode=fdsdgfd&Amount=45.60&Currency=GBP&Description=description...&SuccessURL=http://localhost/ecom_framework/&FailureURL=http://localhost/ecom_framework/&CustomerEmail=luke@actwebdesigns.co.uk&VendorEmail=luke@actwebdesigns.co.uk&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 luke@fgfdgf.co.uk

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Вы пытаетесь совершить транзакцию прямым или интеграционным способом?Похоже, вы перепутали URL-адреса покупок ... обновите URL-адреса покупок по адресу:

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

и убедитесь, что они являются такими, какими они должны быть.

0 голосов
/ 01 мая 2014

Вам необходимо убедиться, что вы отправляете сообщение в действительную учетную запись Sage Pay, и чтобы имя поставщика было правильным для устранения ошибки 5005.

Поле VendorTxCode ограничено 40 символами.Если вы не строите свою строку правильно, вы можете отправить все после амперсанда VendorTxCode в ваше поле по ошибке.

...