<?php
namespace RestapiV3\Controller;
use Think\Controller\RestController;
class UserDemoController extends RestController
{
//小程序后台文档
//https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html#%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B
//表结构
/*CREATE TABLE `ly_applet_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`openid` varchar(50) NOT NULL COMMENT '微信小程序唯一id',
`member_id` int(11) DEFAULT '0',
`createtime` int(20) NOT NULL COMMENT '创建时间',
`last_login_time` int(20) NOT NULL COMMENT '最近一次登录时间',
`phone` varchar(20) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`face_url` varchar(255) DEFAULT NULL,
`session_key` varchar(255) DEFAULT NULL COMMENT '会话密钥',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=296 DEFAULT CHARSET=utf8mb4;
*/
/**
* 微信登录
* @return [type] [description]
* 调取小程序登录接口 返回参数如下:
* session_key 会话密钥
* unionid 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回
* openid 用户唯一标识
*/
public function wxlogin()
{
// 校验参数是否存在
if (!$_POST['code']) {
$return_data = array();
$return_data['error_code'] = 2;
$return_data['msg'] = '参数不足: code';
$this->ajaxReturn($return_data);
} else {
$appid = C('APPLET_APPID');// appid
$secret = C('APPLET_APPKEY');// app密钥
$code = $_POST['code']; // 小程序传来的code值
$curl = curl_init();
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appid . "&secret=" . $secret . "&js_code=" . $code . "&grant_type=authorization_code";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$json = json_decode($result); // 对json数据解码
$arr = get_object_vars($json);
$openid = $arr['openid'];
$session_key = $arr['session_key'];
curl_close($curl);
// 检验是否已经授权登录
$Applet_user = M('Applet_user');
// 构造查询条件
$where = array();
$where['openid'] = $openid;
$user = $Applet_user->where($where)->find();
if ($user) {
$return_data = array();
$return_data['error_code'] = 0;
$return_data['msg'] = '登录成功';
$return_data['data']['userid'] = $user['userid'];
$return_data['data']['username'] = $user['username'];
$return_data['data']['face_url'] = $user['face_url'];
$return_data['data']['session_key'] = $session_key;
$this->ajaxReturn($return_data);
} else {
$return_data = array();
$return_data['error_code'] = 1;
$return_data['msg'] = '不存在该用户,请授权登录';
$this->ajaxReturn($return_data);
}
}
}
/**
*首次授权登录
* @return [type] [description]
*/
public function wxsign()
{
// 校验参数是否存在
if (!$_POST['code']) {
$return_data = array();
$return_data['error_code'] = 2;
$return_data['msg'] = '参数不足: code';
$this->ajaxReturn($return_data);
} else if (!$_POST['name']) {
$return_data = array();
$return_data['error_code'] = 2;
$return_data['msg'] = '参数不足: name';
$this->ajaxReturn($return_data);
} else if (!$_POST['avatarUrl']) {
$return_data = array();
$return_data['error_code'] = 2;
$return_data['msg'] = '参数不足: avatarUrl';
$this->ajaxReturn($return_data);
} else {
$appid = C('APPLET_APPID');// appid
$secret = C('APPLET_APPKEY');// app密钥
$code = $_POST['code']; // 小程序传来的code值
$curl = curl_init();
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appid . "&secret=" . $secret . "&js_code=" . $code . "&grant_type=authorization_code";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$json = json_decode($result); // 对json数据解码
$arr = get_object_vars($json);
$openid = $arr['openid'];
$session_key = $arr['session_key'];
curl_close($curl);
// 检验是否已经授权过
$Applet_user = M('Applet_user');
// 构造查询条件
$where = array();
$where['openid'] = $openid;
$user = $Applet_user->field(true)->where($where)->find();
if ($user) {
//已授权登录过
TODO::可以在这儿写一个更新头像和昵称的操作
//直接返回参数
$result = $user;
$this->response(showMessage(1, '授权成功', $result), 'json');
} else {
//首次授权登录
//创建用户小程序信息
$data['openid'] = $openid;
$data['session_key']=$session_key;
$data['username'] = $_POST['name'];
$data['face_url'] = $_POST['avatarUrl'];
$data['createtime'] = time();
$data['last_login_time'] = time();
$result = $Applet_user->add($data);
//判断是否成功
if ($result) {
$this->response(showMessage(1, '授权成功', $data), 'json');
}else{
$this->response(showMessage(102, '授权失败,请重试!', ''), 'json');
}
}
}
}
}
tthinkphp3.2 后台实现微信小程序登录接口
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 写在前头:本文章仅仅是做笔记,记录学习过程方便以后再次观看学习使用,本人小白,不敢自称大佬教人,有错误的地方也诚挚...
- 最近使用京东开发的Taro框架开发微信小程序,开发小程序的自动登录,后台提供了微信授权登录后,通过openid可以...
- (Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,Wx:IT_Ezra,QQ 654...