第一步:

登录到蚂蚁金服开放平台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. bzoj 3931 最短路+最大流

    较水,但因为范围问题WA了两次.... /************************************************************** Problem: 3931 Us ...

  2. poj 1509

    求一个字符串在旋转置换群下最小字典表示. 用的是后缀数组(后缀自动机还是再听听jason_yu讲讲吧,关于right集合的部分还有问题) 最小表示法的思想很有好(判断两个对象在某一置换群划分下,是否等 ...

  3. Ruby on rails配置环境问题【慢慢添加】

    1,  ruby -v  与 rvm list 显示不同的版本号 ,使用rvm use 2.2.3后,报如下错误: RVM is not a function 解决办法: $ source ~/.rv ...

  4. chrome 浏览器 console 加入 jquery 测试调试 一介布衣

    chrome 浏览器 console 加入 jquery 测试调试 一介布衣   var jquery = document.createElement('script'); jquery.src = ...

  5. Visual Studio 2013 密钥

    Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...

  6. 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 ...

  7. gcc g++支持C++11 标准编译及其区别

    g++ -g -Wall -std=c++11 main.cpp gcc -g -Wall -std=c11 main.cpp 如果不想每次写这个-std=C++11这个选项该怎么办呢? 方法出处:h ...

  8. Delphi7下使用FastMM4

    1> 将文件Replacement BorlndMM DLL/Precompiled/for Delphi IDE/Performance/BorlndMM.dll,替换掉Delphi/Bin下 ...

  9. MySQL:按前缀批量删除表格

    想要实现mysql>drop table like "prefix_%" 没有直接可用的命令,不过可以通过mysql语法来组装, SELECT CONCAT( 'DROP T ...

  10. andriod 调用高德地图

    Android Studio 配置工程             最后更新时间: 2017年08月29日 来自:http://lbs.amap.com/api/android-sdk/guide/cre ...