2011-10-01 6 views
3

나는 온라인 소매점을 개발 해왔다.Paypal IPN 인벤토리 관리

이것은 PHP로 작성되었으며 paypal과 IPN을 사용하여 지불을 처리합니다.

나는 내 장바구니를 작성했습니다. 사용자가 결제를 원할 때 버튼을 클릭 한 표준 장바구니 업로드 기능이있는 결제 버튼을 클릭하면 사용자는 결제를 완료하기 위해 페이팔로 이동합니다. Paypal은 나에게 지불금을 알려주는 IPN을 보냅니다.

제 질문은 언제 저장해야합니까? 재고 수준을 언제 줄여야합니까?

표준 프로세스 흐름

지금 내가 가지고있는 것입니다 다음과 같습니다

  1. 사용자 장바구니에 항목을 추가합니다.

    • 품목이 현재 매진되었거나 추가 된 수량이 초과하면 카트가 업데이트되어이를 반영합니다.
    • 그러나 장바구니에 재고가 재고 수준을 감소시키지 않습니다.
  2. 사용자가 체크 아웃합니다.

    • 카트가 db의 주문 레코드에로드되고 재고 수준이 낮아집니다.
    • 사용자는 지불을 완료하기 위해 페이팔로 이동합니다.
  3. (a) 사용자가 결제를 완료했습니다.

    (b) 사용자는 웹 사이트로 돌아가거나 다른 곳/폐쇄 브라우저로 이동하여 지불을 완료하지 못합니다.

  4. (선택 사항) 사용자 클릭으로 웹 사이트로 돌아갑니다.

    • 사용자에게 '감사합니다. 주문 완료'라는 전체 페이지가 표시됩니다.
    • paypal에서 IPN을 보내므로 주문 테이블과 관련하여 아무 것도 처리되지 않습니다.
  5. 페이팔은 당신이 볼 수있는 바와 같이,이 과정에 일부 문제가있는 트랜잭션 상태

와 IPN

  • 업데이트 순서를 보냅니다. 고객이 지불을 완료하지 않고 페이팔 페이지를 떠난다면 나는 매달린 주문을하게 될 것이고 재고 수준도 또한 낮아질 것이기 때문에이 재고는 다른 고객들에게 제공되지 않을 것입니다! 이에 대한 해결책은 데이터베이스를 수작업으로 '청소'하는 것입니다.

    대체품?

    • 옵션 I)는 다음 IPN를 수신하는 '트랜잭션 (transaction)'까지 데이터베이스에서 순서를 저장하는 재고 수준을 주문을 생성하고 줄이기 위해 세션에 저장되어있는 카트 정보를 사용하지 마십시오. 그러나 세션이 만료되고 페이팔 지불은 지불에 따라 며칠이 소요될 수 있습니다.

    • 옵션 2) 지금 주문을 저장하십시오. 그러나 완료된 거래 IPN이 수신 될 때까지 재고를 줄이지 마십시오. 이것은 여전히 ​​매달려있는 주문의 문제를 가지고 있지만 정리할 때 재고가 다시 추가되어야 할 것입니다. 주문을 제거하면됩니다. 그러나 이것에 대한 또 다른 문제점은 여러 사람들이 유사한시기에 주문을하면 집합 적으로 그들의 주문에 재고를 초과하는 수량이 들어 있다는 것입니다. 시스템이 완료된 IPNS를 수신 한 다음 스톡 레벨을 음수로 줄이면 상당히 혼란 스러울 수 있습니다!

    나는 인터넷에서 도처에서 일종의 도움을 봤지만 어디에도 언급되어 있지 않습니다! 누구나 IPN을 처리하는 방법을 건너 뜁니다. 나는 다른 사람들이이 문제를 어떻게 가질 수 없었는지 이해하지 못한다.

    도와주세요!

+0

정말 도움이 필요합니다. 나는 재고없는 품목을 사기 위하여 선택권을 수동으로 삭제하는 것을하고있다. – maxmitch

답변

1

가맹점 및 개발자 모두 IPN이 보류중인 경우에도 (예 : eCheck) 재고 자산을 IPN으로 조정하는 것을 선호합니다. 2 명의 고객이 마지막 남은 주식과 동시에 체크 아웃을 할 가능성은 일반적으로 낮습니다. 일 경우의 볼륨이 충분하고 재고 수준이 낮 으면 (이유는 무엇입니까?) 세션 시간 초과 기간 동안 항목에 잠금을 설정하기 위해 장바구니에서 무언가를하고 싶을 수 있습니다.

주문이 취소되거나 반환되는 경우 주문 처리 코드가 인벤토리를 재고로 반환하는지 확인하십시오.

2

항공 예약 시스템에서 사용하는 것과 동일한 문제를 처리하고 있습니다. (페이팔로 리디렉션되는 동안)

reduce inventory count 
place a timestamp in the database along with a state that this order is temporary 

2A를

1.Upon 사용자의 클릭을 체크 아웃, 즉 동일한 솔루션을 사용합니다. 일단 IPN을 받으면, 즉 결제가 성공했다는 것을 안다.

change state of the order to permanent 

2b. 임시 주문을 추적하기 위해 몇 분마다 실행되는 크론 작업을 수행하십시오. 임시 주문이 허용되는 시간보다 길면 예 : 20 분 :

remove the temporary order from database 
undo the change in inventory count