1.首先需要参数:
aucth_code udid re_id极光推送id
2.https://open.alipay.com/platform/keyManage.htm
配置公钥私钥
3.需要sdk
采用tp5框架 引入
require $_SERVER['DOCUMENT_ROOT']. '/vendor/alipay/aop/AopClient.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/request/AlipayTradeAppPayRequest.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/request/AlipayTradeRefundRequest.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/request/AlipayFundTransToaccountTransferRequest.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/request/AlipaySystemOauthTokenRequest.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/request/AlipayUserInfoAuthRequest.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/request/AlipayUserTradeSearchRequest.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/request/AlipayUserInfoShareRequest.php';
require $_SERVER['DOCUMENT_ROOT'].'/vendor/alipay/aop/SignData.php';
/* * @param 第三方支付宝登录 */ public function alipay_login(MemberModel $member){ $code = input('post.'); if (empty($code["auth_code"])) { return_msg('100','缺少必填参数'); } $aop = new \AopClient (); $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do'; $aop->appId = config('alipay_app_id'); $aop->rsaPrivateKey = config('alipay_private_key');//私钥 $aop->alipayrsaPublicKey = config('alipay_public_key');//支付宝公钥 $aop->apiVersion = '1.0'; $aop->signType = 'RSA2'; $aop->format = 'json'; $request = new \AlipaySystemOauthTokenRequest(); $request->setGrantType("authorization_code"); $request->setCode($code["auth_code"]); $result = $aop->execute($request); $resultData = (array) $result->alipay_system_oauth_token_response; if (empty($resultData['access_token'])) { return_msg('100',"获取access_token失败"); } $request = new \AlipayUserInfoShareRequest (); $result = $aop->execute ( $request , $resultData['access_token'] ); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $resultCode = $result->$responseNode->avatar; $userData = (array) $result->alipay_user_info_share_response; if (empty($userData['code']) || $userData['code'] != 10000) { return_msg("获取用户信息失败"); } $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $username = ""; for ( $i = 0; $i < 6; $i++ ) { $username .= $chars[mt_rand(0, strlen($chars))]; } $sj_uname = strtoupper(base_convert(time() - 1420070400, 10, 36)).$username ; $datas["userid"] = $result->$responseNode->user_id; //用户唯一id $datas["headimgurl"] = !empty($result->$responseNode->avatar)?$result->$responseNode->avatar:"http://tapi.zuozuobang.com/public/images/moren/head.png"; //用户头像 $datas["nick_name"] = !empty($result->$responseNode->nick_name)?$result->$responseNode->nick_name:$sj_uname; //用户昵称 //验证数据库中是否有对应的数据 //首先通过openid查询数据库是否有对应的数据 $dp["openid"] = $code["openid"]; $dp["re_id"] = $code["re_id"]; $dp["avatar_path"] = $datas["headimgurl"]; $dp["nickname"] = $datas["nick_name"]; $list = $member->vf_login($dp); if($list){ $opty["uid"] = $list['uid']; $opty["token"] = $list["token"]; $opty["nickname"] = $list["nickname"]; $opty["avatar_path"] = $list["avatar_path"]; return_msg('200',"登录成功",$opty); }else{ return_msg('100','登录失败'); } }
/** * 第三方登录处理 */ public function vf_login($data){ $info = self::where(['openid'=>$data['openid']])->field('id,lasttime,birthday,money,sex,jifen,flag,face,nickname,icon')->find(); $data['token'] = generate_token($data['openid']); $data['lasttime'] = time(); $data["addtime"] = time(); $data["icon"] = $data["avatar_path"]; $data["re_id"] = $data["re_id"]; unset($data["avatar_path"]); if(empty($info)){ //如果为空 则直接写入 $info['id'] = self::allowField(true)->insertGetId($data); $list['nickname'] = $data['nickname']; $list['avatar_path'] = $data['icon']; }else{ $list['nickname'] = $info['nickname']; $list['avatar_path'] = !empty($info['icon'])?$info['icon']:"http://tapi.zuozuobang.com/public/images/moren/head.png"; self::allowField(true)->where(['id'=>$info['id']])->update($data); } $list['uid'] = $info['id']; $list['token'] = $data['token']; $list['password'] = md5(md5($data["password"])); return $list; }