2013-11-01 4 views
2

이전에 페이팔 통합을 해 본 적이 없지만 다른 게이트웨이와 함께 작업했습니다.PayPal 금액 변조

다른 게이트웨이에는 게시물 형식으로 보낸 해시가 있습니다. 이로 인해 사람들이 데이터를 변경 (즉, 금액 변경)하는 것을 방지합니다.

이 변조가 페이팔과 함께 중단되면 해시가되지 않습니다.

<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr"> 
    <input type="hidden" value="_xclick" name="cmd"> 
    <input type="hidden" value="online****@theg*****.com" name="business"> 
    <!-- <input type="hidden" name="undefined_quantity" value="1" /> --> 
    <input type="hidden" value="Order" name="item_name"> 
    <input type="hidden" value="NA" name="item_number"> 
    <input type="hidden" value="22.16" name="amount"> 
    <input type="hidden" value="5.17" name="shipping"> 
    <input type="hidden" value="0" name="discount_amount">   
    <input type="hidden" value="0" name="no_shipping"> 
    <input type="hidden" value="No comments" name="cn"> 
    <input type="hidden" value="USD" name="currency_code"> 
    <input type="hidden" value="http://XXX/XXX/XXX/paypal/return" name="return"> 
    <input type="hidden" value="2" name="rm">  
    <input type="hidden" value="11255XXX" name="invoice"> 
    <input type="hidden" value="US" name="lc"> 
    <input type="hidden" value="PP-BuyNowBF" name="bn"> 
    <input type="submit" value="Place Order!" name="finalizeOrder" id="finalizeOrder" class="submitButton"> 
</form> 

어떻게 페이팔에 게시하기 전에 금액을 수정하는 사람들을 막을 수 있습니까? 즉, 금액은 100이되어야하지만 사람들은 1로 변경해야합니다.

+0

대부분의 사이트에서 사용자를 페이팔로 리디렉션하는 다른 페이지를 소개하는 이유는이 페이지가 가장 최신 정보를 가지고 있기 때문입니다 자동으로 자바 스크립트를 사용하여 게시물을 수행합니다. 기본적으로 : 페이지> 리디렉션> 페이팔을 확인하십시오. 사용자가 매개 변수를 변경할 수 있습니까? 예.당신이 걱정하는 경우에 나는 Paypal 's Express 체크 아웃 방법을 조사 할 것입니다. 모든 정보가 서버 측을 통해 전송됩니다. –

답변

0

간단한 인보이스 시스템을 구현하면됩니다. 데이터베이스에 invoices (ID, User_Id, Invoice_Value, Payment_Status)이라는 테이블이 있어야합니다 (예).

사용자가 결제 페이지로 갈 때, 지불해야하는 총 금액과 초기 지불 상태가 "보류 중"인 항목을 db 테이블에 삽입해야합니다. 송장 테이블 행을 삽입 한 후 마지막 삽입 ID와 $invoice_id이라는 변수를 가져옵니다.

이제

하면 출력은 HTML 페이팔 체크 아웃 버튼의 형태와 숨겨진 입력 필드 중 하나가 다음과 같이해야한다 : 이제

<input type="hidden" value="<?php echo $invoice_id; ?>" name="custom"> 

, 페이팔이 반환 URL에 IPN에 응답 할 때, 당신의 IPN 처리기해야 이 방법으로 뭔가 행동하십시오.

<?php 

// read the post from PayPal system and add 'cmd' 
$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
    $value = urlencode(stripslashes($value)); 
    $req .= "&$key=$value"; 
} 

// post back to PayPal system to validate 
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 

$fp = fsockopen ('ssl://sandbox.www.paypal.com', 443, $errno, $errstr, 30); 
if (!$fp) { 
    // HTTP ERROR 
} 
else 
{ 
    // Make Request To PayPal 
    fputs ($fp, $header . $req); 
    while (!feof($fp)) 
    { 
     // Read Response 
     $res = fgets ($fp, 1024); 

     // Check Response 
     if (strcmp ($res, "VERIFIED") == 0) 
     { 
      // PAYMENT VALIDATED & VERIFIED! 

      // Load the Invoice_Value from invoices table for $_POST['custom'] 
      // and compare it with paypal posted amount held in $_POST['mc_gross'] 
      // if it matches, paypal has authenticated the payment and the value has not been tampered with 
      // update the invoice table and set the payment status 
     } 
     else if (strcmp ($res, "INVALID") == 0) 
     { 
      // PAYMENT INVALID & INVESTIGATE MANUALY! 
     } 
    } 
    fclose ($fp); 
} 

?> 
+0

나는 이것이 작동 할 것이라는 점에 동의하지만 초기 지불을 중단하지는 않을 것입니다. 정말 처음 지불을 중지하고 싶습니다. 그렇지 않으면 주문에 대한 환불을 수동으로 처리해야합니다. 하지만 주문 금액에 대해 지불 한 금액을 확인하고 싶습니다. – user2183216

5

이 문제를 방지하려면 몇 가지 방법이 있습니다. 첫 번째는 PayPal의 Instant Payment Notification (IPN)을 사용하고 있습니다. 이것을 사용하여 PayPal이 귀하에게 기대하는 것과 일치하는지 확인하기 위해 다시 게시 한 가격을 비교할 수 있습니다. 일치하지 않으면 주문을 취소합니다.

예 워크 플로우 :

  • 사용자 주문 항목이와 $ 0.01
  • 주문에 가격을 수정 $ 0.01의 가격을 보여줍니다 페이팔에 게시
  • 사용자는 가격을 받아 $ 0.01
  • 페이팔 전화를 지불 귀하의 IPN URL 및 게시물 거래 내역
  • 귀하의 IPN은 PayPal이 귀하가 예상 한 ($ 0.01) verus를받은 가격을 확인합니다 (> $ 0.01). 일치하지 않기 때문에, 당신이 순서를

PayPal IPN Flow

또 다른 옵션을 취소, 페이팔의 Button APIbuttons 암호화, 동적 만드는 데 사용하는 것입니다. 이들은 귀하의 페이지에 삽입되고 사용자가 주문을하기 위해 클릭합니다. 암호화되어 있기 때문에 사용자는 트랜잭션 중에 소스 코드를 안정적으로 수정할 수 없습니다. 이에 대한 좋은 예가 answer입니다. 또한이 정보를 위에 나열된 IPN 옵션과 결합하여 거래 감사를 수행 할 수 있습니다.

+1

동의하지만, 지불은 계속 진행되며 환급받을 수 있지만 30 센트를 내야합니다. :) –