第一步:

登录到蚂蚁金服开放平台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实现支付宝授权登录的更多相关文章

  1. 网页版的支付宝授权登录(vue+java)

    api接口文档:https://docs.open.alipay.com/289/105656 后台管理系统原本是用账号密码登录的,不过需求要改成支付宝授权, 前端仅仅需要改登录页,以及添加一个授权返 ...

  2. app支付宝授权登录获取用户信息

    由后台进行地址的拼接(前台进行授权) // 生成授权的参数 String sign = ""; Long userId1 = SecurityUser.getUserId(); S ...

  3. 第三方OAuth授权登录,QQ、微信(WeChat)、微博、GitHub、码云(Gitee)、淘宝(天猫)、微软(Microsoft )、钉钉、谷歌(Google)、支付宝(AliPay)、StackOverflow

    Netnr.Login 第三方OAuth授权登录 支持第三方登录 三方 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 安装 ( ...

  4. Android 集成支付宝第三方登录

    前言: 在集成支付宝支付的时候遇到一点小麻烦,先在此记录供大家参考 1.授权 支付宝第三方登录需要在后台进行授权,在查看授权的时候我们一定要看清楚时候真的已经获得了权限(我在没有获取权限的情况下集成的 ...

  5. iOS 集成阿里百川最新版(3.1.1.96) 实现淘宝授权登录以及调用淘宝客户端商品详情页

      公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很 ...

  6. SpringBoot基于JustAuth实现第三方授权登录

    1. 简介   随着科技时代日渐繁荣,越来越多的应用融入我们的生活.不同的应用系统不同的用户密码,造成了极差的用户体验.要是能使用常见的应用账号实现全应用的认证登录,将会更加促进应用产品的推广,为生活 ...

  7. 微信公众平台开发——微信授权登录(OAuth2.0)

    1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...

  8. 安卓,支付宝app登录时,提示 服务器安全证书已过期或不可信任,请问怎么解决

    安卓,支付宝app登录时,提示 服务器安全证书已过期或不可信任,请问怎么解决 请把手机时间调成当前时间.

  9. iOS做新浪微博sso授权登录遇到的一些坑

    新浪微博sso授权第三方登录,这里没有借助第三方框架,如shareSKD和友盟等,直接参考新浪官方SDK和文档. 过程中遇到几个坑,找了很久,好歹最后解决了,记录如下 问题1: _NSInlineDa ...

随机推荐

  1. UVA1378 A funny stone game

    博弈论. 就是有一堆石子你拿走一堆中的一个,然后再向后面两堆中加两个问胜负 i<j<=k 所以我们可以直接通过sg函数计算,考虑问题的奇偶性,如果这一位是奇的我们才考虑,偶的可以模仿 然后 ...

  2. [UVa10296]Jogging Trails

    题目大意: 中国邮递员问题. 给你一个无向带权连通图,求经过所有边并返回起点的最短路径. 思路: Edmonds-Johnson算法. 显然,当原图为欧拉图时,答案即为其欧拉回路的长度. 考虑原图不存 ...

  3. bzoj 3996 最小割

    公式推出来后想了半天没思路,居然A是01矩阵..... 如果一个问题是求最值,并那么尝试先将所有可能收益加起来,然后矛盾部分能否用最小割表达(本题有两个矛盾,第一个是选还是不选,第二个是i,j有一个不 ...

  4. python开发_HTMLParser_html文档解析

    ''' 在HTMLParser类中,定义了很多的方法,但是很多方法都是没有实现的, 这需要我们继承HTMLParser类,自己去实现一些方法 如: # Overridable -- handle st ...

  5. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B. Problems for Round 水题

    B. Problems for Round 题目连接: http://www.codeforces.com/contest/673/problem/B Description There are n ...

  6. http状态码学习笔记

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求. ...

  7. .vs目录有什么用?

    写这篇博文的目的就是方便后来者能够在百度里轻松搜到. 反正我找了半天没找到关于.vs目录的介绍,最后还是在同事的帮助下才找到的. 参考地址:https://developercommunity.vis ...

  8. Linux rescue

    适用场景: 当误操作修改系统启动文件/etc/fstab, /etc/rc.d/rc.sysinit时,就会造成系统启动时读取磁盘或初始化环境失败,导致linux无法正常启动,此时就可以借助Linux ...

  9. Dropbox Folder Sync – 让 Dropbox 同步任意文件夹

    「DropBox」可以说是目前世界上最流行的线上同步工具,非常简单的同步方式, 流畅的档桉上传下载速度,让你可以轻易的在两台.三台电脑之间同步重要资料. 而你要做的步骤只是在每一台电脑安装DropBo ...

  10. sql 递归查询所有的下级

    --> 生成测试数据表: [tb] IF OBJECT_ID('[Users]') IS NOT NULL     DROP TABLE [Users] GO CREATE TABLE [Use ...