2016-10-26 3 views
1

これは私の最初の質問です!PHPファイルはHTML PayPalフォームから「AMOUNT」を引き取らない

PHPファイルとHTMLファイルで構成されたPayPalチェックアウトの作成に問題があります(元のコードははるかに長くなりましたが、ここではそれを単純化してここで簡略化しています)。 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ファイルは、それがその後のPayPalへ送信する配列にこのデータを置く:

<?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

このフォームには、「amount」がフォームを通過しないようにすることはできません。しかし、私はちょうど何か自由形式の「あなたが好きなものを支払う」フィールドでない限り、どこかに投稿されているものの量に決して頼るべきではないと言いたいと思います。そのようなロジックはすべてサーバー側で処理する必要があります。フォームフィールドが隠されているという理由だけで、誰かが値を変更できないというわけではありません。 –

+0

PayPal開発者ガイド(https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/formbasics/)によると、フォームはPOST(GETではなく)を使用して送信する必要があります。 :これらの値は変更しないでください。これらの属性は、すべての支払いボタンとカートのアップロードコマンドに必要です。私はもっ​​と奇妙なことがありますなぜフィールドのいずれかが正しく表示されます。 POSTを試してみてください。私はコードに他の問題は見当たりません。テストputのために –

+0

print_r($ _ POST); $ _POST ['amount']が渡されたかどうかを調べるためにPHPファイルの最上部近くにあるか、空であるかどうかps。die();それ以外の場合は、リダイレクトはあなたに表示されないようにします –

答えて

0

test.phpの下にあるheader関数を呼び出すと、URLとクエリ文字列の間に疑問符がありません。

PHPマニュアル(http://php.net/manual/en/function.http-build-query.php)は、http_build_query関数の戻り値に疑問符が含まれているかどうかを明示的には示していませんが、例では示していません。

'amount'変数が最初にリストされているので、PayPalでクエリ文字列を解析しているコードに登録されていない可能性があります。また、アンパサンドがそれらを区切っているので、 PayPalのHTML変数文書には、金額が送信されていない場合に金額の入力を求めるメッセージが表示されます。

関連する問題