微信授权登录后,把获取的信息存储到本地数据库中(超详细有用)!下面一起来看看吧!
<?php
namespace Home\Controller;
use Think\Controller;
class YiMuDiController extends Controller
{
/**
* 构造方法
*/
public function __construct()
{
parent::__construct();
$this->modelUserAccount = M('yimudi_account'); // 账户表
$this->wxUserInfo = session('wxUserInfo');
$this->uid = session('uid');
$this->mobile = session('mobile');
if (!$this->uid)
{
$this->uid = $this->getUserId()['user_id'];
$this->mobile = $this->getUserId()['mobile'];
session('uid', $this->uid);
session('mobile', $this->mobile);
}
}
/**
* 获取微信用户信息
* @return mixed
*/
protected function getWxUserInfo()
{
$AppId = C('AppId'); //访问配置文件的appId
$AppSecret = C('AppSecret'); //访问配置文件的appSecret
// 获取微信 code
$code = I('get.code');
if (!$code)
{
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$redirectUri = $protocol . $_SERVER['HTTP_HOST'] . __SELF__;
$redirectUri = urlencode($redirectUri);
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$AppId&redirect_uri=$redirectUri&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
redirect($url);
}
// 获取微信网页授权 access_token
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$AppId&secret=$AppSecret&code=$code&grant_type=authorization_code";
$userInfoJson = file_get_contents($url);
$userInfo = json_decode($userInfoJson, true);
// 获取微信用户信息
$url = "https://api.weixin.qq.com/sns/userinfo?access_token={$userInfo['access_token']}&openid={$userInfo['openid']}&lang=zh_CN";
$userDetailInfoJson = file_get_contents($url);
$userDetailInfo = json_decode($userDetailInfoJson, true);
return $userDetailInfo;
}
/**
* 获取用户 ID
* @return mixed
*/
protected function getUserId()
{
if (!$this->wxUserInfo)
{
$this->wxUserInfo = $this->getWxUserInfo();
session('wxUserInfo', $this->wxUserInfo);
}
$this->openid = $this->wxUserInfo['openid'];
// 1. 通过 openid,查询账户表获取 user_id
$where = array(
'openid' => $this->openid,
'disabled' => 0,
);
$info = $this->yimudiAccount->where($where)->getField('user_id,mobile');
if ($info)
{
$datainfo=[];
$datainfo['user_id'] = $info['user_id];
$datainfo['mobile'] = $info['mobile'];
return $datainfo;
}
}
/**
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* @name 获取微信js-sdk配置参数
* @method 传参请求
* @param 当前执行程序的完整的URL
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
public function getWxjsSdkConfig(){
$appId = C('AppId');//访问配置文件的appId
$appSecret = C('AppSecret');//访问配置文件的appSecret
$nonceStr = $this->getRandomString(16);//签名参数1:随机字符串
$jsapiTicket = $this->getJsApiTicket($appId,$appSecret);
$timestamp = time();
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$actionUrl = $protocol . $_SERVER['HTTP_HOST'] . __SELF__;
$signString = stripcslashes('jsapi_ticket='.$jsapiTicket.'&noncestr='.$nonceStr.'×tamp='.$timestamp.'&url='.$actionUrl);
$signature = sha1($signString);
$configData['AppId'] = $appId;
$configData['AppSecret'] = $appSecret;
$configData['timestamp'] = $timestamp;
$configData['nonceStr'] = $nonceStr;
$configData['signString'] = $signString;
$configData['signature'] = $signature;
return $configData;
}
/**
* 模拟提交
* @param string $url
* @param array $data
* @return bool|mixed
*/
public function requestPost($url='', $data=array()) {
if(empty($url) || empty($data)){
return false;
}
$o="";
foreach($data as $k=>$v){
$o.="$k=".$v."&";
}
$param=substr($o,0,-1);
$ch=curl_init();//初始化curl
curl_setopt($ch,CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch,CURLOPT_HEADER, 0);//设置header
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch,CURLOPT_POST, 1);//post提交方式
curl_setopt($ch,CURLOPT_POSTFIELDS, $param);
$return=curl_exec($ch);//运行curl
curl_close($ch);
return $return;
}
/**
* 文件日志
* @param string $type
* @param string $data
*/
public function makeLog($type='',$data=''){
if(!empty($type)){
@file_put_contents(C('DIR_LOG').$type."/".$type.'_'.date('YmdH').'.txt',$data."\n",FILE_APPEND);
}
}
}
希望对大家有所帮助!