第一步需要将支付宝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;
}
}