ThinkPHP は WeChat の 3 者ログインを実装しています
小さなエピソードとしては、アプリがずっと前に WeChat の 3 者ログインを実装し、その後 PC の WeChat 3 者ログインが追加されたということです。ドキュメントには、unionid がさまざまなアプリケーションで統一されていると記載されています。同じアカウントですが、アプリは uid を使用します。その結果、PC が取得した UnionID が正しくなくなり、データの統合の問題を探すのに 1 日が無駄になりました。残りの問題は解決されました。アプリと PC を作成する友人は、WeChat の 3 方向ログインに注意してください。アプリと PC の両方に UnionID が必要です。それでは、PC で 3 者間の WeChat ログインを統合する方法を説明しましょう:
1. 申請時に入力する情報は、メイン Web サイト情報登録フォームのスキャンしたコピーを顧客が提供し、残りは自分で入力します。承認されたコールバック ドメインには、ファーストレベル ドメイン名を記述する必要があることに注意してください。呼び出し時には、recudirt_url と一致している必要があります
インターフェースを呼び出す手順
(1):
小さな WeChat アイコンが WeChat ログイン リンク (a タグ) であり、href がこの値であることに注意してください (公式ドキュメント No. 1 ストア WeChat ログイン)
https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https://passport.yhd.com/wechat/callback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect
(2) 上記のリンクは、access_tokenとopenidの値を交換するための媒体であるcodeパラメータを返します。その後、論理的に判断されます
。
if(isset($_GET['code'])&&$_GET['state'] =='3d6be0a4035d839573b04816624a415e') {
//呼び出されるメソッドはユーザーの個人情報を取得するものです
$res = $this->message_request($code);
}
パブリック関数 message_request($code){
//独自のものを変更します
$appid = "wx16a15XXXXXXXXX";
$appsecret = "fc4b2b999787cXXXXXXXXXXX";
//独自に変更してください
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$output = $this->httpsRequest($url);
$jsoninfo = json_decode($output, true);
$openid = $jsoninfo["openid"];
$access_token = $jsoninfo['access_token'];
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
$output = $this->httpsRequest($url);
$message = json_decode($output,true);
$メッセージを返します;
}
パブリック関数 httpsRequest($url,$data = null){
$curl =curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output =curl_exec($curl);
curl_close($curl);
$output を返します;
}
重要:
access_token は、WeChat パブリック プラットフォームのユーザー認証ログインとは異なります。WeChat パブリック プラットフォームには 1 日の制限がありますが、オープン プラットフォームには制限がなく、アプリの情報を保持するために同時に生成する必要があります。同期中のユーザーと PC ユーザーには、["unionid"] が使用されます。これは、同じオープン プラットフォーム上のさまざまなアプリケーションに固有の ["unionid"] です。アプリと PC の両方でこれが必要です。
結果が得られました
array(10) { ["openid"] => string(28) "oD5XQwgVj1gLb3_zgjP72uDgESYk" ["nickname"] => string(6) "Liu Zhu" //ユーザーのニックネーム ["sex"] => 1) //性別 1: 男性 ["言語"] => string(5) "zh_CN" ["city"] => string(6) "南海" //地区 ["都道府県"] => (7) "天津" //省["国"] => string(2) "天津" //都市["headimgurl"] => string(129) "http://wx.qlogo.cn / mmopen/aQVS6rQD9yJTTHTcyb0AqLOQ3rBoyNL3CyEJleogBib53Y6xiaibZvfZ6quDApeKuPG10sCYKkDvPwkiayUj3dMXjNicOVkV73x1k/0" //ユーザーのアバター ["privilege"] => array(0) { } ["unionid"] > string( 28) "o2VJ4xEUwd51_7F2bhisYBhF3fVk" //Unionid アプリと PC 情報の一貫性が維持される ベンチマーク}