2016-10-26 18 views
1

這是我的第一個問題!PHP文件不會從HTML PayPal表單中抽取'AMOUNT'

我在創建可運行的PayPal結帳時出現了問題,它包含一個PHP文件和HTML文件(原始代碼要長得多,但我已將它煮沸並在此簡化)。觸發後,PHP文件會發送一封電子郵件給我,並提供訂單詳細信息,然後指導客戶結帳。這與AMOUNT似乎不希望拉入PHP文件的事實完全相同。

HTML文件簡單地具有用於每個字段的字符串的輸入(商品名稱,金額等):

<html> 
<head> 
<title></title> 
</head> 

<body> 

<form name="contactform" id="contactform" action="test.php" method="post" style="float:initial" > 

<input type="hidden" id="cmd" name="cmd" value="_xclick"> 
<input type="hidden" id="business" name="business" value="[email protected]"> 
<input type="hidden" id="item_name" name="item_name" value="Test Item"> 
<input type="hidden" id="currency_code" name="currency_code" value="USD"> 
<input type="hidden" id="amount" name="amount" value="1.00"> 
<input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" id="button" style="margin-top:30px" name="submit" alt="Make payments with PayPal - it's fast, free and secure!" > 

</form> 

</body> 
</html> 

PHP的文件,然後把這個數據到一個數組,它然後發送到貝寶:

<?php 

if(isset($_POST['item_name'])) { 


$query_data = array(
'amount' => $_POST['amount'], 
    'business' => '[email protected]', 
    'cmd' => '_xclick',  
    'currency_code' => 'USD', 
    'item_name' => $_POST['item_name'], 

); 

} 

header('Location: https://www.paypal.com/cgi-bin/webscr' . http_build_query($query_data)); 
exit; 

?> 

這拉其他所有東西,包括item_name,所以我完全難住爲什麼它不適用於'數量'。

如果有人有任何想法,我會非常感激!

謝謝!

+0

沒有什麼我可以看到在這種形式,將阻止'量'通過表單傳遞。然而,我只想說,除非是某種自由形式的「支付你喜歡的東西」字段,否則你絕不應該依賴任何東西在某處發佈的數量。這種邏輯都應該在服務器端處理。僅僅因爲表單域是隱藏的,並不意味着有人不能改變這個值。 –

+0

根據PayPal開發者指南(https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/formbasics/),必須使用POST(而非GET)發送表單:「重要:不要更改這些值,所有付款按鈕和Cart上載命令都需要這些屬性。「我會更好奇爲什麼任何字段都顯示正確。你可能想嘗試一個POST。我在代碼中看不到任何其他問題。 –

+0

用於測試put print_r($ _ POST);接近你的PHP文件的頂部,以查找是否$ _POST ['amount']甚至被傳遞,或者它只是空的ps ..按照die();否則你的重定向會阻止你看到它 –

回答

0

對test.php底部的頭函數的調用缺少URL和查詢字符串之間的問號。

PHP手冊(http://php.net/manual/en/function.http-build-query.php)沒有明確說明http_build_query函數的返回值是否包含問號,但示例顯示它沒有。由於'amount'變量是第一個列出的,所以有可能它沒有註冊任何解析PayPal查詢字符串的代碼,但是其他名稱 - 值對正在被讀取,因爲&字符正在分隔它們。 PayPal的HTML變量文檔確實說明,如果用戶沒有發送,則會提示用戶輸入金額。