php获取支付宝用户信息
php获取支付宝用户信息
一:创建应用
要在您的应用中使用支付宝开放产品的接口能力:
- 您需要先去蚂蚁金服开放平台(open.alipay.com),在开发者中心创建登记您的应用,此时您将获得应用唯一标识(APPID);
- 请在【功能信息】中点击【添加功能】,选择【获取会员信息】;
- 提交审核,等待审核通过,该应用正式可以使用。
需要详细了解开放平台创建应用步骤请参考《开放平台应用创建指南》。
二:配置密钥
开发者调用接口前需要先生成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获取支付宝用户信息的更多相关文章
- QQ登入(6)腾讯微博-获取微博用户信息,发送微博
1.1获取weibo用户信息 //先登入授权,可以参考QQ登入(1) Weibo mWeibo = new Weibo(this, mQQAuth.getQQToken()); mWeibo.getW ...
- Magicodes.WeiChat——使用OAuth 2.0获取微信用户信息
使用Magicodes.WeiChat,可以很方便的获取到微信用户的信息.在使用OAuth 2.0之前,你先需要做以下操作: 1)在开发者中心修改[网页授权获取用户基本信息],在弹出的界面输入自己的根 ...
- 小白学react之网页获取微信用户信息
通过上一篇<小白学react之EJS模版实战>我们学习了怎样通过EJS模版生成我们高定制化的index.html文件. 本篇我们将会继续延续我们的alt-tutorial项目的实战计划.去 ...
- python flask获取微信用户信息报404,nginx问题
在学习flask与微信公众号时问题,发现测试自动回复/wechat8008时正常,而测试获取微信用户信息/wechat8008/index时出现404.查询资料后收发是nginx配置问题. 在loca ...
- SpringBoot中获取微信用户信息从未如此简单!
前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...
- java、JavaScript获取微信用户信息登录优化方案
1.获取微信用户信息要调用微信的好几个接口,再加上自己系统的接口就会变的很慢,影响用户体验,之前走过的弯路我就不赘述了,直接说新的方案. 2.第一步都是向微信发起获取用户code请求: 请求接口:ht ...
- C# 调用LDAP接口获取域用户信息
C# 调用LDAP接口获取域用户信息: 根据用户显示名称和邮箱的前半部分,拉去相应的用户列表,进行智能提示. web 的提示控件可以用select2. using System; using Syst ...
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...
- 在SharePoint中无代码开发InfoPath应用: 获取当前用户信息
很多种不同的场景下,会需要得到当前的用户信息,例如需要根据当前用户判断组,进而控制权限. 首先InfoPath提供了一个userName方法,来实现这个目的,不过这个方法的问题是只能获得不包含域名的用 ...
- 玩玩微信公众号Java版之五:获取关注用户信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据Op ...
随机推荐
- 搭建lnmp环境-mysql(第五步)
版本mysql 5.7 先删除系统自带的db 新建文件夹/data/download 进入后下载 wget http://repo.mysql.com/mysql57-community-releas ...
- 台式机电脑散热之狂想曲——主机机箱散热的另类方法(纯空想中ing)
本博文是一篇狂想曲,之所以叫狂想曲是因为本文只是博主在无聊时突发奇想,而且仅停留于想的阶段,所以本文内容不用太过认真. 事情是这样的,博主有一台式机,有事没事的就喜欢宅在宿舍里面,有时候还能偶然用这台 ...
- 在单机条件下,MPI4PY与纯Python多进程代码来比较是否有性能优势???
如题: 最近在看MPI4PY的代码,但是发现这东西除了编写简洁外(少量代码实现复杂的多进程通信,包括单机和多机),好像也没有别的太多功能,当然MPI本身在多机通信广播.规约上做的很成熟,但是假设我们只 ...
- 再用国产操作系统deepin出现拖影现象
问题如题,使用deepin系统后发现不论是网页的拖动.滑动都会出现明显拖影现象,最神奇的是使用爱奇艺的客户端播放器时同样出现拖影现象. 不过这个拖影现象截图还体现不出来这个拖影的效果,估计只有录屏才可 ...
- DebugView使用
操作说明 要知道怎么操作debugview,首先得下载下来.https://docs.microsoft.com/en-us/sysinternals/downloads/debugview 配置过滤 ...
- 最近公共祖先模板(LCA)
include <bits/stdc++.h> using namespace std; struct LCA { int n; vector<int> dep; vector ...
- 2023 CCPC 哈尔滨游记
board zsy 11.3 下了高代课跟教练聊了会,以为差点赶不上飞机了,结果还好.飞机上一直在看<笑傲江湖> 晚上本来想写作业的,还是摆了 拉 zsy 打雀魂,三人麻将到第二天了 11 ...
- 瑞芯微-I2S | ALSA基础-3
针对音频设备,linux内核中包含了两类音频设备驱动框架: OSS:开放声音系统 包含dsp和mixer字符设备接口,应用访问底层硬件是直接通过sound设备节点实现的: ALSA:先进linux声音 ...
- 源码解析之为何要用ConcurrentHashMap
为什么要用ConcurrentHashMap? ConcurrentHashMap是JUC包下的一个线程安全的HashMap类,我们都知道多线程的场景下要用ConcurrentHashMap来代替Ha ...
- springboot踩坑&问题记录
常见错误 莫名其妙 classes/:na 前往查看.yml 的配置问题 2.驼峰命名 是因为又用了xml配置,又在yml配置文件中用了mybatis的configuration配置,两个冲突了,不是 ...