php实现支付宝授权登录
第一步:
登录到蚂蚁金服开放平台https://open.alipay.com/platform/home.htm,前提是有商户号。创建应用之后,然后到开发者中心开通对应功能。如图:

第二步:
到应用信息里面填写应用网关与授权回调地址。应用网关填写域名即可,如:www.baidu.com;授权回调地址则需要具体到页面或者方法,如:www.baidu.com/aliLogin.php。

第三步:
填写接口加签方式。去官方下载签名生成器,然后生成一对秘钥(应用公钥和应用私钥),设置好应用公钥之后,能拿到对应的支付宝公钥。(重点是 应用私钥和支付宝公钥)

第四步:
数据表的设计。可以新建数据表存储支付宝返回数据,也可以在用户表里面新加字段存储。我的实现方法是后者,如图:

下面代码可以看到支付宝返回数据存入对应字段
第五步:
下载sdk,地址 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.iw1InW&treeId=193&articleId=103419&docType=1。根据以上步骤拿到的appid,应用私钥(RSA_PRIVATE_KEY)和支付宝公钥(ALIPAY_RSA_PBULIC_KEY),开始调用支付宝接口获取数据。上代码:
/**
* 支付宝授权登录
*/
public function aliLogin(){
//获取配置文件的ali参数
$ali_config = C("ALI_CONFIG"); //应用的APPID
$app_id = "";
//【成功授权】后的回调地址
$my_url = "http://".$_SERVER['HTTP_HOST']."/Home/User/aliLogin"; //Step1:获取auth_code
$auth_code = $_REQUEST["auth_code"];//存放auth_code
if(empty($auth_code)){
//state参数用于防止CSRF攻击,成功授权后回调时会原样带回
$_SESSION['alipay_state'] = md5(uniqid(rand(), TRUE));
//拼接请求授权的URL
$url = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=".$app_id."&scope=auth_user&redirect_uri=".$my_url."&state="
. $_SESSION['alipay_state']; echo("<script> top.location.href='" . $url . "'</script>");
}
//Step2: 使用auth_code换取apauth_token
if($_REQUEST['state'] == $_SESSION['alipay_state'] || )
{
vendor("Alipay.AopClient"); //引入sdk
$aop = new \AopClient();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = $app_id;
$aop->rsaPrivateKey = $ali_config['RSA_PRIVATE_KEY']; //应用私钥
$aop->alipayrsaPublicKey = $ali_config['ALIPAY_RSA_PBULIC_KEY']; //支付宝公钥
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json'; //根据返回的auth_code换取access_token
vendor("Alipay.AlipaySystemOauthTokenRequest"); //调用sdk里面的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.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 == ){
$user_data = $result->$responseNode;
$m = M("Member");
$data = array();
$data['sex'] = $user_data->gender=='m'?:;
$data['province'] = $user_data->province;
$data['city'] = $user_data->city;
$data['person_name'] = $user_data->nick_name;
$data['ali_openid'] = $user_data->user_id;
$data['ali_name'] = $user_data->nick_name;
$data['ali_img'] = $user_data->avatar;
$data['addtime'] = date("Y-m-d H:i:s", time());
$data['person_img'] = $user_data->avatar;
$data['signtime'] = date("Y-m-d H:i:s", time()); $user = M("Member")->where(array("ali_openid"=> $user_data->user_id))->find(); //判断是否是第一次登录
if($user){
$res = M("Member")->where(array("ali_openid"=> $user_data->user_id))->setField("signtime", date("Y-m-d H:i:s", time()));
if($res){
//成功登录业务逻辑 }else{
$this->error("操作异常,拒绝访问!", U('user/login'));
}
}else{
$res=$m->add($data);
if($res){
//成功登录业务逻辑 }else{
$this->error("操作异常,拒绝访问!", U('user/login'));
}
} } else {
$this->error("操作异常,拒绝访问!", U('user/login'));
} }
}
php实现支付宝授权登录的更多相关文章
- 网页版的支付宝授权登录(vue+java)
api接口文档:https://docs.open.alipay.com/289/105656 后台管理系统原本是用账号密码登录的,不过需求要改成支付宝授权, 前端仅仅需要改登录页,以及添加一个授权返 ...
- app支付宝授权登录获取用户信息
由后台进行地址的拼接(前台进行授权) // 生成授权的参数 String sign = ""; Long userId1 = SecurityUser.getUserId(); S ...
- 第三方OAuth授权登录,QQ、微信(WeChat)、微博、GitHub、码云(Gitee)、淘宝(天猫)、微软(Microsoft )、钉钉、谷歌(Google)、支付宝(AliPay)、StackOverflow
Netnr.Login 第三方OAuth授权登录 支持第三方登录 三方 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 安装 ( ...
- Android 集成支付宝第三方登录
前言: 在集成支付宝支付的时候遇到一点小麻烦,先在此记录供大家参考 1.授权 支付宝第三方登录需要在后台进行授权,在查看授权的时候我们一定要看清楚时候真的已经获得了权限(我在没有获取权限的情况下集成的 ...
- iOS 集成阿里百川最新版(3.1.1.96) 实现淘宝授权登录以及调用淘宝客户端商品详情页
公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很 ...
- SpringBoot基于JustAuth实现第三方授权登录
1. 简介 随着科技时代日渐繁荣,越来越多的应用融入我们的生活.不同的应用系统不同的用户密码,造成了极差的用户体验.要是能使用常见的应用账号实现全应用的认证登录,将会更加促进应用产品的推广,为生活 ...
- 微信公众平台开发——微信授权登录(OAuth2.0)
1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...
- 安卓,支付宝app登录时,提示 服务器安全证书已过期或不可信任,请问怎么解决
安卓,支付宝app登录时,提示 服务器安全证书已过期或不可信任,请问怎么解决 请把手机时间调成当前时间.
- iOS做新浪微博sso授权登录遇到的一些坑
新浪微博sso授权第三方登录,这里没有借助第三方框架,如shareSKD和友盟等,直接参考新浪官方SDK和文档. 过程中遇到几个坑,找了很久,好歹最后解决了,记录如下 问题1: _NSInlineDa ...
随机推荐
- bzoj 3931 最短路+最大流
较水,但因为范围问题WA了两次.... /************************************************************** Problem: 3931 Us ...
- poj 1509
求一个字符串在旋转置换群下最小字典表示. 用的是后缀数组(后缀自动机还是再听听jason_yu讲讲吧,关于right集合的部分还有问题) 最小表示法的思想很有好(判断两个对象在某一置换群划分下,是否等 ...
- Ruby on rails配置环境问题【慢慢添加】
1, ruby -v 与 rvm list 显示不同的版本号 ,使用rvm use 2.2.3后,报如下错误: RVM is not a function 解决办法: $ source ~/.rv ...
- chrome 浏览器 console 加入 jquery 测试调试 一介布衣
chrome 浏览器 console 加入 jquery 测试调试 一介布衣 var jquery = document.createElement('script'); jquery.src = ...
- Visual Studio 2013 密钥
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...
- QT 安装 4.8.7 on solaris 10
1. 下载 QT 4.8.7: http://download.qt.io/official_releases/qt/4.8/4.8.7/qt-everywhere-opensource-src-4 ...
- gcc g++支持C++11 标准编译及其区别
g++ -g -Wall -std=c++11 main.cpp gcc -g -Wall -std=c11 main.cpp 如果不想每次写这个-std=C++11这个选项该怎么办呢? 方法出处:h ...
- Delphi7下使用FastMM4
1> 将文件Replacement BorlndMM DLL/Precompiled/for Delphi IDE/Performance/BorlndMM.dll,替换掉Delphi/Bin下 ...
- MySQL:按前缀批量删除表格
想要实现mysql>drop table like "prefix_%" 没有直接可用的命令,不过可以通过mysql语法来组装, SELECT CONCAT( 'DROP T ...
- andriod 调用高德地图
Android Studio 配置工程 最后更新时间: 2017年08月29日 来自:http://lbs.amap.com/api/android-sdk/guide/cre ...