PHP で WeChat アプレット ログインを実装する方法
WeChat ミニ プログラムは、近年非常に人気のあるアプリケーション タイプであり、その利便性、使いやすさ、環境に優しい完全性により、さまざまなシナリオで広く使用されています。 WeChat アプレットを開発する場合、多くの場合、ユーザー ログイン機能を実装する必要がありますが、これは従来の Web サイト ログインと同様に実装が困難です。この記事では、WeChat アプレット ログインの実装プロセスを紹介します。これには、主にコードを取得するための API を呼び出すフロントエンド、コードを受信して WeChat サーバーにリクエストしてユーザーの openid と session_key を取得し、最後にユーザー情報を独自のデータベースに保存します。
1. WeChat ミニ プログラムのログイン プロセス
WeChat ミニ プログラムのログイン プロセスは、次の図に示すとおりです。プロセスは次のとおりです。
ユーザーはミニ プログラムを開き、ログイン ボタンをクリックします。
フロントエンドは、wx.login を介して API を呼び出し、一時的なログイン資格情報コードを取得します。
- コードをバックエンド サーバーに送信します。
- バックエンドは、openid と session_key を取得するために WeChat サーバーにリクエストを送信します。
- WeChat サーバーは openid と session_key を返します。
- バックエンドは、openid に基づいてデータベースにクエリを実行し、ユーザーが存在しない場合は、そのユーザーをデータベースに追加します。
- バックエンドはユーザー情報を保存し、カスタム ログイン トークンを生成して、それをフロントエンドに返します。
- フロントエンドは、トークンをユーザーのログイン資格情報としてローカルに保存します。
- ユーザーが次回ログインするとき、フロントエンドはトークンを運び、バックエンドにリクエストを送信します。バックエンドはトークンの有効性を検証します。トークンが有効であれば、ログインは成功します。有効でなければ、ログインは成功します。ログインしていないエラーが返されます。
- 2. フロントエンドは一時ログイン認証コードを取得します
- フロントエンドは、wx.login を使用して API を呼び出し、一時ログイン認証コードを取得します。この API によって返されるコードは 5 分間のみ有効であるため、リクエストは時間内にバックエンドに送信される必要があります。
wx.login({ success: function(res) { if (res.code) { // 发送code至后端服务器 wx.request({ url: 'https://example.com/login.php', method: 'POST', data: {'code': res.code}, success: function(resp) { // 获取后端返回的token并存储至本地 wx.setStorageSync('token', resp.data.token); } }); } else { console.log('获取登录态失败!' + res.errMsg); } } });
$appid = "Your AppID"; $secret = "Your AppSecret"; $code = $_POST['code']; $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $res = curl_exec($ch); curl_close($ch); $data = json_decode($res, true); $openid = $data['openid']; $session_key = $data['session_key'];
// 连接数据库 $con = mysqli_connect('localhost', 'root', 'password', 'database'); mysqli_set_charset($con, 'utf8'); // 查询用户 $result = mysqli_query($con, "SELECT * FROM user WHERE openid='$openid' LIMIT 1"); if(mysqli_num_rows($result) == 0) { // 添加新用户 $now = date('Y-m-d H:i:s'); mysqli_query($con, "INSERT INTO user (openid, create_time) VALUES ('$openid', '$now')"); // 获取用户ID $user_id = mysqli_insert_id($con); } else { // 获取用户ID $row = mysqli_fetch_assoc($result); $user_id = $row['id']; }
// 生成token $token = md5($user_id . time() . mt_rand()); // 存储token和用户信息 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->setex($token, 3600 * 24 * 7, $user_id); // 返回token echo json_encode(array('token' => $token));
wx.request({ url: 'https://example.com/login.php', method: 'POST', data: {'code': res.code}, success: function(resp) { // 获取后端返回的token并存储至本地 wx.setStorageSync('token', resp.data.token); } });
// 验证token有效性 $token = $_POST['token']; $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $user_id = $redis->get($token); if($user_id) { // 验证成功,返回用户信息 // ... } else { // 验证失败,返回未登录错误 echo json_encode(array('errcode' => 40001, 'errmsg' => 'user not logged in')); }
以上がPHP で WeChat アプレット ログインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









