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 파일을 다음 다음 페이팔에 보내는 배열에 데이터를 넣습니다 :

<?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'가 양식을 통과하지 못하는 것으로 보이는 것이 없습니다. 그러나, 나는 당신이 어떤 형태의 자유형 "pay you like you"필드가 아니라면 어딘가에 게시되는 금액에 의존하지 않아야한다고 말하고 싶습니다. 그런 논리는 모두 서버 측에서 처리해야합니다. 양식 필드가 숨겨져 있다고해서 누군가가 값을 변경할 수 없다는 것을 의미하지는 않습니다. –

+0

PayPal 개발자 가이드 (https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/formbasics/)에 따르면 양식은 GET이 아닌 POST를 사용하여 보내야합니다. "중요 :이 값은 변경하지 마십시오.이 속성은 모든 지불 버튼과 장바구니 올리기 명령에 필요합니다. " 나는 왜 더 많은 필드가 올바르게 나타나는지 궁금 할 것이다. POST를 시도 할 수 있습니다. 코드에 다른 문제는 보이지 않습니다. 테스트 용 put –

+0

print_r ($ _ POST); PHP 파일의 맨 윗 부분에서 $ _POST [ 'amount']가 전달되었는지, 아니면 그냥 빈 경우 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 변수 문서에는 금액이 전송되지 않는 경우 사용자에게 금액을 묻는 메시지가 표시됩니다.