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 ...
随机推荐
- 模型推理batch inference速度无明显提升、耗时线性增长问题排查
模型推理batch inference速度无明显提升.耗时线性增长问题排查 现象描述 当模型在推理阶段使用batch inference时,推理速度并无明显提升,相比单帧多次推理收益不大.如笔者在Xa ...
- 【H5】08 图片
摘自: https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Multimedia_and_embedding 在这份教程中,到目前为止我们已经看到了 ...
- MindSpore 建立神经网络
代码原地址: https://www.mindspore.cn/tutorial/zh-CN/r1.2/model.html 建立神经网络: import mindspore.nn as nn cla ...
- Ubuntu18.04终端alacritty安装及配置
想在Ubuntu上安装alacritty终端,发现不能直接安装,在网上找到教程: Linux上安装使用最快的 GPU 加速的终端仿真器Alacritty 根据教程成功在Ubuntu18.04桌面系统上 ...
- java中sleep与 yield 区别
1.背景 在多线程的使用中你会看到这个两个方法sleep()与yield()这两方法有什么作用呢? 请看下面案例演示 2.测试 package com.ldp.demo01; import com.c ...
- 介绍一款新奇的开源操作系统:GodoOS
在快节奏的现代办公环境中,一款高效.集成化的操作系统无疑是提升工作效率的利器.今天,我们要为您隆重介绍 --GodoOS,一款专为内网办公环境设计的全能操作系统.它不仅仅是一个工具,更是您团队协作与文 ...
- BossPlayersCTF靶机笔记
BossPlayersCTF靶机 靶机概述 这是vulnhub上的一个简单的linux靶机,适合初级渗透测试人员,同时也告诉我们在渗透测试过程中要有耐心,要允许有兔子洞. 靶机整体思路: 主机端口探测 ...
- StartImage.DLL使用说明
StartImage.DLL使用说明 一.库的引入 库包含以下物件,请按照要求将以下库映入到项目中 StartImage.dll StartImage.lib StartImage.h 二.注意事项 ...
- 023.Ubuntu常见个性化配置
root登录设置 ubuntu默认关闭了root账户,可根据实际情况开启或关闭root登录. ubuntu@localhost:~$ sudo apt install openssh-server u ...
- 一次生产环境mysql迁移操作(二)mysql空间释放(碎片整理)
一次生产环境mysql迁移操作(一)数据归档 一次生产环境mysql迁移操作(二)mysql空间释放(碎片整理) 上文中增加了定时归档,现在一些大表磁盘空间一直不释放,导致数据库文件越来越大.现在介绍 ...