php 微信公众平台登录,php-微信公众号登录

微信公众号登录

/*start 登录 start*/

$code = !empty($_GET["code"]) ? $_GET["code"] : "";

$LoginWxGzh = new LoginWxGzh();

if(empty($code)){

$LoginWxGzh->getCode();

}

$LoginWxGzh->setCode($code);

return $LoginWxGzh->initialization();

/*end 登录 end*/

/**

* 微信公众号登录

* Created by Sublime.

* User: dongfh

* Date: 2020/05/29

*/

class LoginWxGzh

{

/**

* error code 业务错误说明.

*

*

1000: 成功

*

1004: 失败

*

1005: 业务失败

*

*/

private static $success = 1000;

private static $fail = 1004;

private static $business = 1005;

private $code;

public function setCode($code){

$this->code = $code;

}

private static $appid = 'xxxx';

private static $appsecret = 'xxxx';

private $openid;

private $access_token;

private $member_id;

private $UserToken;

private static $CodeRedirectUri = 'http://www.abc.com/user-login?param1=xxx&param2=xxx';

private static $CodeAuthorizeUri = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=%s#wechat_redirect';

private static $AccessTokenUri = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code';

private static $UserInfoUri = 'https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN';

/**

* [initialization 初始化登录]

* @return [type] [description]

*/

public function initialization(){

//获取openID

$this->getOpenId();

//获取用户ID

$this->getMemberId();

//获取User-Token

$this->getUserToken();

$info = [

"user_token" => $this->UserToken

];

return $this->JsonSuccess($info,"登录成功",self::$success);

}

/**

* [getCode 获取登录code]

* @return [type] [description]

*/

public function getCode(){

//格式化请求地址 请求接口

$getCodeAuthorizeUri = sprintf(self::$CodeAuthorizeUri,self::$appid,urlencode(self::$CodeRedirectUri),md5(uniqid(rand(), TRUE)));

//跳转

header("Location: ".$getCodeAuthorizeUri);

exit;

}

/**

* [getOpenId 获取OpenId]

* @return [type] [description]

*/

private function getOpenId(){

//格式化请求地址 请求接口

$getAccessTokenUri = sprintf(self::$AccessTokenUri,self::$appid,self::$appsecret,$this->code);

//获取access_token

$responses = $this->https_request($getAccessTokenUri);

$result = json_decode($responses, true);

if(!isset($result['access_token']) && !isset($result['openid'])) {

return $this->JsonError("获取token失败!",self::$business);

}

$this->openid = $result["openid"];

$this->access_token = $result["access_token"];

}

/**

* [getMemberId 获取用户ID]

* @return [type] [description]

*/

private function getMemberId(){

//查询数据

$userInfo_db = Db::name("member")->where("openid",$this->openid)->find();

if(empty($userInfo_db->id)){

//格式化请求地址 请求接口

$getUserInfoUri = sprintf(self::$UserInfoUri,$this->access_token,$this->openid);

$getUserInfo = $this->https_request($getUserInfoUri);

$userInfo = json_decode($getUserInfo, true);

if(!empty($userInfo['openid'])){

$Member_params = [

"nickname" => $userInfo["nickname"],

"head_portrait" => $userInfo["head_portrait"],

"openid" => $userInfo["openid"],

"create_time" => time()

];

$user_id = Db::name("member")->insert($Member_params);

if(!$user_id){

return $this->JsonError("注册用户信息失败!",self::$fail,$Member_params);

}

$userInfo_db = Db::name("member")->where("member_id",$user_id)->find();

}else{

return $this->JsonError("获取用户信息失败!",self::$business,["openid" => $this->openid]);

}

}

if(empty($userInfo_db["id"])){

return $this->JsonError("获取用户信息失败!",self::$business,["openid" => $this->openid]);

}

$this->member_id = $userInfo_db["id"];

}

/**

* [getUserToken 获取User-Token]

* @return [type] [description]

*/

private function getUserToken(){

//生成用户User-Token

$UserToken = $this->generateUserToken();

$timestamp = time() + 2592000;

//查询token

$MemberToken = Db::name("MemberToken")->where("member_id",$this->member_id)->find();

//不存在

if(!$MemberToken){

$Params = [

"member_id" => $this->member_id ,

"token" => $UserToken ,

"create_time" => $timestamp

];

$result = Db::name("MemberToken")->insert($Params);

if(!$result){

return $this->JsonError("添加token失败",self::$fail,$Params,$Params);

}

}else{

$timeParams = [

"token" => $UserToken ,

"update_time" => $timestamp

];

$result = Db::name("MemberToken")->where("member_id",$this->member_id)->update($timeParams);

if(!$result){

return $this->JsonError("更改过期时间失败",self::$fail,$timeParams);

}

}

$this->UserToken = $UserToken."#".base64_encode($this->member_id);

}

/**

* [generateUserToken 生成token]

* @return [type] [description]

*/

private function generateUserToken(){

$token = strtoupper(md5($this->member_id.'dongfh_'.mt_rand(100,999)));

return $token;

}

/**

* [https_request 请求]

* @param [type] $url [路径]

* @param [type] $data [参数]

* @return [type] [description]

*/

private function https_request($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);

if(curl_errno($curl)){

$output = curl_error($curl);

}

curl_close($curl);

return $output;

}

/**

* [JsonSuccess 返回数据]

* @param [type] $data [数据]

* @param string $msg [信息]

* @param integer $code [状态码]

*/

private function JsonSuccess($data=[],$msg='成功',$code=1000){

$data = [

"code" => $code,

"msg" => $msg,

"data" => $data

];

return json_encode($data);

}

/**

* [JsonError 返回数据]

* @param integer $code [状态码]

* @param string $msg [信息]

* @param [type] $data [数据]

*/

private function JsonError($msg='失败',$code=1004,$data=[]){

return $this->JsonSuccess($data,$msg,$code);

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值