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 ...
随机推荐
- 滑块解锁-scratch编程作品
程序说明: <滑块解锁>是一款基于Scratch平台制作的益智类小游戏.游戏中存在多个黄色滑块阻挡红色滑块通往出口的路径.玩家需要通过逻辑思考和精确操作,滑动黄色滑块以开辟道路,使红色滑块 ...
- Jenkins如何使用CrumbIssuer防御CSRF攻击
1.CSRF(跨站请求伪造)概述 在讲解Jenkins的跨站请求伪造(CSRF)保护机制之前,让我们首先对CSRF这一安全威胁及其重要性进行简明扼要的概述. 1.1 CSRF(跨站请求伪造)的原理 ...
- hbuilder打包的应用上架appstore屏幕快照的生成方法
当我们使用hbuiderX或apicloud这些打包工具进行打包的时候,我们需要将打包好的ipa文件进行上架,但是你会发现,我们上架的时候需要上传5.5寸的iphone.6.5寸的iphone X和两 ...
- python学习总结(重要!!!)
前取,后不取 index从0开始 list = [1,2,3,4,5,6,7,8,9]print(list[3:7]) #输出:[4, 5, 6, 7]print(list[3:-2]) ...
- 【Git】Gitee 码云的使用
1.注册.登陆.设置配置 以上步骤省略,不需要太多指示操作 2.配置SSH公钥: 先进入自己的用户目录下面 C:\Users\Administrator\ 然后右键空白位置[Git Bash Here ...
- NVIDIA公司在实体机器人上的第一步尝试 —— Nova Cater AMR —— 九号机器人与英伟达联合开发的自动驾驶研发平台“Nova Cater AMR(简称:NC)”
相关: https://www.leiphone.com/category/robot/Hgy9i8azqGncESIB.html Nova Cater AMR是一款仓储运货机器人,可以应用在仓储物流 ...
- Google的TPU的Pallas扩展功能支持的数据类型
地址: https://jax.readthedocs.io/en/latest/pallas/tpu.html jnp.float32 jnp.bfloat16 jnp.int* (all prec ...
- ubuntu编译软件报错:fatal error: libnet.h: No such file or directory
参考: https://blog.csdn.net/wuyou1995/article/details/104742326/ ------------------------------------- ...
- Game of CS 题解
前言 题目链接:洛谷:UVA. 题意简述 Jolly 和 Emily 在玩一个游戏.游戏在一棵编号为 \([0, n-1]\) 的有根树上进行,根节点是 \(0\),每条边都有一个长度,初始所有边都没 ...
- [天线原理及设计>基本原理] 1. 辐射机制
1. 辐射机制 1.1. Single Wire 单线 如果电荷不移动,则不会产生电流,也不会产生辐射. 如果电荷以匀速移动: a. 如果电线是直的,并且范围是无限的,则没有辐射. b. 如果电线弯曲 ...