QR 코드를 표시하는 것은 쉽습니다. 하지만 지연된 알림, 중복 이벤트, 불확실한 결제 결과를 처리하는 체크아웃을 구축하는 것은 까다롭습니다.
아시아 결제 기술을 탐구하는 개발자에게 출발점은 거래 수명 주기(transaction lifecycle)입니다.
결제 전에 주문 생성하기
결제를 요청하기 전에 주문 식별자, 금액 및 통화를 저장해야 합니다.
각 결제 시도를 제공업체 참조 번호(provider reference)와 연결하십시오. 지원 직원이 무슨 일이 일어났는지 조사할 수 있도록 개별적인 시도들을 구별 가능하게 유지해야 합니다.
코드를 스캔하는 것이 고객이 결제했다는 의미라고 절대 가정하지 마십시오.
명확한 결제 상태 정의하기
'생성됨(created)', '대기 중(pending)', '확인됨(confirmed)', '실패함(failed)', '만료됨(expired)'과 같은 상태로 시작하십시오. 이를 제공업체의 문서화된 동작 방식에 매핑해야 합니다.
확인된 거래가 나중에 부분 환불될 수 있으므로 환불은 별도로 처리해야 합니다.
각 전환(transition)에 대해 다음을 명시하십시오:
- 어떤 제공업체 이벤트가 이를 유발할 수 있는지.
- 일치해야 하는 거래 참조 번호(transaction reference).
- 금액과 통화가 일치하는지 여부.
- 반복되는 이벤트를 어떻게 처리할 것인지.
브라우저 리디렉션만으로는 주문이 결제되었다고 독립적으로 표시해서는 안 됩니다.
중복 이벤트를 무해하게 만들기
반복되는 알림이 반복적인 이행(fulfillment)을 유발할 수 없도록 이벤트 처리를 설계하십시오. 제공업체의 문서화된 방법을 사용하여 콜백을 인증해야 합니다. 사용 가능한 경우 이벤트 식별자(event identifiers)를 저장하고 거래 기록을 원자적으로(atomically) 업데이트하십시오.
애플리케이션이 시간 초과되면, 다른 시도를 시작하기 전에 원래의 거래를 확인하십시오. 확인 누락이 반드시 실패를 의미하지는 않습니다.
실제로 무슨 일이 일어났는지 조정(Reconcile)하기
주문 기록을 결제 시도, 환불 및 정산 보고서와 연결하십시오.
고객의 스크린샷에 의존하기보다 직원들에게 신뢰할 수 있는 가맹점 보기(merchant view)를 제공해야 합니다.
제공업체의 샌드박스 환경에서 지연된 콜백, 불일치하는 금액, 만료된 코드, 중단된 연결을 테스트하십시오.
저는 제가 운영하는 FTAsiaStockTechnologies에 아시아 은행 및 결제 기술에 대한 설명을 게시합니다.
안정적인 체크아웃(checkout) 시스템은 성공적인 시연만으로는 충분하지 않습니다. 시스템 간 불일치(disagree)가 발생했을 때 예측 가능한 동작이 필요합니다.
고객에게 결제를 허용하기 전에 어떤 실패 케이스를 테스트하시겠습니까?