ホームページ > バックエンド開発 > PHPの問題 > PHP で WeChat ニックネームを取得できない問題について話し合う

PHP で WeChat ニックネームを取得できない問題について話し合う

PHPz
リリース: 2023-04-11 14:21:13
オリジナル
731 人が閲覧しました

WeChat 公式アカウントやミニ プログラムを開発する場合、WeChat のニックネームを取得する必要があることがよくあります。しかし、PHP を使用しているときに、突然 WeChat ユーザーのニックネームを取得できなくなることがあります。これはなぜですか?この記事では、この問題を調査し、解決策を提供します。

問題の原因

WeChat の公開アカウントやミニ プログラムでは、ユーザーはニックネームを使用して自分自身を表示できますが、同時にこのニックネームはプログラムの重要なパラメーターでもあります。したがって、プログラム内で WeChat ニックネームを取得する必要がある場合は、WeChat が提供する API を通じて呼び出すことができます。

たとえば、WeChat パブリック アカウントでユーザーのニックネームを取得するコードは次のとおりです:

// 通过微信 API 获取用户信息
$userInfo = $app->oauth->user()->getOriginal();

// 获取用户昵称
$nickname = $userInfo['nickname'];
ログイン後にコピー

ただし、このメソッドを使用して WeChat ニックネームを取得すると、次のような問題が発生することがあります。返されたニックネームが空であるため、このニックネームでの運用を継続できなくなります。

問題の原因

では、なぜこの問題が発生するのでしょうか?これは、WeChat API がユーザー情報を返す際にニックネームを URL エンコードするため、デコードしないと意味のない文字列が得られてしまうためです。

たとえば、WeChat ニックネームが「PHP Master」であると仮定すると、WeChat API を通じてユーザー情報を取得した後、返されるデータは次のようになります。

{
    "openid": "xxxx",
    "nickname": "%50%48%50%3c%73%74%72%6f%6e%67%3e",
    "sex": 1,
    "language": "zh_CN",
    "city": "",
    "province": "",
    "country": "",
    "headimgurl": "",
    "privilege": []
}
ログイン後にコピー

返されるデータは次のとおりです。ニックネームは URL エンコードされた文字列に変換されます。この文字列をデコードしないと、実際のニックネームを取得できません。

解決策

この問題の解決策は非常に簡単で、ニックネームを取得した後に URL デコードするだけです。 PHP では、urldecode 関数を使用してこれを行うことができます。

サンプル コードは次のとおりです。

// 通过微信 API 获取用户信息
$userInfo = $app->oauth->user()->getOriginal();

// 获取用户昵称并进行 URL 解码
$nickname = urldecode($userInfo['nickname']);
ログイン後にコピー

このようにして、正しい WeChat ニックネームを取得できます。

概要

WeChat 公開アカウントまたはミニ プログラムを開発する場合、ユーザー情報の取得は非常に重要な操作です。ただし、WeChat APIではニックネームがURLエンコードされているため、ニックネームを取得できない場合があります。この記事で紹介した解決策を使用すると、URL エンコードされたニックネームをデコードして正しいニックネームを取得できるため、プログラムが正常に動作することが保証されます。

以上がPHP で WeChat ニックネームを取得できない問題について話し合うの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート