支付宝小程序登录PHP
支付宝小程序登录PHP
时序图(现在有所改变,可以直接看后面的一部分,前面在爬坑)
前言
采用TP5.1的框架实现,我知道这里会有很多的坑,在开发这个之前,我就写了两篇前奏,因为这个登录需要一些参数,这个和微信小程序的不太一样
获取code
首先我们需要调用my.getAuthCode接口获取code,然后传给服务端
首先登录一下支付宝开发者工具
首先我们写一个简单的发送code的demo,这个在官网里面有https://opendocs.alipay.com/mini/api/openapi-authorize
后面我这里改了一下js里面的
Page({onLoad() {},data: {},getAuthCode: () => {my.getAuthCode({scopes: 'auth_user',success: (res) => {console.log(res.authCode);// my.alert({// content: res.authCode,// });let code = res.authCodeconsole.log(res);my.request({url: 'http://localhost/ttft_2/public/api/v1/getcodeali',data: code,method: 'POST',success: (mes) => {console.log(mes);}});},});},
});
但是这里面又发现了一个坑,不能使用http的请求,因此我们需要在服务器上部署才行,这个口面再发一篇,这里先拿到code再说,注释一下代码,换成这样的
Page({onLoad() {},data: {},getAuthCode: () => {my.getAuthCode({scopes: 'auth_user',success: (res) => {console.log(res.authCode);my.alert({content: res.authCode,});// let code = res.authCode// console.log(res);// my.request({// url: 'http://localhost/ttft_2/public/api/v1/getcodeali',// data: code,// method: 'POST',// success: (mes) => {// console.log(mes);// }// });},});},
});
其他的就按照官网给的就行,然后我们点击获取授权码
会弹出这样的消息,在控制台中打印的可以复制
这样一来,code码到手了
把code码发给服务端
下载支付宝sdk还是给出地址https://docs.open.alipay.com/54/103419
下载好之后把aop文件放到项目的extend目录下
另外开发这个登录需要的参数我们要准备好,不知道的话,我的前一篇博客里面有
https://blog.csdn.net/qq_45163122/article/details/104148904
我把它写到配置文件当中,(一些公共的资料注意还是一律填写到配置文件当中,方便日后的维护和管理)
登录需要的就是以上的四个参数
然后开始写我们的方法
<?phpnamespace app\api\model;use think\facade\Env;
use think\Model;require Env::get('root_path').'extend/aop/aopClient.php';
require Env::get('root_path').'extend/aop/request/AlipaySystemOauthTokenRequest.php';class User extends Model
{public static function getCodeAli($param){$aop = new \aopClient();$aop->gatewayUrl = config('base.ali_gatewayUrl');$aop->appId = config('base.ali_app_id');$aop->rsaPrivateKey = config('base.ali_rsaPrivateKey');$aop->alipayrsaPublicKey = config('base.ali_alipayrsaPublicKey');$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset='utf-8';$aop->format='json';$request = new \AlipaySystemOauthTokenRequest();$request->setGrantType("authorization_code");$request->setCode($param['code']);//$request->setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");$result = $aop->execute($request);return $result;}
}
就这样就可以登录了
这里再贴出支付宝的文档https://docs.open.alipay.com/api_9/alipay.system.oauth.token/
不过有个问题,难道我说登录就登录了吗?程序怎么会这么听话?当然不是,既然支付宝工具调试不了,那就使用api调试工具,我这里使用Postman
使用的是post请求,把我们的地址放进去,输入code,不过好像有点问题,因为我们的code码已经过期了需要重新获取,来,重新获取一个新的code
像这个就是正确的啦,现在服务器已经获取到了access_token这个参数,我们就要进行下一步操作了。
获取用户信息(不能再使用)
通过token接口调用支付宝会员查询接口获取会员信息
来,文档地址https://docs.open.alipay.com/api_2/alipay.user.info.share
上面我们获取的那个access_token是有有效期的,建议存到缓存当中
我们把程序改好了在试一次
<?phpnamespace app\api\model;use think\facade\Env;
use think\Model;require Env::get('root_path').'extend/aop/aopClient.php';
require Env::get('root_path').'extend/aop/request/AlipaySystemOauthTokenRequest.php';
require Env::get('root_path').'extend/aop/request/AlipayUserInfoShareRequest.php';class User extends Model
{/*** 支付宝获取code* @param $param* @return bool|mixed|\SimpleXMLElement* @throws \Exception*/public static function getCodeAli($param){$aop = new \aopClient();$aop->gatewayUrl = config('base.ali_gatewayUrl');$aop->appId = config('base.ali_app_id');$aop->rsaPrivateKey = config('base.ali_rsaPrivateKey');$aop->alipayrsaPublicKey = config('base.ali_alipayrsaPublicKey');$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset='utf-8';$aop->format='json';$request = new \AlipaySystemOauthTokenRequest();$request->setGrantType("authorization_code");$request->setCode($param['code']);//$request->setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");$result = $aop->execute($request);//return $result;$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";$accessToken= $result->$responseNode->access_token;return self::getUserInfoAli($accessToken);}/*** 获取支付宝用户信息* @param $accessToken* @return bool|mixed|\SimpleXMLElement* @throws \Exception*/public static function getUserInfoAli($accessToken){$aop = new \AopClient ();$aop->gatewayUrl = config('base.ali_gatewayUrl');$aop->appId = config('base.ali_app_id');$aop->rsaPrivateKey = config('base.ali_rsaPrivateKey');$aop->alipayrsaPublicKey = config('base.ali_alipayrsaPublicKey');$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset='utf-8';$aop->format='json';$request = new \AlipayUserInfoShareRequest ();$result = $aop->execute ( $request , $accessToken );return $result;}
}
提醒一下,这里code只能使用一次,使用一次之后就会失效
程序写好之后调用发现了一个惊喜,好吧,坑还是有的,按照他的来
提升开发权限
找到我们的小程序
一步一步来
调用,然后再次出错,陷入一阵。。。。。
获取用户信息改变
好吧既然如此,就上官网查看
它居然说不能使用了
通过前台调用用户接口
my.getOpenUserInfo
https://opendocs.alipay.com/mini/api/ch8chh
现在换一种思路,在小程序端查询信息存入到数据库中,
改了一下代码,我在这里贴出来
var app = getApp()
Page({data: {hasUserInfo: false},getUserInfo() {my.getAuthCode({scopes: 'auth_user',fail: (error) => {console.error('getAuthCode', error);},success: (res) => {let code = res.authCode;my.request({url: 'https://www.guizimo.top/demo/public/index.php/api/v1/getcodeali',method: 'POST',data:{code:code},});my.getAuthUserInfo({fail: (error) => {console.error('getAuthUserInfo', error);},success: (userInfo) => {console.log(`userInfo:`, userInfo);this.setData({userInfo,hasUserInfo: true,});my.request({url: 'https://www.guizimo.top/demo/public/index.php/api/v1/setuserinfoali',method: 'POST',data:{avatar:userInfo.avatar,nickName:userInfo.nickName},success: (result) => {console.log(result);my.alert({content: '登录成功',});}});}});}});},clear() {this.setData({hasUserInfo: false,userInfo: {}})}
})
后台主要是存入信息,用了两个接口我把实现的方法写在下面
<?phpnamespace app\api\model;use think\Db;
use think\facade\Cache;
use think\facade\Env;
use think\Model;require Env::get('root_path').'extend/aop/AopClient.php';
require Env::get('root_path').'extend/aop/request/AlipaySystemOauthTokenRequest.php';class User extends Model
{/*** 支付宝获取code* @param $param* @return bool|mixed|\SimpleXMLElement* @throws \Exception*/public static function getCodeAli($param){//return $param;$aop = new \aopClient();$aop->gatewayUrl = config('base.ali_gatewayUrl');$aop->appId = config('base.ali_app_id');$aop->rsaPrivateKey = config('base.ali_rsaPrivateKey');$aop->alipayrsaPublicKey = config('base.ali_alipayrsaPublicKey');$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset='utf-8';$aop->format='json';$request = new \AlipaySystemOauthTokenRequest();$request->setGrantType("authorization_code");$request->setCode($param['code']);//$request->setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");$result = $aop->execute($request);//return $result;$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";//$accessToken= $result->$responseNode->access_token;$userid = $result->$responseNode->user_id;//return $userid;return self::saveUserId($userid);}/*** 保存UserID到数据库* @param $userid* @return bool* @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\ModelNotFoundException* @throws \think\exception\DbException*/public static function saveUserId($userid){$res = UserAli::where('userid',$userid)->find();if($res){$Uid = $res['id'];}else{$Uid = Db::name('user_ali')->insertGetId(['userid'=>$userid]);}$result = Cache::set('Uid',$Uid);return $result;}/*** 保存好信息* @param $param* @return int|string* @throws \think\Exception* @throws \think\exception\PDOException*/public static function setUserInfoAli($param){$Uid = Cache::get('Uid');//return $Uid;$res = UserAli::where('id',$Uid)->update(['avatar' => $param['avatar'],'nickName' => $param['nickName']]);return $res;}}
演示
最后来演示一波,实在是太烦了,不过到现在又十分的简单了
在开发者工具中调用接口
注意这个两个接口的状态
说明调用没有什么大问题,后面还是搭建了一个环境来测试,不然每次登录都要来这里面获取,真的是很烦。
最后查看数据库,看看我们的数据是否存入成功了
现在就大功告成了
不过当然还有很多东西需要优化,支付宝的登录和微信小程序的登录有一些不太一样,后面也会写一篇关于微信小程序登录的。
支付宝小程序登录PHP相关推荐
- 喵喵的支付宝小程序登录
B站地址https://www.bilibili.com/read/cv5917135 1.注册 首先第一步你需要支付宝账号,其中如果你想拥有支付宝小程序支付功能,需要你的账户类型是企业. 查看步骤: ...
- (JAVA)支付宝小程序登录相关(authToken获取用户唯一userId、encryptedData解密手机号)
前言: 最近公司做一个支付宝小程序项目,用支付宝userId做唯一用户id,后台encryptedData解密出用户支付宝绑定的手机号信息,其中 参数:authToken和encryptedData均 ...
- golang 获取支付宝小程序用户手机号、登录授权、AES解密
目前支付宝官方的api没有关于golang语言的sdk,最近在开发支付宝小程序登录,发现支付宝对于敏感信息会进行AES加密 ,例如获取用户手机号,会先由前端获取手机号密文.传给服务端,进行解密,从而获 ...
- 小程序登录 之 支付宝授权
众所周知啊,微信小程序是可以通过微信本身授权后再登录,平台可以拿到微信用的的账号相关信息,然后保存到数据库中,那么同理在支付宝小程序开发过程中,登录功能的设计也可以如此 上图是官方提供的时序图,具体看 ...
- 微信小程序公众号支付宝小程序的登录授权、支付、分享、人脸识别人脸核身
文章目录 一.微信小程序 1. 获取信息用户信息 2.支付 3.分享 4. 腾讯云小程序人脸核身 二.微信公众号 1.获取信息用户信息 2.支付 3. 分享(普通分享) 4.分享(vue单页面 配置分 ...
- 支付宝小程序授权登录 (Java 后台篇)
支付宝小程序授权登录 (Java 后台篇) 开始 : 实现支付宝小程序授权登录功能, 本文主要是介绍支付宝小程序授权登录流程,与关键登录与处理代码. 流程 : 关键代码 : 1.获取用户信息 /*** ...
- 支付宝小程序获取用户授权并进行认证登录流程(前端)
1.支付宝小程序获取用户授权并进行认证登录流程 1.1申请获取用户信息能力 登录功能做之前要先沟通好客户的需求,支付宝小程序获取用户授权调用相应的接口之前要先获得对应的能力.如果需要获取身份证 ...
- pyqt5点击按钮后关联程序一直运行指导再次点击按钮_揭秘支付宝小程序调试方法...
本文摘自 https://rax.js.org 本地 IDE 调试 IDE 模拟器中模拟了大部分的真机 API,并且配有调试工具,建议先在模拟器中完成基础功能.样式的调试,然后在真机上验证和调试,当然 ...
- 支付宝小程序面向个人开放了!我将以一个 Demo 为例讲解整个流程。
Hello,我是犯迷糊的小 K.目前是 ifanr 的一只前端攻城狮,同时也是知晓云团队的一员. 3 月伊始,ifanr 旗下品牌--知晓云 3.0 版本正式上线.此次更新得到业内许多开发者的密切关注 ...
- 用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
2018 年,被称为小程序正式搭建互联网生态圈的一年. 各大互联网巨头纷纷围猎小程序,意图用小程序丰富自己的服务形态. 而随着入局者越来越多,竞争愈发激烈.虽有"小程序红利期将持续 5 年& ...
最新文章
- 一个Linux下的 俄罗斯方块游戏,基于 ncurse 库。。
- JDBC –模拟序列
- 分类器交叉验证java_使用交叉验证的KNN分类器
- Centos7.x 网卡启动报错(Failed to start LSB: Bring up/down networking)
- 【C++ STL】深入解析神秘的 --- 仿函数
- mysql 建表sysdate_mysql数据库基本操作练习
- 英才计划计算机潜质测评试题,员工能力与素质测评题库完整.doc
- wxpython使用多进程_wxPython 使用总结
- MRAppMaster类
- python房屋租赁系统的设计与实现_基于ssh的房屋租赁系统的设计与实现(含源文件)...
- 如何创造一个能和你对话的语音AI?
- svn异常:Aborting commit: 'xxx' remains in conflict
- Java练手项目实战——五子棋游戏实现思路及源码
- 服务器被攻击 常见的服务器攻击方式有哪些
- Vue一级路由与二级路由/路由重定向
- 微信点餐系统——买家类目service层创建并测试通过
- c语言实验设备管理系统设计作业,C语言课程设计实验设备管理系统设计
- adobe cs5 indesign 不显示文本框_Adobe CS5 InDesign自动添加页码
- 《Mining Quality Phrases from Massive Text Corpora》论文学习笔记
- “嫦娥四号”探测器凌晨发射,中国探月计划第二阶段进入尾声
热门文章
- 闭着眼学基础python 保姆教程:组合数据类型(1)序列类型
- CSS动画效果(animation属性)解析
- Android更换皮肤解决方案
- Django学习笔记-settings.py详解
- Computer Vision的尴尬---by林达华
- 【软件分析/静态程序分析学习笔记】5.数据流分析基础(Data Flow Analysis-Foundations)
- 融360第三季度营收4.44亿 营销费用占比大幅降低
- 嗅探技术---网络安全入门笔记DAY5
- Springboot配置Redis报:io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
- 微信小程序获取用户信息,返回nickName是微信用户,返回了匿名的头像名称原因。