2013-05-24 2 views
1

Я настраиваю простой PHP форма для отправки транзакций в SagePay используя форму интеграции, то cryptkey настроен следующим образом:SagePay форма интеграции - ошибка 3045

$PAYMENT_CRYPT = 
"VendorTxCode=website 
&Amount=$total 
&Currency=GBP 
&Description=Ticket 
&SuccessURL=EDITED-OUT/registered-thanks 
&FailureURL=EDITED-OUT/registered-fail 
&BillingSurname=$surname 
&BillingFirstnames=$firstname 
&BillingAddress1=$address1 
&BillingCity=$city 
&BillingPostCode=$postcode 
&BillingCountry=UK 
&DeliverySurname=$surname 
&DeliveryFirstnames=$firstname 
&DeliverAddress1=$address1 
&DeliveryCity=$city 
&DeliveryPostCode=$postcode 
&DeliveryCountry=UK 
&AllowGiftAid=1" 

Форма:

<form action="https://live.sagepay.com/gateway/service/vspform-register.vsp" method="POST" id="SagePayForm" name="SagePayForm"> 
    <input type="hidden" name="VPSProtocol" value="2.23" /> 
    <input type="hidden" name="TxType" value="PAYMENT" /> 
    <input type="hidden" name="Vendor" value="MYVENDORID" /> 
    <input type="hidden" name="Crypt" value="<?= $PAYMENT_CRYPT ?>">  
    <input type="image" src="images/buynow-sagepay.png" /> 
</form> 

Мудрец дает мне ошибку, как показано ниже, что не имеет смысла, поскольку валютное поле наиболее точно передается.

Эта попытка транзакции потерпела неудачу. Мы не можем перенаправить вас обратно в интернет-магазин, из которого вы покупаете. Подробности отказа приведены ниже.

Статус: Malformed

Статус Detail: 3045: Поле валюты отсутствует.

Любая помощь была бы высоко оценена!

Рик

+0

Эй ты сортировать это? У нас такая же проблема, но странно только с одним из наших учетных данных SP. – QFDev

ответ

2

вы, кажется, не быть шифрования данных на всех. Следующее поможет вам проверить и включить в свой код соответствующие функции.

<?php 
function pkcs5_pad($text, $blocksize) 
{ 
    $pad = $blocksize - (strlen($text) % $blocksize); 
    return $text . str_repeat(chr($pad), $pad); 
} 

function encryptFieldData($input) 
{ 
    $key = "use your SagePAY encryption key here"; 
    $iv = $key; 

    $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, ""); 
    if (mcrypt_generic_init($cipher, $key, $iv) != -1) 
    { 
     $cipherText = mcrypt_generic($cipher,$input); 
     mcrypt_generic_deinit($cipher); 

     $enc = bin2hex($cipherText); 
    } 
    return $enc; 
} 
$str = "Currency=GBP"; 
$datapadded = pkcs5_pad($str,16); 
$cryptpadded = "@" . encryptFieldData($datapadded); 
?> 
<html> 
    <form name="pp_form" action="SagePay test url" method="post"> 
    <input name="VPSProtocol" type="hidden" value=3.00 /> 
    <input name="TxType" type="hidden" value=PAYMENT /> 
    <input name="Vendor" type="hidden" value="YOUR SAGEPAY ACCOUNT NAME HERE"  /> 
    <input name="Crypt" type="hidden" value=<?php echo $cryptpadded;?> /> 
    <p>Click here to submit 
     <input type="submit" value="here"> 
    </p> 
    </form> 
</html> 

Вы можете увидеть более полное объяснение здесь SagePay form integration with PHP

+0

У меня такая же проблема, что некоторые могут помочь http://stackoverflow.com/questions/25940754/status-detail-3045-the-currency-field-is-missing – Prathyush

 Смежные вопросы

  • Нет связанных вопросов^_^