第一步:

登录到蚂蚁金服开放平台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. DP Training(Updating)

    感觉前面做了那么多$dp$全是自己想的还是太少啊…… 好像在LZT的博客上看到了不错的资源?赶紧开坑,以一句话题解为主 Codeforces 419B 第一题就开始盗图 由于只有一个交点,手玩一下发现 ...

  2. 浙江省队选拔 ZJOI2015 (Round 1) 解题报告

    最近莫名其妙地喜欢上了用这种格式写各省省选的全套题解= = 今年浙江省选的出题人是算法竞赛界传说级人物陈立杰,看样子他的出题风格很有特点……ABC三题难度是严格递减的,感觉如果在做第一题的时候被卡住的 ...

  3. bzoj 5055: 膜法师 -- 树状数组

    5055: 膜法师 Time Limit: 10 Sec  Memory Limit: 128 MB Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇 ...

  4. Dijkstra_Liu博客100篇祭

    创建博客,有两年三个月了.今天,写了100篇随笔了,又正值我的15岁生日,还是值得纪念一下. 两年过去了,我从学习:队列.栈.模拟.背包慢慢地变成了:Tarjan.线段树.树剖. 我也从一个初一的天真 ...

  5. python学习两月总结_汇总大牛们的思想_值得收藏

    下面是我汇总的我学习两个月python(version:3.3.2)的所有笔记 你可以访问:http://www.python.org获取更多信息 你也可以访问:http://www.cnblogs. ...

  6. 关于List Map Set的线程安全的问题

    常见的ArrayList  LinkedList  HashMap TreeMap LinkedHashMap HashSet TreeSet LinkedHashSet 都是线程不安全的.如果要使用 ...

  7. MySQL数据库事务各隔离级别加锁情况--Repeatable Read && MVCC(转)

    本文转自https://m.imooc.com/article/details?article_id=17289 感谢作者 上节回顾 上两篇记录了我对MySQL 事务 隔离级别read uncommi ...

  8. idea安装Lombok及使用介绍

    原文:https://blog.csdn.net/motui/article/details/79012846 Lombok使用 介绍 在项目中使用Lombok可以减少很多重复代码的书写.比如说get ...

  9. Spring Boot整合RabbitMQ详细教程

    原文:https://blog.csdn.net/qq_38455201/article/details/80308771 1.首先我们简单了解一下消息中间件的应用场景 异步处理 场景说明:用户注册后 ...

  10. 打印后台程序服务没有启动,每次打开Powerdesigner都会要我安装打印机

    原因: 不光这个,就是word也需要你有个打印机.随便安一个就可以了.一般系统自带个Microsoft Office Document Image Writer的还报打印机,要是你有这个打印机的话.查 ...