微信小程序授权登录接口tp3.2

后端PHP代码

public function xcxindex() {
 	//获取code
    $option_data_str = file_get_contents("php://input");
    $request = json_decode($option_data_str, true);
    $code = isset($request['code']) ? $request['code'] : 0;
    //获取地址携带的参数(如推荐人id等)
    $totalurl = &$request['url']? $request['url'] : '' ;
    $exurl = explode('?',$totalurl);        $this->father_id = explode('=',$exurl[1])[1];
    $this->father_id = $this->father_id ? $this->father_id :0;
	//前端传递过来的用户信息
    $nickname = isset($request['nickname']) ? $request['nickname'] : "";
    $headimgurl = isset($request['headimgurl']) ? $request['headimgurl'] : "";
    $sex = isset($request['sex']) ? $request['sex'] : 0;

    if (!$code) {
        exit('code error');
    }
    //小程序 的配置信息
    $WX_APPID = '小程序APPID';
    $WX_SECRET = '小程序SECRET';
    $token_url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $WX_APPID . "&secret=" . $WX_SECRET . "&js_code=" . $code . "&grant_type=authorization_code";
    $token_info = file_get_contents($token_url);
    $encryptedData = isset($request['encryptedData']) ? $request['encryptedData'] : "";
    $iv = isset($request['iv']) ? $request['iv'] : "";
    $token_info = json_decode($token_info, true);
    $auth_info = '';
    $unionid =$token_info['unionid'];
    $openid = $token_info['openid'];

    $auth_info = $this->decryptData($token_info['session_key'],$encryptedData,$iv,$auth_info,$WX_APPID);
    $auth_info = json_decode($auth_info, true);
    $openid =  $token_info['openid'];
    //使用用户unionid  检查用户是否在数据库中
    $find =M('WxUser')->where(" x_openid = '$openid' or ( unionid <> '' and  unionid ='$unionid' )  ")->find();
    $user_id = '';
    if (!empty($find)) {

        $update = [
            'nickname'     => $nickname,
            'x_openid'      => $openid,
            'headimgurl' => $headimgurl,
            'sex'      =>   $sex,
            'country'      =>  $auth_info['country'],
            'province'      => $auth_info['province'],
            'city'      =>  $auth_info['city'],
            'unionid'       => $unionid,
        ];
        if($openid  ){
            $u =  M('WxUser')->where("id={$find['id']}")->save($update);
        }
        $user_id = $find['id'];
      $is_delete = $find['is_delete']?$find['is_delete']:0;
    } else {
        $wxuser = [
            'nickname'     => $nickname,
            'x_openid'      => $openid,
            'headimgurl' => $headimgurl,
            'sex'      =>   $sex,
            'country'      =>  $auth_info['country'],
            'province'      => $auth_info['province'],
            'city'      =>  $auth_info['city'],
            'agent_id'      => 3,
            'unionid'       => $unionid,
            "addtime"      => time(),
            
        ];
        if( $openid ){
              $id =  M('WxUser')->add($wxuser);
              
        }else {
          $id =0;
        
        }
        $user_id = $id;
        $is_delete = 0;
    }
   //登录  可用session代替
    $redis = new Redis();
    $redistoken = $redis->get("user_token_".$user_id);
    // var_dump( $redistoken );exit;
    //判断是否已经登录
    if($redistoken){
        $redis->rm("user_token_".$user_id);
    }
    $token =  _tool_set_token($user_id);
    $redis->set("agent_id".$user_id,21, 3600 * 48);    //20公众号  21小程序
    $redis->set("is_delete".$user_id,$is_delete, 3600 * 48);
    $redis->set("user_token_nph_xcx_".$token,$user_id );
    $date['father_id']=$this->father_id ?$this->father_id:'';
    // 输出值
    $date['token']=$token;
    $date['uid']=$user_id;
    $this->ajaxReturn(['code' => 1, 'msg' => "授权成功",'data' => $date]);
  }`

bass验证
bass文件中的代码


 <?php

namespace Adminmobile\Controller;

use Think\Controller;
use Adminmobile\Entity\Redis;
class BaseController extends Controller
{
  public function _initialize()
  {
      // $option_data_str = file_get_contents("php://input");
      // $param = json_decode($option_data_str, true);
      error_reporting(0);
      // 制定允许其他域名访问
      header("Access-Control-Allow-Origin:*");
      // 允许的响应类型
      header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE,OPTIONS,PATCH');
      // 响应头设置
      header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
      /*
        过滤接口,以下接口不需要token,注意接口控制器和方法大小写
      */
      $filterApiList = array(
  //      'Shop/index',
      );

      $A = ACTION_NAME  ;
      $C = CONTROLLER_NAME       ;
      $api = $C.'/'.$A;      if (in_array($api, $filterApiList)) {
        //todo
      } else {

      $param=I("post.");
      $token =  $param['token'] ? $param['token'] :''  ;
      $redis = new Redis();
      //解密token
        $user_id = _tool_un_token($token);
        $this->agent_id = $redis->get("agent_id".$user_id );
        if( $this->agent_id == 20 ){    //20公众号  21小程序
          $this->uid = $redis->get("user_token_nph_".$token );
        }elseif( $this->agent_id == 21 ){
          $this->uid = $redis->get("user_token_nph_xcx_".$token );
        }
        if(empty($this->uid)){
          exit(json_encode(['code'=>2,'msg'=>'请登录']));
        }else{
            $user=M("WxUser")->where("id=".$this->uid)->find();
            $this->openid = $user['openid'];
            if(empty($user)){
                $redis->set("token_token_nph_".$token ,$this->uid , 3600*24*100);
            }
        }
   }

   
   $this->tid = intval(I("tid"));
   
  }


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值