微信小プログラム-微信登録wx.login(Thinkphpバックエンドコード)
8020 ワード
プロセス
主に微信でログインし、ユーザーの3つの情報を取得します:user_id(ユーザid)、user_image(ユーザアイコンurl)、user_name(ユーザーニックネーム).
1、初回ログイン:
呼び出しwx.loginはcodeを取得し、codeはバックグラウンド取得openidに送信してユーザーテーブルに併存し、user_を返すidはメモリに格納されます.次に、認証ページに移動し、ユーザが認証を許可すると、agreeGetUserメソッドによって取得された微信ユーザの情報をユーザテーブルに保存し、user_nameとuser_イメージはメモリに保存され、最後にトップページにジャンプします.
2、初回ログインではない:
呼び出しwx.loginはcodeを取得し、codeはバックグラウンドに送信してopenidを取得し、openidはユーザーテーブルにすでに存在する場合、ユーザーのログイン時間のみを変更し、user_を返すid、user_nameとuser_イメージ、メモリに保存してトップページにジャンプします.
コード#コード#
1、app.js
ユーザがウィジェットを開くとwxが呼び出される.loginはcodeを取得し,codeをバックグラウンドに送信してopenidを取得する.バックグラウンドでopendiを保存し、ユーザー情報を返します(初回ログイン情報は空で、初回ログイン情報は存在しません)
2、サーバー側login_do
Openidを取得し、ユーザが存在するか否かを判断し、存在しない場合はopenidを保存し、user_に戻るid;存在する場合はログイン時間を変更し、ユーザーの情報を返します.
GetWechatOpenIdメソッド:
HomeCommonの下にあるCurlphp
3、login.js
最初のログインは、認証インタフェースにジャンプします.ライセンスが付与されると、微信ユーザーのすべての情報を保存します.
4、save_doのmodel層法
OK!
主に微信でログインし、ユーザーの3つの情報を取得します:user_id(ユーザid)、user_image(ユーザアイコンurl)、user_name(ユーザーニックネーム).
1、初回ログイン:
呼び出しwx.loginはcodeを取得し、codeはバックグラウンド取得openidに送信してユーザーテーブルに併存し、user_を返すidはメモリに格納されます.次に、認証ページに移動し、ユーザが認証を許可すると、agreeGetUserメソッドによって取得された微信ユーザの情報をユーザテーブルに保存し、user_nameとuser_イメージはメモリに保存され、最後にトップページにジャンプします.
2、初回ログインではない:
呼び出しwx.loginはcodeを取得し、codeはバックグラウンドに送信してopenidを取得し、openidはユーザーテーブルにすでに存在する場合、ユーザーのログイン時間のみを変更し、user_を返すid、user_nameとuser_イメージ、メモリに保存してトップページにジャンプします.
コード#コード#
1、app.js
ユーザがウィジェットを開くとwxが呼び出される.loginはcodeを取得し,codeをバックグラウンドに送信してopenidを取得する.バックグラウンドでopendiを保存し、ユーザー情報を返します(初回ログイン情報は空で、初回ログイン情報は存在しません)
App({
onLaunch: function () {
//
wx.login({
success: function(res) {
// res.code openId, sessionKey, unionId
if(res.code){
wx.request({
url: 'http://XX.com/WechatUser/login_do', //
data:{
code:res.code
},
success:function(res){
// ,
if(!res.data.data.username || res.data.data.username == " "){
wx.navigateTo({
url:'/pages/login/login',
})
}
console.log(res.data.data)
// , id; ,
wx.setStorageSync('userid', res.data.data.userid)
wx.setStorageSync('username', res.data.data.username)
wx.setStorageSync('userimage', res.data.data.userimage)
}
})
}else{
console.log(' !' + res.errMsg)
}
}
})
}
})
2、サーバー側login_do
Openidを取得し、ユーザが存在するか否かを判断し、存在しない場合はopenidを保存し、user_に戻るid;存在する場合はログイン時間を変更し、ユーザーの情報を返します.
public function login_do()
{
try{
extract(generateRequestParamVars());//
$result=GetWechatOpenId($code);// openid session
$conditions = array();
$conditions['openid'] = $result['openid'];
//
if (!$user=D(self::$WECHAT_USER)->where($conditions)->find()) {
// , ,
$userid = D(self::$WECHAT_USER)->adds_do($result['openid']);
$conditions = array();
$conditions['id'] = $userid;
$user = D(self::$WECHAT_USER)->where($conditions)->find();
}
else{
// ,
D(self::$WECHAT_USER)->login_do($user['id']);//
}
$data=array();
$data['userid']=$user['id'];
$data['username']=$user['nickname'];
$data['userimage']=$user['imageurl'];
$ajaxReturnData['status'] = 1;
$ajaxReturnData['message'] = ' ';
$ajaxReturnData['data'] = $data;
}catch (\Exception $e){
$ajaxReturnData['status'] = 0;
$ajaxReturnData['message'] = ' ';
}
$this->ajaxReturn($ajaxReturnData);
}
GetWechatOpenIdメソッド:
function GetWechatOpenId($js_code)
{
if (!$js_code) {
throw new \Exception('code null!');
}
// openid session
// https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
$url=C('WECHAT_GET_OPEN_ID');
// appid、appsecret
$wechat_data=C('WECHAT_XCX_DATA');
$param=array();
$param[]='appid='.$wechat_data['appid'];
$param[]='secret='.$wechat_data['appsecret'];
$param[]='js_code='.$js_code;
$param[]='grant_type=authorization_code';
$params=join('&',$param);
$url=$url.'?'.$params;
$curl=new \Home\Common\Curl(); //
$result=$curl->go($url,'post');
$result=json_decode($result,true);
return $result;
}
HomeCommonの下にあるCurlphp
3、login.js
最初のログインは、認証インタフェースにジャンプします.ライセンスが付与されると、微信ユーザーのすべての情報を保存します.
Page({
data: {
url: "/pages/index/index",
userInfo: {
nickname: "",
sex: "",
head_pic: ""
},
text: " "
},
agreeGetUser: function (e) {
var that = this;
var msg = e.detail.errMsg;
if (msg == 'getUserInfo:fail auth deny') {
console.log(' ')
wx.navigateTo({
url: '/pages/login/login',
})
}
if (msg == 'getUserInfo:ok') {
console.log(' ')
wx.switchTab({
url: '/pages/index/index',
fail:function(e){
console.log(e)
}
})
}
//
var userid = wx.getStorageSync('userid');
var username = wx.getStorageSync('username');
if(!username){
wx.request({
url: 'http://XX.com/WechatUser/save_do',
data: {
id: userid,
nickname: e.detail.userInfo.nickName,
imageurl: e.detail.userInfo.avatarUrl,
gender: e.detail.userInfo.gender,
province: e.detail.userInfo.province,
city: e.detail.userInfo.city,
country: e.detail.userInfo.country,
},
success: function (res) {
if (e.detail.userInfo.nickName){
wx.setStorageSync('username', e.detail.userInfo.nickName);
wx.setStorageSync('userimage', e.detail.userInfo.avatarUrl);
}
}
})
}
},
onLoad: function(t) {
}
});
4、save_doのmodel層法
public function save_do()
{
extract(generateRequestParamVars());
$conditions = array();
$conditions['id'] = $id;
$data = array();
$data['nickname']=$nickname;
$data['imageurl']=$imageurl;
$data['gender']=$gender;
$data['province']=$province;
$data['city']=$city;
$data['country']=$country;
if($this->where($conditions)->save($data)===false){
throw new \Exception('OPERATION_FAILED');
}
}
OK!