0

나는 Barclays ePDQ CPI 지불을 우리 앱에 통합하는 과정에있다.치킨과 에그 : 결제 게이트웨이로 진행하기 전에 모델을 저장 하시겠습니까? (레일즈)

지금까지 코딩 한 방법은 다음과 같습니다

1. 사용자가 2.Model 세션에 저장되는 정보를 입력합니다 데이터베이스 (DB하지 않음) 3. 사용자가 지불 페이지로 전달됩니다. 4. 사용자가 지불 세부 사항을 입력하십시오. 5. eDPQ 서버는 컨트롤러에 의해 선택되어 포스트 백을 수행합니다. 그러면 주문 세부 사항을 저장하고 사용자 모델을 저장해야합니다. 6. 사용자가 CPI별로 결과 페이지로 리디렉션됩니다.

지불 내역 페이지를 보내기 전에 사용자 정보를 저장하고 싶지 않은 이유는 사용자가 잘못된 세부 정보를 입력하면 브라우저를 다시 누를 수 있고 양식을 다시 제출할 수 있기 때문입니다.

그러나 이제는 eDPQ 서버가 직접 포스트를 호출하기 때문에 세션이 없을 것입니다. 레퍼런스로 보내지는 지불 페이지에 order_id를 보낼 수 있습니다. 이제는 결제 페이지로 보내기 전에 사용자가 다시 돌아가므로 order_id에 참조를 보냅니다. 그런 다음 post_back 메소드를 사용하여 사용자를 찾아 등록 프로세스를 완료 할 수 있습니다.

하지만 다시 클릭하여 다시 제출하면 사용자가 이미 있으므로 오류가 발생합니다.

한 가지 방법은 사용자를위한 "새로운"페이지가 캐시되지 않도록하는 것입니다. 따라서 다시 클릭하면 실제로 "편집"페이지가 표시되며 "수정"페이지는 "새로운"페이지처럼 보입니다. 그러나 이것은 약간의 코딩 복잡성을 추가하는 것처럼 보입니다.

나는 누군가가 비슷한 것을 상대로 올라 왔기를 바라며, 여기에 조언을 해줄 수 있을지도 모른다.

읽어 주셔서 감사합니다.

답변

1

일반적으로 모델을 완전히 저장하는 것이 가장 좋습니다. 진행 상황을 추적하려는 경우 진행률 열을 사용하여 진행할 수 있습니다.

class Order 
    def processed? 
    status == 'processed' 
    end 

    def entered_details? 
    status == 'details entered' 
    end 

    def can_process? 
    entered_details? 
    end 
end 

을 그리고 당신은 진행으로 당신은 단순히 당신의 상태를 업데이트 할 수 있습니다 : 예를 들어, 위해 다음을 수행 할 수 있습니다. 예를 들어, 사용자가 지불 세부 사항을 입력하면 상태를 '세부 사항 입력'으로 갱신 할 수 있고 지불 게이트웨이로 처리 한 후 상태를 '처리됨'으로 갱신 할 수 있습니다. 이렇게하면 일시적으로 세션에 저장하지 않고도 모델에서 상태를 적용 할 수 있습니다.

뒤로 버튼은 뒤로 버튼을 클릭 할 때 사용자가 보는 것을 제어 할 수 없습니다. 이전에 있던 페이지로 이동되며 서버에이를 알리지 않습니다. 그것은 뒤로 버튼의 저주입니다. 이 문제를 해결할 수있는 유일한 방법은 두 번째 양식 제출이 유효성 검증 오류를 일으키지 않는지 확인하는 것입니다. 또는 동일한 세션에서 온 경우 업데이트를 수행하지만, 일반적으로이 문제를 해결해야합니다. 귀하의 신청서 흐름을 따르지 않습니다. 그래서 많은 지불 사이트가 지불을 처리 할 때 '뒤로 버튼을 누르지 마십시오'라고 쓰는 경우가 있습니다. 즉, 페이지에 자신 만의 뒤로 버튼을 제공해야하지만 새 페이지가 아닌 편집 페이지로 리디렉션되도록 조정할 수 있습니다.

관련 문제