2011-07-17 6 views
0

나는 외부 API 사용에 의존하는 신용 ​​카드 트랜잭션을 기록해야하는 응용 프로그램을 작성하고 있습니다. 신청서에는 총계가 포함 된 송장 컨셉과 성공적인 신용 카드 결제가 이루어지면이 총액에서 공제되는 거래가 있습니다.실패, API 및 실패를위한 설계

이것은 플랫폼 독립적 인 질문이지만, 장고 (Django), 파이썬 (Python) 및 MySQL을 사용하고 있습니다.

내 질문은 주로 외부 API를 처리 할 때 트랜잭션 사용과 잠재적 인 오류를 처리하기 위해 소프트웨어를 설계하는 방법에 중점을 둡니다. 두 장고와 MySQL 트랜잭션을 지원, 문제가되지 않지만 다음과 같은 시나리오를 가정 그 자체 때문에이 응답이 그 다음이다

  • 신용 카드가 성공적으로
  • 처리 지불 API 불구하고 제출

    • 신용 카드를 그 송장
    • 에 지불로 데이터베이스에 기록이 하나의 이유로 데이터베이스에 지불 또는 당신은 지금 무엇을해야합니까 다른

    를 저장하는 중 오류가?

    API 호출이 포함되어 있지 않은 경우 데이터베이스 트랜잭션을 롤백하고 오류를 발생시키는 응답이 명확 해집니다. 그러나 외부 API 호출을 사용하면 문제가 복잡해집니다. 외부 API 호출을 롤백하는 방법이 아니기 때문입니다.

    누구든지이 문제 (신용 카드 또는 유사한 유형의 거래)와 문제를 해결 한 방법에 관심이 있거나 일반적으로이 경우 소프트웨어 디자인을위한 몇 가지 접근 방법에 관심이 있습니다.

  • 답변

    1

    소프트웨어로 관리하기가 어렵습니다. 그러나 지불 게이트웨이가 트랜잭션이 성공했음을 알리기 위해 콜백을 호출하는 경우 해당 콜백이 완료되지 않으면 오류 로그가 기록 될 것이므로이 경우 이메일로 알려주도록 구성 할 수 있어야합니다. 그런 다음 수동으로 상황을 수정하는 것은 사용자의 몫입니다.

    +0

    필자의 경우 api 호출은 신용 카드 트랜잭션의 응답을받는 소프트웨어 컨트롤러에서 직접 이루어집니다. 로깅을 사용하더라도 수동으로 조치 할 필요는 없습니다. ACID를 준수하려면 전체 트랜잭션을 롤백 할 수 있어야합니다. –