后端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"));
}
}