1.获取Authorization Code

2.通过Authorization Code获取Access Token

3.通过AccessToken获取用户的个人信息

注意:签名的时候是所有参数都要传过去

appId和appSecrect自己去农行创建应用,请自行替换,代码中展示的是demo

signCertPath:是私钥的绝对路径

private $appId = "24501a5d-e841-4827-b2b3-d14a9ea3fba4";
private $appSecret = "cff054d1d7c84036a3dc160f9457e5f423704b15";
private $config = ['signCertPath'=> Url::to("@common/helpers/ABC_OpenBank_ThridPart_Test.pfx"),'signCertPwd'=>"111111",];public function getUserInfo($accessToken ='')
{if(!$accessToken){$accessToken = $this->getToken();if(empty($accessToken)){echo "access_token未获取";exit;}}$key = substr($this->appSecret,0,24);$iv  = substr($this->appSecret,24);$biz_data = "";$encrypt_data = openssl_encrypt($biz_data,"aes192",$key,false,$iv);$data["appid"] = $this->appId;$data["biz_data"] = $biz_data;$data["sign_type"] = "SHA256";$data["timestamp"] = date('Y-m-d H:i:s',time());$data["encrypt_data"] = $encrypt_data;$data["encrypt_type"] = "AES";$data['nonce'] = $this->getRandom(32);//生成32位随机谁$data["sign"] = $this->_makeSign($data);//使用私钥进行签名;$header = ["Authorization:Bearer".$accessToken,"Content-type:application/json"];$api_url = "https://openbank.abchina.com/GateWay/openabc/api/ket/userinfo/v1";$result2 = $this->http_post2($api_url, $data, $header);$result2 = @json_decode($result2,true);return $result2;
}private function getRandom($param){$str="0123456789abcdefghijklmnopqrstuvwxyz";$key = "";for($i=0;$i<$param;$i++){$key .= $str[mt_rand(0,32)];    //生成php随机数}return $key;
}//对数据进行签名
private function _makeSign(array $data)
{$signData = '';ksort($data);foreach ($data as $k => $v){if (empty($v) || $v=='' || $v == null)continue;else$signData .= $v.'@';}$signData = trim($signData, '@');$pkcs12=file_get_contents($this->config['signCertPath']);$certs=array();//1、读取证书openssl_pkcs12_read($pkcs12,$certs,$this->config['signCertPwd']);if(!empty($certs)){//2、验证证书是否在有效期内$cer = openssl_x509_parse($certs['cert']);
//            var_dump($certs);exit;$t = time();if ($t < $cer['validFrom_time_t'] || $t > $cer['validTo_time_t']) {throw new Exception("不在有效期内!");}//3、取得密钥$pkey = openssl_pkey_get_private($certs['pkey']);//加密 OPENSSL_ALGO_SHA1 OPENSSL_ALGO_SHA256if(!openssl_sign($signData, $signature, $pkey, OPENSSL_ALGO_SHA256)){return null;}openssl_free_key($pkey);$signature = base64_encode($signature);return $signature;}return '';
}protected function http_post2($url, $data,$header = array()) {if(!is_array($data))return array();$data = @json_encode($data);$ch = curl_init();curl_setopt($ch, CURLOPT_URL,$url);if($header){curl_setopt($ch, CURLOPT_HTTPHEADER,$header);}curl_setopt($ch, CURLOPT_HEADER,0);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_TIMEOUT, 60);//超时时间$res = curl_exec($ch);curl_close($ch);return $res;
}

感谢@jian简减提供帮助

参考地址:PHP对接农行快e通授权登录_jian简减的博客-CSDN博客

PHP 农行快e通获取用户信息相关推荐

  1. 叮叮获取所有用户信息_钉钉小程序获取用户信息

    1.钉钉小程序只允许开发办公类的程序,不能开发娱乐型的程序. 2.钉钉小程序审核需要产品说明书,最大大小不能超过30M(文档). 3.貌似可以用IP,暂时没有看到有关https的限制. (业务提供商( ...

  2. 钉钉小程序获取用户信息

    钉钉小程序获取用户信息 1.钉钉小程序只允许开发办公类的程序,不能开发娱乐型的程序. 2.钉钉小程序审核需要产品说明书,最大大小不能超过30M(文档). 3.貌似可以用IP,暂时没有看到有关https ...

  3. 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)

    微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...

  4. 浙里办开发票据认证单点登陆、令牌获取用户信息

    浙里办开发票据认证单点登陆.令牌获取用户信息(JAVA后端处理)   最近在搞浙里办开发,周边的人里都没人接触过,以至于自己摸索搞起来比较心累.浙里办单点登陆需要在IRS上走申请,审核流程通过后,和指 ...

  5. java支付宝网页授权登录界面_支付宝开发平台之第三方授权登录与获取用户信息...

    对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有:QQ.微信.新浪.支付宝等等,今天我们就一起来简单学习一下支付宝第三方授权登录. 打开支付宝开发平台,注册成为开发者,点击开发者中心 ...

  6. IVX低代码平台——微信小程序获取用户信息

    写在前面 小程序可以通过方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系.本文将向大家展示低代码开发:小程序实现获取用户信息的方法,供大家参考. 文章目录 写在前面 开发概述 准备工作 用 ...

  7. java获取openid_JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息...

    https://www.cnblogs.com/lxwt/p/10154540.html?tdsourcetag=s_pcqq_aiomsg 一,首先说明下这个微信的openid 为了识别用户,每个用 ...

  8. 微信商户发红包和获取用户信息

    前几天用java实现了微信商户发红包给用户的功能.现在整理一下,方便以后参考. 总体的步骤是: - 1.在微信客户端转发自己的uri路径 - 2.拿到微信授权的Code - 3.获取用户openID ...

  9. c# 支付宝生活号 获取用户信息,不使用dome

    在蚂蚁开放平台注册申请应用上线 如果你只想看代码,直接跳至最后一步 申请过程就不多说了,申请完成后是 已上线 状态就ok了 下载支付宝开放平台开发助手,生成秘钥 点到生成密匙页面,根据自己需求选择密匙 ...

最新文章

  1. 从零开始React项目架构(四)
  2. file_operations结构体
  3. 最大子矩阵(信息学奥赛一本通-T1224)
  4. 课堂对Complex类运算符重载的小练习
  5. centos7 里面dump_centos7使用lldb调试netcore应用转储dump文件
  6. DirectX 环境搭建问题汇总
  7. 单相PWM整流器工作原理与调制方向判断
  8. DGraphDTA训练部分源码解读分析(一)2021SC@SDUSC
  9. VPC虚拟云端局域网
  10. Error obtaining UI hierarchy Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncExc
  11. macOS下不支持双面打印功能的惠普打印机如何进行手动双面打印
  12. 现代笑话二则:1.宿舍找钱;2.不漂亮的漂亮。
  13. JavaFX 边框背景
  14. 基于51单片机ds1302时钟、ds18b20、lcd12864的恒温器
  15. 思考:客户满意度(CSAT)和净满意度(NSS)区别在哪?
  16. Tensorflow Privacy
  17. 现代大学英语精读第二版(第五册)学习笔记(原文及全文翻译)——1 - Who Are you and what are you doing here?(你们是谁?来这儿做什么?)
  18. hdu3966_树链剖分
  19. 做生产智能供料系统公司排名
  20. 【JavaScript--React】本篇文章将带你体验不同于vue框架的react框架

热门文章

  1. 打印讲义中的幻灯片编号(O365新功能)
  2. FastDFS网页访问文件特别慢
  3. [ZT]WINDOWS域管理-备份域升为主域控制器
  4. 此版本之魔兽争霸3需要特定语言版本之windows 解决办法
  5. 照片的后期处理如何设置青橙色调
  6. CAD 样板图形文件路径
  7. C语言基础语法(2遍)
  8. apache启动失败故障排除
  9. 【PP-8】定义工作中心负责人
  10. OpenCasCade数学库 - 方向(gp_Dir)