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 先从后台获取二维码,并且展示出来

  1. function show(){
  2. var parmss = {
  3. phone:userName
  4. };
  5. $.ajax({
  6. url: model.base_url + "/Alipay/getQRcode",
  7. data: parms,
  8. type: "post",
  9. dataType: "text",
  10. success: function(res, status, xhr) {
  11. if(res != '' || res != null){
  12. //将二维码显示出来
  13. var url = res.body.url;
  14. popupUrl.find(".pm-left").find("img").attr("src",url);
  15. }
  16. },
  17. error: function(data) {
  18. }
  19. });
  20. $("#popup-bind").show();
  21. int = setInterval(model.bindQuery,"1000");//通过定时器,判断是否绑定过第三方支付
  22. }

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

  1. //根据请求后台看是否数据已经绑定
    function bindQuery(){
  2. var parmss = {
  3. phone:userName
  4. };
  5. $.ajax({
  6. url: model.base_url+"Authorland/getBindsucess",
  7. data: parmss,
  8. type: "post",
  9. dataType: "text",
  10. success: function(res, status, xhr) {
  11. if(res != '' || res != null){
  12.  
  13. if(bind_num == 0){
  14. var zfb_id = res.body.zfb_id;
  15. bind_num = 1;
  16. }else{
  17. var wx_ids = res.body.wx_id;
  18. }
             如果支付宝已经绑定,就把已经绑定的图片换上去,并且把二维码关闭掉
  19. if(zfb_id != undefined || zfb_ids != undefined){
  20. $("#bind-zfb").unbind();
  21. $("#bind-zfb").addClass("on");
  22. $("#bind-zfb").find("p").text("已绑定支付宝");
  23. $("#bind-zfb").find("img").attr("src","/public/Content/Images/wallet/zfb_on.png");
  24. }
  25. if(wx_id != wx_ids || zfb_id != zfb_ids){
  26. clearInterval(int);//清除定时器
  27. }
  28. }
  29.  
  30. }
  31. });
  32. }

2.3 php 后台处理代码

直接看php代码

  1. <?php
  2. namespace app\service\controller;
  3. use think\Loader;
  4. use think\Session;
  5. use alipay\jssdk;
  6. use think\Db;
  7. use alipayapi\aop\AopClient;
  8. use alipayapi\aop\request\AlipaySystemOauthTokenRequest;
  9. use alipayapi\aop\request\AlipayUserInfoShareRequest;
  10. use alipayapi\aop\request\AlipayUserUserinfoShareRequest;
  11.  
  12. /**
  13. * Class Alipay
  14. * @package app\service\controller
  15. * @note 该控制器是做支付宝第三方登录的
  16. */
  17. class Alipay extends Base{
  18.  
  19. private $appid;
  20. private $rsaPrivateKey; //应用密钥
  21. private $alipayrsaPublicKey; //支付宝公钥
  22. private $grantRedirect; //授权后回调地址
  23. private $aop; //操作第三方登录的类对象
  24.  
  25. public function __construct()
  26. {
  27. require("./extend/alipayapi/AopSdk.php");
  28. $this->appid='2018111362173186';
  29. $this->alipayrsaPublicKey='您的公钥';
  30. $this->rsaPrivateKey='您的私钥';
  31.  
  32. //该回调地址必须和支付宝开发者平台对应的应用设置的回调地址一致
  33. $this->grantRedirect='https://www.baidu.com/Alipay/getAlipayUseInfo';
  34.  
  35. /**
  36. * 该类是支付宝官方sdk方法
  37. */
  38. $this->aop = new AopClient();
  39.  
  40. $aop=$this->aop;
  41. $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
  42. $aop->appId = $this->appid;
  43. $aop->rsaPrivateKey = $this->rsaPrivateKey;
  44. $aop->alipayrsaPublicKey = $this->alipayrsaPublicKey;
  45. $aop->apiVersion = '1.0';
  46. $aop->signType = 'RSA2';
  47. $aop->postCharset='UTF-8';
  48. $aop->format='json';
  49. parent::__construct();
  50.  
  51. }
  52.  
  53. /**
  54. * 动态创建二维码
  55. */
  56. public function alipayCreateQRcode(){
  57.  
  58. $phone = input("param.phone");//接收电话号码
  59. $codeObj = new \qrcode\QRcode();
  60. $url='https://www.baidu.com/Alipay/goQRcodefunc?mobile='.$phone;//url拼接电话号码参数,准备只做二维码
  61. $dir = './public/qrcode/';
  62. $size = 10;
  63. if(!is_dir($dir)){
  64. @mkdir($dir,0777);
  65. }
  66.  
  67. $createDirImg = $dir.$moblie.'_alipay.jpg';//生成的二维码图片的地址
  68. $codeObj::png($url,$createDirImg,'L',$size,2);//生成二维码
  69.  
  70. $msg['code'] = 10000;
  71. $msg['url'] = 'https://www.baidu.com'.substr($createDirImg,1,strlen($createDirImg));;
  72. $msg['mobile'] = $moblie; echo json_encode($msg);//返回二维码地址
  73. }
  74.  
  75. /**
  76. * @note 扫二维码跳转到的方法
  77. */
  78. public function goQRcodefunc(){
  79.  
  80. $mobile=input("param.mobile");//接收二维码传过来的电话
  81. $this->grantRedirect=urlencode($this->grantRedirect."?mobile=$mobile");//拼接授权回调的地址,吧mobile传过去
  82. $url ="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id={$this->appid}&scope=auth_user&redirect_uri={$this->grantRedirect}";
  83. header("Location:".$url);//跳转到下面的url拉起授权页面
  84. }
  85.  
  86. /**
  87. *@note 根据传过来的授权码换取,授权的accessToken
  88. */
  89. public function getAccess_token($code){
  90. $request = new AlipaySystemOauthTokenRequest();
  91. $request->setGrantType("authorization_code");
  92. $request->setCode($code);//这里传入 code
  93. $result = $this->aop->execute($request);
  94. $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
  95. if(isset($result->$responseNode->access_token)&& !empty($result->$responseNode->access_token)){
  96. return $result->$responseNode->access_token;
  97. }else{
  98. $files = 'ali/'.date("Ymd").".txt";
  99. $log = 'time:'.date('Y-m-d H:i:s').'---errsssssss code:'.$code.'---response:'.json_encode($result)."\n\n";
  100. filePutContents($files,$log);
  101. }
  102. }
  103.  
  104. /**
  105. * @param $code 根据传过来的授权码换取授权的用户信息
  106. * @return array 返回用户的信息
  107. * @throws \Exception
  108. */
  109. public function getAlipayUserdata($code){
  110. $access_token=$this->getAccess_token($code);
  111. $request_a = new AlipayUserInfoShareRequest();
  112. $result_a = $this->aop->execute ($request_a,$access_token); //这里传入获取的access_token
  113.  
  114. $user_id = $result_a->alipay_user_info_share_response->user_id; //用户唯一id
  115. $city = $result_a->alipay_user_info_share_response->city; //用户城市
  116. $province = $result_a->alipay_user_info_share_response->province; //用户省份
  117. $avatar = $result_a->alipay_user_info_share_response->avatar; //用户头像
  118.  
  119. $is_student_certified = $result_a->alipay_user_info_share_response->is_student_certified;
  120. $gender = $result_a->alipay_user_info_share_response->gender; //用户性别
  121. $user_type = $result_a->alipay_user_info_share_response->user_type;
  122. $user_status = $result_a->alipay_user_info_share_response->user_status;
  123. $is_certified = $result_a->alipay_user_info_share_response->is_certified;
  124.  
  125. return array(
  126. 'user_id'=>$user_id,
  127. 'gender'=>$gender,
  128. 'city'=>$city,
  129. 'avatar'=>$avatar,
  130. 'nickname'=>'',
  131. 'province'=>$province,
  132. 'is_student_certified'=>$is_student_certified,
  133. 'user_type'=>$user_type,
  134. 'user_status'=>$user_status,
  135. 'is_certified'=>$is_certified
  136. );
  137. }
  138.  
  139. /**
  140. *
  141. *@note 授权后成功后回调的地址方法
  142. */
  143. public function getAlipayUseInfo(){
  144. $input = input('param.');//获取传过来的参数
  145. $code = $input['auth_code'];
  146. $param=$this->getAlipayUserdata($code); //第三方信息if(isset($param['user_id'])){
  147. //此处是将数据存储到数据库的逻辑

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

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. 入门Vue+.NET 8 Web Api记录(一)

    做自己感觉有意思的或者能解决自己需求的项目作为入门,我觉得是有帮助的,不会觉得那么无聊. 一个最简单的前后端分离项目应该是怎么样的? 我觉得就是前端有个按钮,点击向后端发送一个get请求,获取到数据后 ...

  2. 安卓网络通信之 ​HttpURLConnection​ 文件上传

    文件上传分为二步,第一步选择文件 代码思路是: chooseFile()​方法用于创建一个Intent对象,并设置Intent的Action为ACTION_GET_CONTENT,这表示获取内容,即选 ...

  3. elasticsearch初步使用学习

    通过使用elasticsearch,我们可以加快搜索时间(直接使用SQL的模糊查询搜索耗时会比较久,而且elasticsearch的响应耗时与数据量关系不大) es主要用于存储,计算,搜索数据 依次部 ...

  4. IP地址的精细化操作(将IP地址转为相对应的地址)

    第一步: 导入maven依赖: <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2 ...

  5. Jmeter JDBC连接配置

    JDBC连接配置(JDBC Connection Configuration),用于创建数据库连接,后续可对数据库进行增删查等操作.和组件[JDBC请求(JDBC Request)]搭配使用 组件路径 ...

  6. 【Java-GUI】09 Swing03 对话框

    消息弹出框案例: package cn.dzz.swing; import javax.swing.*; import java.awt.*; import java.awt.event.Action ...

  7. 【Mybatis-Plus】01 快速上手

    [官网快速上手地址] https://mp.baomidou.com/guide/quick-start.html#%E5%88%9D%E5%A7%8B%E5%8C%96%E5%B7%A5%E7%A8 ...

  8. 阿里modelscope下载模型

    个人上传的模型地址:(需要注意,这个模型参数只做测试之用,并无实际意义) https://modelscope.cn/models/devilmaycry812839668/devil/summary ...

  9. from joblib.pool import MemmapingPool 报错

    修改方法: 将 from joblib.pool import MemmappingPool   修改为: from joblib.pool import MemmappingPool     === ...

  10. 告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验

    告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验 Huggingface国内开源镜像:https://hf-mirror.com/ 里面总结了很多下载的方法,下面进行一一讲 ...