我正在使用 Cashflows 在线支付系统,并尝试根据网页上的表单向他们的服务器提交动态生成的价格。但是,在我需要发送到 Cashflows 终端的 POST 请求中,我需要包含一个带有哈希键的输入字段。我的问题是哈希是基于密钥的,并且该密钥是使用其中一个参数生成的,即价格(见下文),正如集成指南所建议的那样。
如何使用 PHP 将带有以下 POST 参数的表单提交到门户网站?
PHP:
<?php
$secret_key = 'foobar';
$store_id = $_POST['store_id'];
$cart_id = $_POST['cart_id'];
$amount = $_POST['amount'];
$currency = $_POST['currency'];
$test = $_POST['test'];
$description = $_POST['description'];
echo $check = hash('sha256', $secret_key . ':' . $store_id . ':' . $cart_id . ':' . $amount . ':' . $currency . ':' . $test . ':' . $description);
$price = $_POST['price'];
$qty = $_POST['qty'];
$carriage_amount = $_POST['carriage_amount'];
$postage_and_packaging = $_POST['postage_and_packaging'];
$name = $_POST['name'];
$address = $_POST['address'];
$postcode = $_POST['postcode'];
$country = $_POST['country'];
$tel = $_POST['tel'];
$email = $_POST['email'];
$amount = $_POST['amount'];
?>
具有动态生成价格的表格,其集成示例的修改版本:
<form action="submit.php" method="POST">
<input type="hidden" name="store_id" value="5939523" />
<input type="hidden" name="cart_id" value="captubes" />
<input type="hidden" name="currency" value="GBP" />
<input type="hidden" name="test" value="1" />
<input type="hidden" name="description" value="Fruush" />
<input type="hidden" name="check" value="SOME KEY HERE" />
<script type="text/javascript" type="text/javascript">
// The next two functions round numbers to numerical formatting. They do not need to be altered when adding or removing products.
function roundOff2(value, precision) {
return places(value,1,precision);
}
function places(X, M, N) {
var T, S=new String(Math.round(X*Number("1e"+N)))
while (S.length<M+N) S='0'+S
var y = S.substr(0, T=(S.length-N));
if(N>0)
{
y += '.' + S.substr(T, N);
}
return y;
}
// This function checks for empty quantities. It does not need to be altered when adding or removing products.
function CheckNull2(value) {
if (value == "") {
value = "0";
}
return value;
}
// This function defines the postage and packaging location. It does not need to be altered when adding or removing products.
function typeOfCarriage(x,whereabouts) {
x.carriage_amount.value = whereabouts;
}
// This function addeds the postage and packaging to the total price of the products. Add new postage rates here, and also edit further down the page to add them to the table.
function calculate(x) {
basicprice = calc(x);
if( Number(basicprice) > 0 ) {
var postage_and_packaging = 0;
switch (x.carriage_amount.value) {
case "uk" :
postage_and_packaging = 1.99;
break;
case "europe" :
postage_and_packaging = 2.99;
break;
default :
postage_and_packaging = 4.99;
break;
}
x.amount.value = Number(basicprice) + postage_and_packaging;
} else {
x.amount.value = "0";
}
x.amount.value = roundOff2(x.amount.value,2);
}
// The standard price, exluding postage and packaging is calculated here. It does not need to be altered when adding or removing products.
function calc(x) {
var b = Number(CheckNull2(x.price.value));
var c = Number(CheckNull2(x.qty.value));
var a = (b * c);
return a;
}
</script>
<p>
<h3>Number of caps</h3>
Tube of 6 caps: £4.99 - Quantity: <input name="price" value="4.99" type="hidden" /><input name="qty" size="3" value="1" />
</p>
<p>
<h3>Postage & Packaging:</h3>
<input name="carriage_amount" value="uk" type="hidden">
<input checked="checked" name="postage_and_packaging" onClick="typeOfCarriage(this.form,'uk');calculate(this.form)" value="" type="radio" />UK (£1.99)
<input name="postage_and_packaging" onClick="typeOfCarriage(this.form,'europe');calculate(this.form)" value="" type="radio" />Europe(£2.99)
<input name="postage_and_packaging" onClick="typeOfCarriage(this.form,'world');calculate(this.form)" value="" type="radio" />Rest of World (£4.99)
</p>
<p>
<h3>Your Details (you will get a chance to change these):</h3>
<span style="width: 100px; float: left;">Name:</span> <input type="text" name="name" /><br />
<span style="width: 100px; float: left;">Address:</span> <input type="text" name="address" /><br />
<span style="width: 100px; float: left;">Postcode:</span> <input type="text" name="postcode" /><br />
<span style="width: 100px; float: left;">Country:</span> <input type="text" name="country" /><br />
<span style="width: 100px; float: left;">Telephone:</span> <input type="text" name="tel" /><br />
<span style="width: 100px; float: left;">Email:</span> <input type="text" name="email" />
</p>
<input name="calcButton" onClick="calculate(this.form)" value="Calculate Total" type="button"> Total: £ <input type="text" name="amount" value="6.98" />
<input value="Checkout" onClick="calculate(this.form)" type="submit" />
</form>