支付宝H5授权登录PHP版本

该博客详细介绍了如何在PHP中实现支付宝授权登录及获取用户信息的过程。首先,下载并配置支付宝SDK,然后通过获取到的auth_code换取access_token,再利用access_token获取用户的基本资料,包括昵称、支付宝ID、性别和头像等。如果用户信息不存在,则创建新用户并跳转到个人主页;否则,设置cookie并跳转回登录页面。
摘要由CSDN通过智能技术生成

第一步需要将支付宝SDK下载放在vendor,并且重命名为“Alipay”

下一步直接上代码:

   /**
     * 获取协议
     * @return type
     */
    public function get_http_type(){
        $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
        return $http_type;
    }
    /**
     * 支付宝授权登录
     */
     public function aliLogin(){
        //根据自己的项目获取支付宝对应的参数应用的APPID,应用私钥,支付宝公钥
        $item = db('setting')->where('id',1)->find();
        $item = json_decode($item['data'],true);
        $app_id = $item['app_id'];//应用的APPID
        $rsaPrivateKey = $item['private_key'];//应用私钥
        $alipayrsaPublicKey = $item['public_key'];//支付宝公钥
        //Step2: 使用auth_code换取apauth_token
        if(isset($_REQUEST["state"])){
            $auth_code = $_REQUEST["auth_code"];//存放auth_code
            vendor("Alipay.AopClient"); //引入sdk
            $aop = new \AopClient();
            $aop->gatewayUrl="https://openapi.alipay.com/gateway.do";
            $aop->appId=$app_id;
            $aop->rsaPrivateKey=$rsaPrivateKey;
            $aop->alipayrsaPublicKey=$alipayrsaPublicKey;
            $aop->apiVersion='1.0';
            $aop->signType='RSA2';
            $aop->postCharset='utf-8';
            $aop->format='json';
            //根据返回的auth_code换取access_token
            vendor("Alipay.request.AlipaySystemOauthTokenRequest");
            $request = new \AlipaySystemOauthTokenRequest();
            $request->setGrantType("authorization_code");
            $request->setCode($auth_code);
            $result = $aop->execute($request);
            $access_token = $result->alipay_system_oauth_token_response->access_token;
            //Step3: 用access_token获取用户信息
            vendor("Alipay.request.AlipayUserInfoShareRequest");
            //调用sdk里面的AlipayUserInfoShareRequest类
            $request = new \AlipayUserInfoShareRequest();
            $result = $aop->execute ( $request, $access_token);
            $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
            $resultCode = $result->$responseNode->code;
            if(!empty($resultCode)&&$resultCode == 10000){
                $user_data = $result->$responseNode;
                $user_data = json_decode(json_encode($user_data),true);
                //某个参数可能不存在,需要进行判断,防止报错
                $member = array(
                    "nickname"=>isset($user_data['nick_name'])?$user_data['nick_name']:"",
                    "ali_id"=>isset($user_data['user_id'])?$user_data['user_id']:"",
                    "gender"=>isset($user_data['nick_namgendere'])&&$user_data["gender"]=="m"?0:1,
                    "avatar"=>isset($user_data['avatar'])?$user_data['avatar']:"",
                    "address"=>(isset($user_data['province'])?$user_data["province"]:"").(isset($user_data['city'])?$user_data["city"]:"")
                );
                $m = Member::getUserInfoByAliID($member["ali_id"]);
                if(empty($m)){
                    $member['ip']=getIp();
                    $member['salt'] = random(8);
                    $member['invitation_code'] = random(6);
                    $member['create_time'] = TIMESTAMP;
                    $member['pet_jihua'] = date('Ymd');
                    $uid = Member::addInfo($member);
                    $m  = Member::getUserInfoById($uid);
                }
                Cookie::set('member',base64_encode($m));
                header('Location: /home/account.html');
            } else {
                header('Location: /home/auth/login.html');
            }
        }else{
            //【成功授权】后的回调地址
            $my_url = $this->get_http_type().$_SERVER['HTTP_HOST']."/home/auth/aliLogin.html";
            //Step1:获取auth_code
            //state参数用于防止CSRF攻击,成功授权后回调时会原样带回
            //拼接请求授权的URL
            $url = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id={$app_id}&scope=auth_user&redirect_uri={$my_url}&state=init";
            $url = "alipays://platformapi/startapp?appId=20000067&url=".urlencode($url);
            return $url;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命无须向死而生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值