0

我试图测试我的 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 回显:

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
4

2 回答 2

1

您是否尝试通过 Direct 或 Form-integration 方法进行交易?看起来您与 Purchse Urls 混淆了...更新您的购买 Urls 从:

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

并确保它们是应有的样子。

于 2011-09-19T16:08:24.650 回答
0

您需要确保发布到有效的 Sage Pay 帐户并确保供应商名称正确,以阻止 5005 错误。

VendorTxCode 字段限制为 40 个字符。如果您没有正确构建字符串,您可能会将 VendorTxCode & 符号之后的所有内容错误地发布到您的字段中。

于 2014-05-01T08:13:27.217 回答