我正在使用Cashflows在線支付系統,並試圖根據網頁上的表單向服務器提交動態生成的價格。但是,在我需要發送到Cashflows終端的POST請求中,我需要包含一個帶有散列鍵的輸入字段。我的問題是散列基於密鑰,並且該密鑰是以其中一個參數作爲價格生成的(請參見下文),如integration guide所示。PHP將更新的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'];
?>
形成動態生成的價格,他們integration example的修改版本:
<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>
你需要將它發送到那裏的服務器,而不是你的。 – 2013-03-15 15:56:23
這正是我想要做的 - 我首先需要通過我的服務器發送它,以便我可以從私有/受保護密鑰生成散列 – jacktheripper 2013-03-15 16:00:21
然後爲什麼在您的代碼中有