찾다

 >  Q&A  >  본문

java - 微信开发网页授权

在授权成功的页面刷新一次就会出报错
{"errmsg":"code been used, hints: [ req_id: Rwakxa0262th10 ]","errcode":40163}

伊谢尔伦伊谢尔伦2805일 전1394

모든 응답(7)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 10:57:04

    이 문제는 제가 해결하겠습니다.
    아마도 얼마 지나지 않아 일어난 일이겠죠.
    WeChat을 인증할 때 WeChat에서는 공식적으로 가이드 주소(A.action)를 사용하여 다른 주소(B.action)로 리디렉션할 수 있습니다. 두 번째 주소(B.action)에서 코드를 사용할 수 있습니다. access_token, Refresh_token 등으로 교환합니다. 대부분의 경우 처음에는 사용자 정보를 얻을 수 있지만 두 번째로 새로 고칠 때 errcode":40163,"errmsg":"code been Used라는 메시지가 나타납니다. 이는 코드가 한 번 사용되었다는 의미입니다. 공식 문서에는 해당 코드가 한 번만 사용될 수 있음이 매우 명확하게 나와 있습니다. 물론, 새로 고침 여부에 관계없이 동일한 코드를 사용하고 처음 사용하는 것이 아니라면 위의 오류가 보고됩니다.
    이렇게 해결했습니다. B.action에서는 먼저 코드에서 얻은 access_token과 Refresh_token이 세션에 존재하는지 확인합니다. (그렇다면 판단하기 더 쉬운 엔터티 객체로 캡슐화하는 것이 가장 좋습니다.) 존재하지 않는다는 것은 해당 코드가 처음으로 사용되었다는 의미입니다. 사용(이전에 페이지가 닫혔음)이 있으면 세션으로 이동하여 access_token 또는 Refresh_token을 직접 얻으십시오. 획득한 access_token과refresh_token을 이용하여 사용자 정보를 획득합니다.
    제가 말씀드린 내용이 도움이 되었기를 바랍니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:57:04

    code가 사용되었으며 code은 한 번만 사용할 수 있다는 메시지가 매우 명확합니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:57:04

    인증 처리 부분에 문제가 있습니다.
    인증 후 세션에 저장하지 않으셨는데요. 세션에 사용자 정보는 없는데 주소는 그대로 남아있네요. 코드 매개변수가 있어서 인증받기 위해 코드를 가져왔는데 이미 사용된 코드이고, 한 번만 사용할 수 있는 코드입니다

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:57:04

    그렇습니다. OAuth2.0의 인증 URI 지정 매개변수에는 응답 유형, 인증 코드, 상태 등이 포함됩니다. 인증 코드를 얻기 위해 WeChat OAuth2.0 인증 인터페이스를 호출하고 다양한 appid appsecret을 전달합니다. , 이 코드는 무엇을 위한 것인가요? 제3자(즉, 사용자가 WeChat에서 자신의 리소스에 액세스하도록 권한을 부여함)가 AccessToken을 OAuth 인증 서버와 교환하는 데 사용됩니다. 처음에 언급한 인증 URI에는 OAuth2.0 사양에서 URI가 반환하는 매개 변수에는 AccessToken, RefreshToken 등이 포함됩니다. 이 AccessToken을 사용하면 이를 사용하여 리소스 서버에 인증하여 사용자 리소스를 얻을 수 있습니다. OAuth2.0에서는 안전을 위해 이 인증 코드를 AccessToken으로 한 번만 교환할 수 있다고 규정합니다.

    WeChat은 이를 어떻게 구현합니까? 해당 인증 인터페이스에는 응답 유형, 리디렉션 URI, 상태, appid, appsecret 및 기타 매개변수가 포함됩니다. 해당 논리는 사용자가 먼저 이 인증 인터페이스를 호출한 다음 승인(또는 자동으로 승인)한다는 것입니다. 사용자가 인증을 확인하면 WeChat 인증 서버가 인증을 확인한 후 요청을 설정한 리디렉션 URI로 리디렉션하고 이 URI에 URL 매개변수 코드와 상태를 추가합니다. code 인증 코드이므로 서버는 이 리디렉션을 통해 인증 코드를 받게 되며, 이 코드를 사용하여 AccessToken을 교환한 후 WeChat에서 사용자의 다양한 리소스(예: open id)를 얻을 수 있습니다.

    그렇다면 새로 고칠 때 오류를 보고했다고 말한 이유는 무엇입니까? 귀하의 서버 URL을 새로 고친 다음 코드가 동일한 코드를 다시 얻은 다음 당연히 오류 코드를 사용했다고 의심됩니다. 재사용되었습니다.

    회신하다
    0
  • 阿神

    阿神2017-04-18 10:57:04

    두 번의 연속 요청(사용자 정보 대신 동일한 코드 사용)으로 인해 두 번째 코드 사용 시 이 오류가 발생하는지 주의하세요

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 10:57:04

    위챗페이를 클릭하셨나요? 결제 버튼은 한 번만 클릭할 수 있습니다. 결제 호출 후 결제를 취소하고 다시 결제를 클릭하면 현재 페이지에서 나가서 다시 입력만 가능합니다. !

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:57:04

    원래 포스터로 해결되었나요? 저도 같은 문제를 겪었나요?

    회신하다
    0
  • 취소회신하다