php获取支付宝用户信息

一:创建应用

要在您的应用中使用支付宝开放产品的接口能力:

  1. 您需要先去蚂蚁金服开放平台(open.alipay.com),在开发者中心创建登记您的应用,此时您将获得应用唯一标识(APPID);
  2. 请在【功能信息】中点击【添加功能】,选择【获取会员信息】;
  3. 提交审核,等待审核通过,该应用正式可以使用。

需要详细了解开放平台创建应用步骤请参考《开放平台应用创建指南》。

二:配置密钥

开发者调用接口前需要先生成RSA密钥,RSA密钥包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY)。生成密钥后在开放平台开发者中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。详情请参考《配置应用环境》。

三:搭建和配置开发环境

1. 下载服务端SDK

为了帮助开发者调用开放接口,我们提供了开放平台服务端SDK,包含JAVA、PHP和.NET三个语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的SDK并引入您的开发工程。

各语言版本服务端SDK详细使用说明,请参考《服务端SDK说明》,本文需要下载的就是PHP的SDK包了。

2. 接口调用配置

先看前端代码:

2.1 先从后台获取二维码,并且展示出来

function show(){
var parmss = {
phone:userName
};
$.ajax({
url: model.base_url + "/Alipay/getQRcode",
data: parms,
type: "post",
dataType: "text",
success: function(res, status, xhr) {
if(res != '' || res != null){
//将二维码显示出来
var url = res.body.url;
popupUrl.find(".pm-left").find("img").attr("src",url);
}
},
error: function(data) {
}
});
$("#popup-bind").show();
int = setInterval(model.bindQuery,"1000");//通过定时器,判断是否绑定过第三方支付
}

2.2 定时器,判断是否绑定成功

//根据请求后台看是否数据已经绑定
function bindQuery(){
var parmss = {
phone:userName
};
$.ajax({
url: model.base_url+"Authorland/getBindsucess",
data: parmss,
type: "post",
dataType: "text",
success: function(res, status, xhr) {
if(res != '' || res != null){ if(bind_num == 0){
var zfb_id = res.body.zfb_id;
bind_num = 1;
}else{
var wx_ids = res.body.wx_id;
}
         如果支付宝已经绑定,就把已经绑定的图片换上去,并且把二维码关闭掉
if(zfb_id != undefined || zfb_ids != undefined){
$("#bind-zfb").unbind();
$("#bind-zfb").addClass("on");
$("#bind-zfb").find("p").text("已绑定支付宝");
$("#bind-zfb").find("img").attr("src","/public/Content/Images/wallet/zfb_on.png");
}
if(wx_id != wx_ids || zfb_id != zfb_ids){
clearInterval(int);//清除定时器
}
} }
});
}

2.3 php 后台处理代码

直接看php代码

<?php
namespace app\service\controller;
use think\Loader;
use think\Session;
use alipay\jssdk;
use think\Db;
use alipayapi\aop\AopClient;
use alipayapi\aop\request\AlipaySystemOauthTokenRequest;
use alipayapi\aop\request\AlipayUserInfoShareRequest;
use alipayapi\aop\request\AlipayUserUserinfoShareRequest; /**
* Class Alipay
* @package app\service\controller
* @note 该控制器是做支付宝第三方登录的
*/
class Alipay extends Base{ private $appid;
private $rsaPrivateKey; //应用密钥
private $alipayrsaPublicKey; //支付宝公钥
private $grantRedirect; //授权后回调地址
private $aop; //操作第三方登录的类对象 public function __construct()
{
require("./extend/alipayapi/AopSdk.php");
$this->appid='2018111362173186';
$this->alipayrsaPublicKey='您的公钥';
$this->rsaPrivateKey='您的私钥'; //该回调地址必须和支付宝开发者平台对应的应用设置的回调地址一致
$this->grantRedirect='https://www.baidu.com/Alipay/getAlipayUseInfo'; /**
* 该类是支付宝官方sdk方法
*/
$this->aop = new AopClient(); $aop=$this->aop;
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $this->appid;
$aop->rsaPrivateKey = $this->rsaPrivateKey;
$aop->alipayrsaPublicKey = $this->alipayrsaPublicKey;
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='UTF-8';
$aop->format='json';
parent::__construct(); } /**
* 动态创建二维码
*/
public function alipayCreateQRcode(){ $phone = input("param.phone");//接收电话号码
$codeObj = new \qrcode\QRcode();
$url='https://www.baidu.com/Alipay/goQRcodefunc?mobile='.$phone;//url拼接电话号码参数,准备只做二维码
$dir = './public/qrcode/';
$size = 10;
if(!is_dir($dir)){
@mkdir($dir,0777);
} $createDirImg = $dir.$moblie.'_alipay.jpg';//生成的二维码图片的地址
$codeObj::png($url,$createDirImg,'L',$size,2);//生成二维码 $msg['code'] = 10000;
$msg['url'] = 'https://www.baidu.com'.substr($createDirImg,1,strlen($createDirImg));;
$msg['mobile'] = $moblie; echo json_encode($msg);//返回二维码地址
} /**
* @note 扫二维码跳转到的方法
*/
public function goQRcodefunc(){ $mobile=input("param.mobile");//接收二维码传过来的电话
$this->grantRedirect=urlencode($this->grantRedirect."?mobile=$mobile");//拼接授权回调的地址,吧mobile传过去
$url ="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id={$this->appid}&scope=auth_user&redirect_uri={$this->grantRedirect}";
header("Location:".$url);//跳转到下面的url拉起授权页面
} /**
*@note 根据传过来的授权码换取,授权的accessToken
*/
public function getAccess_token($code){
$request = new AlipaySystemOauthTokenRequest();
$request->setGrantType("authorization_code");
$request->setCode($code);//这里传入 code
$result = $this->aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
if(isset($result->$responseNode->access_token)&& !empty($result->$responseNode->access_token)){
return $result->$responseNode->access_token;
}else{
$files = 'ali/'.date("Ymd").".txt";
$log = 'time:'.date('Y-m-d H:i:s').'---errsssssss code:'.$code.'---response:'.json_encode($result)."\n\n";
filePutContents($files,$log);
}
} /**
* @param $code 根据传过来的授权码换取授权的用户信息
* @return array 返回用户的信息
* @throws \Exception
*/
public function getAlipayUserdata($code){
$access_token=$this->getAccess_token($code);
$request_a = new AlipayUserInfoShareRequest();
$result_a = $this->aop->execute ($request_a,$access_token); //这里传入获取的access_token $user_id = $result_a->alipay_user_info_share_response->user_id; //用户唯一id
$city = $result_a->alipay_user_info_share_response->city; //用户城市
$province = $result_a->alipay_user_info_share_response->province; //用户省份
$avatar = $result_a->alipay_user_info_share_response->avatar; //用户头像 $is_student_certified = $result_a->alipay_user_info_share_response->is_student_certified;
$gender = $result_a->alipay_user_info_share_response->gender; //用户性别
$user_type = $result_a->alipay_user_info_share_response->user_type;
$user_status = $result_a->alipay_user_info_share_response->user_status;
$is_certified = $result_a->alipay_user_info_share_response->is_certified; return array(
'user_id'=>$user_id,
'gender'=>$gender,
'city'=>$city,
'avatar'=>$avatar,
'nickname'=>'',
'province'=>$province,
'is_student_certified'=>$is_student_certified,
'user_type'=>$user_type,
'user_status'=>$user_status,
'is_certified'=>$is_certified
);
} /**
*
*@note 授权后成功后回调的地址方法
*/
public function getAlipayUseInfo(){
$input = input('param.');//获取传过来的参数
$code = $input['auth_code'];
$param=$this->getAlipayUserdata($code); //第三方信息if(isset($param['user_id'])){
//此处是将数据存储到数据库的逻辑

       //删除二维码图片
$createDelImg = './public/qrcode/'.$moblie.'_alipay.jpg';
@unlink($createDelImg); echo '<h1 style="margin-top: 5rem; margin-bottom: 5rem; text-align: center;">绑定支付宝成功</h1>';
}else{
$msg['code'] = 405;
$msg['msg'] = '服务器繁忙,请稍后再绑定';
exit(json_encode($msg));
} } }
?>

php获取支付宝用户信息的更多相关文章

  1. QQ登入(6)腾讯微博-获取微博用户信息,发送微博

    1.1获取weibo用户信息 //先登入授权,可以参考QQ登入(1) Weibo mWeibo = new Weibo(this, mQQAuth.getQQToken()); mWeibo.getW ...

  2. Magicodes.WeiChat——使用OAuth 2.0获取微信用户信息

    使用Magicodes.WeiChat,可以很方便的获取到微信用户的信息.在使用OAuth 2.0之前,你先需要做以下操作: 1)在开发者中心修改[网页授权获取用户基本信息],在弹出的界面输入自己的根 ...

  3. 小白学react之网页获取微信用户信息

    通过上一篇<小白学react之EJS模版实战>我们学习了怎样通过EJS模版生成我们高定制化的index.html文件. 本篇我们将会继续延续我们的alt-tutorial项目的实战计划.去 ...

  4. python flask获取微信用户信息报404,nginx问题

    在学习flask与微信公众号时问题,发现测试自动回复/wechat8008时正常,而测试获取微信用户信息/wechat8008/index时出现404.查询资料后收发是nginx配置问题. 在loca ...

  5. SpringBoot中获取微信用户信息从未如此简单!

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  6. java、JavaScript获取微信用户信息登录优化方案

    1.获取微信用户信息要调用微信的好几个接口,再加上自己系统的接口就会变的很慢,影响用户体验,之前走过的弯路我就不赘述了,直接说新的方案. 2.第一步都是向微信发起获取用户code请求: 请求接口:ht ...

  7. C# 调用LDAP接口获取域用户信息

    C# 调用LDAP接口获取域用户信息: 根据用户显示名称和邮箱的前半部分,拉去相应的用户列表,进行智能提示. web 的提示控件可以用select2. using System; using Syst ...

  8. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  9. 在SharePoint中无代码开发InfoPath应用: 获取当前用户信息

    很多种不同的场景下,会需要得到当前的用户信息,例如需要根据当前用户判断组,进而控制权限. 首先InfoPath提供了一个userName方法,来实现这个目的,不过这个方法的问题是只能获得不包含域名的用 ...

  10. 玩玩微信公众号Java版之五:获取关注用户信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据Op ...

随机推荐

  1. 写写Redis十大类型bitmap的常用命令

    其实这些命令官方上都有,而且可读性很强,还有汉化组翻译的http://redis.cn/commands.html,不过光是练习还是容易忘,写一写博客记录一下 bitmap 位图,是由0和1状态表现的 ...

  2. 初学者使用1Panel面板快速搭建WordPress网站

    之前介绍了宝塔面板以及如何搭建wordpress网站,这篇文章我们来学习如何使用1Panel面板搭建wordpress网站. 一.1Panel面板介绍 1. 介绍 1Panel 是一个现代化.开源的基 ...

  3. 【JavaScript】前端算法题(重建二叉树、反向输出链表每个节点)

    前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树.反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的 ...

  4. centos7更换aliyun软件源一键脚本

    centos7更换aliyun软件源 centos7更换aliyun软件源一键脚本 curl -O https://raw.githubusercontent.com/Yogoshiteyo/aliy ...

  5. 映射lun

    环境 VMware1 网卡与 主机ping通 创建文件夹将文件解压进去 删除压缩包 创建虚拟机 下一步下一步,完成虚拟机 编辑虚拟机设置 否 账号密码 admin Admin@storage 等待 导 ...

  6. UDP协议测试

    UDP协议测试 我们一般想到测试连通性时第一考虑到的就是使用ping命令. 但是我们知道ping命令使用的是icmp协议,属于tcp/ip协议中的一个子协议,所以我们可以用ping或tcping命令来 ...

  7. 【OracleDB】 07 分组查询 & 分组函数

    分组函数 分组函数作用于一组数据,并对一组数据返回一个值. Oracle中分组函数的种类: - 求平均值 AVG - 计数记录数 COUNT - 求最大值 MAX - 求最小值 MIN - 求和 SU ...

  8. 强化学习 —— reinforce算法中更新一次策略网络时episodes个数的设置对算法性能的影响 —— reinforce算法中迭代训练一次神经网络时batch_size大小的不同设置对算法性能的影响

    本文相关的博客:(预先知识) 强化学习中经典算法 -- reinforce算法 -- (进一步理解, 理论推导出的计算模型和实际应用中的计算模型的区别) 本文代码地址: https://gitee.c ...

  9. vue项目之登录功能

    1.背景 在上一节的学习中我们基本上完成了登录的表单输入框界面如下: 代码: <!-- 输入框--> <el-form label-width="0px" cla ...

  10. ES6操作数组的7中方法

    ES6操作数组目前共有7中方法,分别是:forEach.map.filter.find.every.some.reduce forEach方法:对数组的每个元素执行一次提供的函数 1. forEach ...