2013-07-31 5 views
-2

이 내가 특정 스크립트에 대해 묻고 싶다 헤이, 여기있다 : 나는 모든 것을 이해페이팔 ipn 개발자 스크립트 오래?

http://www.phpbuilder.com/articles/application-architecture/shopping-carts/setting-up-paypal-ipn-in-php.html

, 그것은 구조화 아주 좋은 정말 좋아 내가, 내가뿐만 아니라 매우 안전 보인다, 하지만이 다른 부분에 대해 하나의 질문이 있습니다.

} else { 

     // PayPal payment is valid 
     // Process order here 

    } 

여기서해야 할 일은 무엇입니까? 데이터베이스에 값을 삽입 하시겠습니까 ?? 하지만이 전에했다?! :

} else { 
     // Transaction not processed, store it in the database 
     $payer_email = mysql_real_escape_string($_POST[‘payer_email’]); 
     $gross = mysql_real_escape_string($_POST[‘mc_gross’]); 

인사말!

편집 : 좋아요, 이것으로 재연 공격을 막을 수 있습니까? :

if($f[‘count’] > 0) { 
     $errors[] = “Transaction already processed”; 

    } else { 
     if (count($errors) > 0) { 

     // IPN data is incorrect - possible fraud 
     // It is a good practice to send the transaction details to your e-mail and investigate manually 

     $message = "IPN failed fraud checks"; 
     mail(‘[email protected]’, 'IPN Fraud Warning', $message, $headers); 
     } else { 

     // Transaction not processed, store it in the database 
     $payer_email = mysql_real_escape_string($_POST[‘payer_email’]); 
     $gross = mysql_real_escape_string($_POST[‘mc_gross’]); 

     $insert = mysql_query(“INSERT INTO transactions (txt_id, payer_email, mc_gross) VALUES 
     (‘$txt_id’,’$payer_email’,’$mc_gross’)”); 

     } 
    } 

이 점에 대해 어떻게 생각하십니까?

+0

이 코드 질문이나 비즈니스 프로세스 질문입니까? –

+0

저는 비즈니스 파트 타임까지 db – user2602535

+0

에 값을 삽입하지 않을 때,이 else-part에서 무엇을해야할지 묻고 싶었습니다. –

답변

0

문제의 위의 코드는 다음과 같습니다 $fp이 false 인 경우, 다음을 설정할 수 없습니다 페이팔의 IPN 검증 시스템에 대한 연결을 의미하기 때문에 당신은 다른 내에서 모든 것을 배치해야

if (!$fp) { 
// HTTP ERROR 
} else { 

.

(페이팔 고려) 지불이 실제로 유효한 경우, 우리는 또한 확인 다른 내에서 검사가 있다는 것을 볼 수 있습니다 통해 다음과 같습니다

if (strcmp ($res, "VERIFIED") == 0) { 
// PAYMENT VALID 
} 

사용자가 다음에 올 때 IPN의 아이디어는 이것이다 html 버튼 코드를 사용하면 paypal의 웹 사이트로 연결됩니다.

일반적으로 숨겨진 값이 있습니다 (또는 호스팅 된 버튼을 사용하는 경우 paypal의 웹 사이트에 대신 저장 됨). paypal에서 결제가 처리되었다고 다시 말합니다.

클라이언트와 서버의 보안을 보장하기위한 다음 단계는 ping이 Paypal에서 온 것인지 다시 확인하는 것입니다. 그래서 당신은 당신이 손에 들어 오기 전에 다운로드 한 SSL 인증서를 얻고 https의 Paypal로 확인하기 위해 연결합니다.

아래 코드는 if (count($errors) > 0) {else과 연결됩니다.

여기서는 무엇을해야합니까? 데이터베이스에 값을 삽입 하시겠습니까 ?? 하지만이 전에했다?! :

정보를 처리합니다. 예를 들어, 사용자가 귀하의 웹 사이트에 대한 멤버십을 구매하는 경우 데이터베이스에서 업그레이드 된 상태로 사용자를 설정합니다.

지불이 데이터베이스에 이미 기록되어 있으므로 replay attack이 표시되지 않습니다.

재사용 공격은

난 당신이 위의 코드를 보면, 당신은 스크립트가 과거 트랜잭션에 대한 데이터베이스를 쿼리 것을 볼 수 있습니다 당신은 $errors[] = "Transaction already processed";

와 자신의 질문에 대답 것 같아요. id가 임의의 행과 일치하면 유효하지 않은 것으로 간주됩니다. 그래서 아니야. 그 수표가있는 한 재연 공격은 불가능합니다.

+0

페이지 하단에 스크립트가 있습니다. 본적이 있습니까? – user2602535

+0

업데이트를 확인하십시오.이 질문에 대한 답변을 바랍니다. –

+0

괜찮 았어, 너 좀 봐줄 래? – user2602535