2013-04-05 3 views
2

외부 URL로 리디렉션하는 동안 대화를 유지할 수 있습니까? CDI 대화 콩으로 페이팔 거래를 시작했습니다. 그 다음에 페이팔 페이지로 리디렉션됩니다. 페이징 페이지로 이동하여 지불하고 다음 페이팔로 돌아갈 때 내 백킹 빈의 동일한 인스턴스를 보내고 싶습니다. 페이팔로.대화 범위 및 jsf 리디렉션

paypal이 내 페이지로 다시 리디렉션하면 url 거래 토큰과 지불 자 ID를 첨부하지만 사용자가 구입 한 제품의 수량에 대한 정보가 없습니다. 따라서 리디렉션 전에 수량을 기억하고 싶습니다. 이제 paypal이 내 사이트로 돌아온 후에 doExpressCheckout 메서드를 호출하면 거래 전과는 완전히 다른 세부 정보를 설정할 수 있고 고객이 페이팔 페이지에서 일부 제품을 구매할 때 이상한 상황이 발생할 수 있으므로 수량 및 기타 거래 세부 정보를 전달하려고합니다. 10 $이지만 paypal이 내 페이지로 다시 리디렉션 한 후 100 달러를 설정하면 고객이 지불 한 금액을 알 수 없습니다. 나는 이것이 일어나는 이유를 모른다.

SOAP API를 사용합니다. 페이팔 다시 내 페이지로 리디렉션 할 때

+1

Conversation scoped에서 Session scoped로 변경해야합니다. –

+0

@LuiggiMendoza, 어떻게 작동하는지 모르겠지만 paypal이 JSESSION_ID로 프로세스를 반환 할 의무가 없을 수도 있습니다. 브라우저가 자동으로 외부 사이트의 리디렉션에 다시 추가합니까? – kolossus

+0

@kolossus 왜 서버에 세션을 저장하면 JSESSION_ID가 요청 쿼리 문자열의 일부로 필요합니까? –

답변

4

예, 외부 리디렉션에서 대화를 재개 할 수 있습니다. PayPal에 전달한 반송 URL에 cid=nnn을 포함하기 만하면됩니다. 예를 들면 :

Conversation.instance().setTimeout(900000); // 15 minutes 

을하지만, 이것이 일 : 대화 제한 시간 2 분 기본값은 다소 제한으로

returnUrl = "http://myip/myapp/return.seam?cid=" + Conversation.instance().getId(); 
details.setReturnURL(returnUrl); 
... 

, 당신은 결국 페이팔에 전화를 걸기 전에 대화 시간 제한을 늘려야 할 것 잠재적으로 오랜 시간 동안 데이터를 보관하므로 반드시 좋은 아이디어는 아니며이 구성표가 작동하려면 세션 쿠키도 유지해야합니다 (필요한 경우 세션 시간 초과를 늘려야 함).

더 나은 전략은 트랜잭션 데이터를 지속적으로 (db 또는 디스크) 유지하고 무작위로 생성 된 ID를 데이터에 연결하여 PayPal에서 반환 할 때 데이터를 검색하는 것입니다. 이렇게하면 대화를 계속 기억할 필요가 없습니다.

0

, 그는 거래 토큰 및 지불 ID를 URL에 추가하지만 사용자가 구입 한 제품의 수량에 대한 정보가 없습니다.

반송 URL로 페이팔로 전달하는 URL에 사전 대화 ID를 추가 할 수 있습니다. 이렇게하면 대화 ID가 위의 매개 변수와 함께 다시 전달되며 seam은 모든 데이터로 선결제 대화를 복원하는 것을 알게됩니다.