在授权成功的页面刷新一次就会出报错{"errmsg":"code been used, hints: [ req_id: Rwakxa0262th10 ]","errcode":40163}
小伙看你根骨奇佳,潜力无限,来学PHP伐。
この問題を解決します。 それはおそらくしばらくの間起こったでしょう。 WeChat を承認する場合、WeChat は公式にガイド アドレス (A.action) を使用して別のアドレス (B.action) にリダイレクトすることを許可します。2 番目のアドレス (B.action) でコードを取得し、それをコードと交換できます。 .access_token、refresh_token など。ほとんどの場合、初回はユーザー情報を取得できますが、2 回目の更新時に errcode":40163,"errmsg":"code used というメッセージが表示されます。これは、コードが一度使用されたことを意味します。公式ドキュメントには、コードが一度しか使用できないことが明確に記載されています。もちろん、更新するかどうかに関係なく、同じコードを使用するのが初めてではない限り、上記のエラーが報告されます。 これは私がそれを解決した方法です。B.actionでは、最初にコードによって取得されたaccess_tokenとrefresh_tokenがセッションに存在するかどうかを判断します(存在しない場合は、エンティティオブジェクトにカプセル化するのが最善です)。これは、コードが初めて使用されたことを意味します (ページは以前に閉じられました)。存在する場合は、セッションに移動して、access_token または fresh_token を直接取得します。取得したaccess_tokenとrefresh_tokenを使用してユーザー情報を取得します。 私の言ったことがお役に立てば幸いです!
リマインダーは非常に明確ですcode已经被使用了,code使用できるのは 1 回だけです。
code
認証の処理部分に問題があります。認証後、ユーザー情報がセッションに保存されませんでした。その結果、ページを更新した後、ユーザーが存在しません。セッション内の情報ですが、アドレスにはコードパラメータが含まれているため、認証を取得するためにコードを取得しましたが、コードはすでに使用されており、コードは一度しか使用できません
以上です。OAuth2.0 の認可 URI は、応答タイプ、認可コード、状態などのパラメーターを指定します。認可コードを取得するには、WeChat OAuth2.0 認可インターフェースを呼び出し、さまざまな appid appsecret を渡します。このコードはサードパーティ (つまり、あなた、つまりユーザーが WeChat 上の自分のリソースへのアクセスを許可する) によって、OAuth 認可サーバーと AccessToken を交換するために使用されます。これは、私が話した認可 URI によって使用されるパラメーターを呼び出すことになります。 OAuth2.0の仕様では、URIによって返されるパラメータにはAccessTokenやRefreshTokenなどがあり、このAccessTokenを使用してリソースサーバーへの認証を行い、ユーザーリソースを取得することができます。セキュリティのため、この認証コードは AccessToken と 1 回だけ交換できます。
それでは、WeChat の承認インターフェイスには、応答タイプ、リダイレクト URI、状態、appid、appsecret などのパラメーターが含まれており、そのロジックでは、ユーザーは最初にこの承認インターフェイスを呼び出し、次に承認 (またはサイレント承認) を行います。ユーザーが承認を確認しても、WeChat 承認インターフェイスは引き続き呼び出されます。WeChat 承認サーバーは、設定したリダイレクト URI にリクエストをリダイレクトし、この URI に URL パラメーター コードと状態を追加します。 . コードを作成すると、サーバーはこのリダイレクトを通じて認証コードを受け取り、このコードを使用して AccessToken を交換し、WeChat 内のユーザーのさまざまなリソース (オープン ID など) を取得できます。
それでは、更新時にエラーが発生するのはなぜだと思いますか? 私は、自分のサーバーの URL を更新しているのに、同じコードが再び取得され、その後、当然のことながら、そのエラー コードを引き換えているのではないかと考えています。再利用されます。
2 つの連続したリクエスト (ユーザー情報と引き換えに同じコードを使用) により、コードが 2 回目に使用されたときにこのエラーが発生するかどうかに注意してください
WeChat Pay をクリックしましたか? 支払いを呼び出した後、もう一度 [Pay] をクリックすると、エラーが報告されます。
元の投稿者でも同じ問題が解決しましたか?
この問題を解決します。
それはおそらくしばらくの間起こったでしょう。
WeChat を承認する場合、WeChat は公式にガイド アドレス (A.action) を使用して別のアドレス (B.action) にリダイレクトすることを許可します。2 番目のアドレス (B.action) でコードを取得し、それをコードと交換できます。 .access_token、refresh_token など。ほとんどの場合、初回はユーザー情報を取得できますが、2 回目の更新時に errcode":40163,"errmsg":"code used というメッセージが表示されます。これは、コードが一度使用されたことを意味します。公式ドキュメントには、コードが一度しか使用できないことが明確に記載されています。もちろん、更新するかどうかに関係なく、同じコードを使用するのが初めてではない限り、上記のエラーが報告されます。
これは私がそれを解決した方法です。B.actionでは、最初にコードによって取得されたaccess_tokenとrefresh_tokenがセッションに存在するかどうかを判断します(存在しない場合は、エンティティオブジェクトにカプセル化するのが最善です)。これは、コードが初めて使用されたことを意味します (ページは以前に閉じられました)。存在する場合は、セッションに移動して、access_token または fresh_token を直接取得します。取得したaccess_tokenとrefresh_tokenを使用してユーザー情報を取得します。
私の言ったことがお役に立てば幸いです!
リマインダーは非常に明確です
code
已经被使用了,code
使用できるのは 1 回だけです。認証の処理部分に問題があります。認証後、ユーザー情報がセッションに保存されませんでした。その結果、ページを更新した後、ユーザーが存在しません。セッション内の情報ですが、アドレスにはコードパラメータが含まれているため、認証を取得するためにコードを取得しましたが、コードはすでに使用されており、コードは一度しか使用できません
以上です。OAuth2.0 の認可 URI は、応答タイプ、認可コード、状態などのパラメーターを指定します。認可コードを取得するには、WeChat OAuth2.0 認可インターフェースを呼び出し、さまざまな appid appsecret を渡します。このコードはサードパーティ (つまり、あなた、つまりユーザーが WeChat 上の自分のリソースへのアクセスを許可する) によって、OAuth 認可サーバーと AccessToken を交換するために使用されます。これは、私が話した認可 URI によって使用されるパラメーターを呼び出すことになります。 OAuth2.0の仕様では、URIによって返されるパラメータにはAccessTokenやRefreshTokenなどがあり、このAccessTokenを使用してリソースサーバーへの認証を行い、ユーザーリソースを取得することができます。セキュリティのため、この認証コードは AccessToken と 1 回だけ交換できます。
それでは、WeChat の承認インターフェイスには、応答タイプ、リダイレクト URI、状態、appid、appsecret などのパラメーターが含まれており、そのロジックでは、ユーザーは最初にこの承認インターフェイスを呼び出し、次に承認 (またはサイレント承認) を行います。ユーザーが承認を確認しても、WeChat 承認インターフェイスは引き続き呼び出されます。WeChat 承認サーバーは、設定したリダイレクト URI にリクエストをリダイレクトし、この URI に URL パラメーター コードと状態を追加します。 . コードを作成すると、サーバーはこのリダイレクトを通じて認証コードを受け取り、このコードを使用して AccessToken を交換し、WeChat 内のユーザーのさまざまなリソース (オープン ID など) を取得できます。
それでは、更新時にエラーが発生するのはなぜだと思いますか? 私は、自分のサーバーの URL を更新しているのに、同じコードが再び取得され、その後、当然のことながら、そのエラー コードを引き換えているのではないかと考えています。再利用されます。
2 つの連続したリクエスト (ユーザー情報と引き換えに同じコードを使用) により、コードが 2 回目に使用されたときにこのエラーが発生するかどうかに注意してください
WeChat Pay をクリックしましたか? 支払いを呼び出した後、もう一度 [Pay] をクリックすると、エラーが報告されます。
元の投稿者でも同じ問題が解決しましたか?