저는 작업중인 웹 사이트에서 PayPal Payments Standard를 구현하고 있습니다. 질문은 PayPal과 관련이 없습니다. 나는이 문제를 실제 문제를 통해 전달하고자합니다.MySQL 트랜잭션 : 쓰는 동안 읽음
페이팔은 두 가지 방법으로 지불에 대한 서버를 알릴 수 있습니다 :
- 페이팔 IPN - 각 결제 후 페이팔 트랜잭션이있는 URL (당신에 의해 선택)에 (서버 간) 알림을 보냅니다 세부.
- PayPal PDT - 결제 후 (PP 계정에서 설정 한 경우) PayPal은 사용자를 귀하의 사이트로 리디렉션하여 URL에 거래 ID를 전달하므로 해당 거래에 대한 PayPal에 문의하여 세부 정보를 얻을 수 있습니다 .
문제는 당신이 어느 쪽이 먼저 발생 확신 할 수있다 :
- 이 서버가 IPN 통지 것
- 는 사용자가 사이트에 다시 연결됩니다
먼저 트랜잭션이 두 번 처리되고 있지 않은지 확인하고 싶습니다. 그래서 두 경우 모두 페이팔 (그리고 지불 상태가 실제로는 문제가되지 않지만 현재)에서 오는 트랜잭션 ID에 대해 내 DB에 쿼리를 보내서 해당 트랜잭션을 저장하고 처리했는지 확인합니다. 그렇지 않은 경우 처리하고 다른 트랜잭션 세부 정보가있는 트랜잭션 ID를 내 데이터베이스에 저장합니다.
내가 첫 번째 요청 처리를 시작하면 어떻게됩니까 질문
은 (는 PDT..so 사용자가 다시 내 사이트로 이동했지만, 내 서버가 아직 IPN 통지하지 않은하자) 하지만 실제로 데이터베이스에 트랜잭션을 저장하기 전에 두 번째 (IPN) 요청이 도착하고 DB에서 트랜잭션을 찾지 못하기 때문에 트랜잭션을 처리하려고 시도합니다.
데이터베이스에 트랜잭션을 쓰는 동안 다른 트랜잭션 쿼리를 사용하여 해당 트랜잭션 ID를 찾을 수 없습니다.
필자는 InnoDB를 사용하고 있으며, 쓰기 시간 동안 전체 테이블을 잠그고 싶지 않습니다. 트랜잭션으로 간단히 해결할 수 있습니까? 해당 행을 "수동으로"잠글 수 있습니까? 나는 정말로 혼란 스럽다. 경험이 풍부한 몇몇의 MySQL 개발자들이 나에게이 점을 분명히하고 문제를 해결하는 데 도움이되기를 바란다.