Я создаю простую форму PHP для отправки транзакций в sagepay с помощью интеграции форм, cryptkey устанавливается следующим образом:
$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
Статус: 3045: Поле «Валюта» отсутствует.
Любая помощь приветствуется!
стог
вы вообще не шифруете свои данные. Следующее поможет вам проверить и включить в свой код соответствующие функции.
<?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 с PHP