众所周知啊,微信小程序是可以通过微信本身授权后再登录,平台可以拿到微信用的的账号相关信息,然后保存到数据库中,那么同理在支付宝小程序开发过程中,登录功能的设计也可以如此

最近在开发支付宝小程序,由于第一次开发,特此做下记录,用于后续学习使用,在刚开始的时候也遇到很多坑,在这里将遇到的坑都填好,供大家参考

废话不多说,直接上干货

1.创建小程序
首先进入支付宝开放文档,使用自己的支付宝登陆创建小程序
https://open.alipay.com/platform/home.htm.

2.小程序授权
创建完小程序之后,需要给予支付宝相应的获取会员基础信息的权限,点击自己创建的小程序进入小程序管理,在能力列表中添加相应权限

3.设置接口加密方式
右上角主账户 -> 密钥管理
在这里只是记录了一般情况来实现授权(未涉及资金方式),并不适用证书情况,查看证书情况

这里我模拟使用官方提供的支付宝密钥生成器生成密钥就行,步骤如下:
1.下载安装密钥生成器:https://opendocs.alipay.com/open/291/106097/



这里我们使用的是默认的配置就行,直接点击生成密钥,等几秒钟密钥生成后,点击上传公钥
我们的服务器会需要csr文件,直接点击获取csr文件获取,然后点击打开文件位置,将csr文件保存到服务器上面(后端验证签名和解密需要)。

这时我们就得到了密钥了,我们复制应用公钥回到上一步的接口加签方式页面。
将应用公钥复制粘贴,点击保存设置
如下图:

特别注意:
配置IP白名单和网关,白名单必须要设置 ,本地测试不用设置没有关系 ,但是如果小程序上传发布和设置成体验版的时候,必须要设置白名单,添加后端系统的域名地址,之前说可有可无在此声明一下,我在发布的时候没有设置白名单总是提示无权限访问,设置白名单:开发准备 》服务器设置》开发设置,至于网关和本地测试没有设置白名单的情况,暂时还没有注意到哪里需要设置,目前没有设置,后续如果有要用到的地方会再来更新博客,请读友们持续关注,或者有知道的朋友可以留言

4.获取支付宝唯一标识 userId
接入流程图

客户端获取 authcode

my.getAuthCode({scopes: 'auth_user', // 主动授权:auth_user,静默授权:auth_base。或者其它scopesuccess: (res) => {if (res.authCode) {// 认证成功// 调用自己的服务端接口,让服务端进行后端的授权认证,并且利用session,需要解决跨域问题my.request({url: 'https://isv.com/auth', // 该url是您自己的服务地址,实现的功能是服务端拿到authcode去开放平台进行token验证data: {authcode: res.authCode,},success: () => {// 授权成功并且服务器端登录成功},fail: () => {// 根据自己的业务场景来进行错误处理},});}},
});

名词解释:
**auth_user:**主动授权
**auth_base:**静默授权
auth_base和auth_user参数详解具体内容请查看官方文档
https://opensupport.alipay.com/support/helpcenter/166/201602487709

注意:
1. 使用auth_base静默授权时,只能通过接口获取到userId的和accessToken,不能再通过accessToken去获取用户的基本信息,如果想获取用户的基本信息必须使用auth_user主动授权,通过button按钮经过用户确认之后才可以,否则会出现权限不足等问题
如果scope=auth_base,不添加其他任何权限,alipay.user.info.share报错“aop.invalid-auth-token(无效的访问令牌 )”。
因此如果要获取具体的会员信息,调用alipay.user.info.share,scope中必填auth_user。

2. 小程序这个接口下架了alipay.user.info.share接口,其他可以正常使用(官方解释,在此未做测试,感兴趣的朋友可以测试一下),如小程序需要获取用户信息,可以使用小程序接口my.getOpenUserInfo直接在小程序方就可以获取,无需通过后端解析

my.getOpenUserInfo获取信息
amxl


<view class="page"><view class="page-section"><view>请不要一进入小程序就弹框授权,建议先了解小程序的服务内容</view><button  open-type="getAuthorize"
onGetAuthorize="onGetAuthorize" onError="onAuthError"
scope='userInfo'>会员基础信息授权
</button></view>
</view>

js

onGetAuthorize(res) {my.getOpenUserInfo({fail: (res) => {},success: (res) => {let userInfo = JSON.parse(res.response).response // 以下方的报文格式解析两层 responseconsole.log(userInfo)}});},

结果

具体详见官方文档: https://opendocs.alipay.com/mini/api/ch8chh

服务端获取 access_token
服务器端调用 alipay.system.oauth.token 接口换取授权访问令牌,开发者可通过获取到的 auth_code 换取access_token 和用户 ID。auth_code 作为换取 access_token 的票据,每次用户授权完成,回调地址中的 auth_code 将不一样,auth_cod 只能使用一次,一天未被使用自动过期,具体请参考官方文档
https://opendocs.alipay.com/apis/api_9/alipay.system.oauth.token

public Map<String, Object> InsuranceAlipayLogin(String authCode){//使用支付宝小程序的固定方法获取auth_code//String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType//实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY,APPID,PRTVATE_KEY,"json","UTF-8",ALIPAY_PUBLIC_KEY,"RSA2");AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();// 值为authorization_code时,代表用code换取request.setGrantType(GRANT_Type);//授权码,用户对应用授权后得到的request.setCode(authCode);//这里使用execute方法AlipaySystemOauthTokenResponse response = null;try {response = alipayClient.execute(request);} catch (AlipayApiException e) {log.error("获取支付宝用户信息错误", e);e.printStackTrace();}//刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段request.setRefreshToken(response.getAccessToken());//返回成功时 就将唯一标识返回if(response.isSuccess()){System.out.println("调用成功");//我这里只返回了一个字段给前端用Map<String,Object> map=new HashMap<>();map.put("userid", response.getUserId());return map;} else {return null;}}

名词解释:

GATEWAY:支付宝网关
APPID:小程序APPID
PRTVATE_KEY:应用私钥
json:参数格式
utf-8:编码格式(也可以为GBK
ALIPAY_PUBLIC_KEY:支付宝公钥(注:此处是支付宝公钥不是应用公钥,千万别搞混
RSA2:加密方式(可以为RSA等,具体看加签是使用哪种方式
authCode: 前端获取的code
GRANT_Type:值为authorization_code表示用code获取
accessToken:可以获取,上面代码未获取

认证成功 把 userId&token 保存到 session 中,在 session 有效期内就不需要每次都走授权平台进行验证
注意 如果仅是为了授权或获取用户 ID,那么到此授权结束

5.获取支付宝用户信息
获取支付宝用户信息,需要在上一步的基础上,通过accessToken获取

// 获取支付宝用户信息private AlipayUserInfoShareResponse getAliUserInfo (String accessToken) throws Exception {AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY,APPID,                    // 1. 填入appidPRIVATE_KEY,            // 2. 填入私钥 "json", "GBK", ALIPAY_PUBLIC_KEY,         // 3. 填入公钥"RSA2");AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();AlipayUserInfoShareResponse response = alipayClient.execute(request, accessToken);if(response.isSuccess()){System.out.println("获取会员信息 - 调用成功");return response;}return null;}

当然你也可以直接在一个方法中进行,获取到accessToken之后直接解析会员基本信息

注意:
在做测试时,支付宝开发工具的小程序必须选择APPID对应的小程序

否则会出现APPID参数错误的问题,刚开始没注意这个,浪费了很多时间

计划
后续会发布小程序获取手机号码,支付宝支付,支付宝退款以及微信的一些功能博文,感兴趣的朋友可以关注下

如有问题,欢迎留言!

小程序授权之支付宝(普通公钥)相关推荐

  1. 小程序授权之支付宝(证书模式)

    最近有点忙,一直没有更新支付宝如何利用证书模式来进行授权的,今天正好有点时间,对支付宝证书模式授权做一下记录,前段时间,我在一篇博文中说明了支付宝普通公钥如何进行授权,在此,一些创建小程序,配置问题不 ...

  2. 微信,支付宝支付,微信公众号小程序授权等

    微信,支付宝支付,微信公众号小程序授权等 前言 微信支付 微信授权 maven依赖(更新) 前言 最近在公司也做了很多移动端项目,如今微信公众号,小程序又特别火爆,免不了要接触支付,授权这类的业务需求 ...

  3. 支付宝小程序授权/获取用户信息

    支付宝小程序授权/获取用户信息 目录: 文章目录 支付宝小程序授权/获取用户信息 获取支付宝小程序授权token 解析支付宝小程序接口响应加密数据 获取支付宝小程序授权token ​ 前提准备工作: ...

  4. 支付宝小程序授权登录 (Java 后台篇)

    支付宝小程序授权登录 (Java 后台篇) 开始 : 实现支付宝小程序授权登录功能, 本文主要是介绍支付宝小程序授权登录流程,与关键登录与处理代码. 流程 : 关键代码 : 1.获取用户信息 /*** ...

  5. uniapp支付宝小程序授权用户信息、授权手机号码

    需求说明 uniapp开发支付宝小程序授权用户信息和用户手机号码过程中,与微信小程序的API是有所不同的,相同是都是需要<button></button>点击事件触发.接下来简 ...

  6. uniapp--支付宝小程序授权

    uniapp支付宝小程序授权 支付宝小程序的授权和微信小程序的授权基本相似,都是通过button按钮的open-type来设置的 不过支付宝小程序的另外需要设置 scope="userInf ...

  7. 微信小程序授权登录三种实现方式

    方式一:小程序授权登录 通过wx.login获取 临时登录凭证code,向后端换取token. 可以做到无感登录. 时序图: 说明: 1.客户端调用 wx.login() 获取 临时登录凭证code, ...

  8. success 已正常处理 hide_最新微信小程序授权的详细处理思路(一)

    小程序的部分接口需要经过用户授权同意才能调用.授权功能实现,是一个不可回避,又有点扯不清的话题,这里我们做一个详细深入的分析. 最新的小程序各种授权,按使用范围分成了多个scope,详细的scope, ...

  9. 想要导航提示页最新安卓区_最新微信小程序授权的详细处理思路(一)

    小程序的部分接口需要经过用户授权同意才能调用.授权功能实现,是一个不可回避,又有点扯不清的话题,这里我们做一个详细深入的分析. 最新的小程序各种授权,按使用范围分成了多个scope,详细的scope, ...

  10. 小程序授权第三方管理开发的流程

    第三方平台帮助旗下已授权的小程序进行代码管理时,需先开发完成小程序模版,再将小程序模版部署到旗下小程序帐号中,具体流程如下: 第一步:绑定开发小程序 (1)第三方平台的开发人员需先到微信公众平台(mp ...

最新文章

  1. JS得到对应字段 的值。遍历
  2. 国家计划统筹布局哪些人工智能创新平台?
  3. ABAP DESCRIBE语句
  4. POJ_1151 Atlantis(线段树)
  5. 1-1、作用域深入和面向对象
  6. 把时间变成钱?可视化平台实时监控百万数据,决策分析不再等
  7. leetcode —— 207. 课程表
  8. ElementUI:el-container实现高度占满
  9. MagicDraw建模显示中文问题
  10. 苹果Mac电脑该怎么删除磁盘及双系统分区
  11. matlab单枝节匹配器,第八讲微带匹配电路单枝节匹配电路.ppt
  12. 战神引擎php,战神引擎常用脚本接口
  13. 观《当幸福来敲门》有感
  14. 听歌识曲C++程序说明
  15. 理县“有福童享”“牵手圆梦 陪伴成长”关爱折翼天使志愿服务活动
  16. 数学不好的人可以学python吗_理解能力差、数学很差的人可以做程序员吗
  17. 微信图文排版——删除线下的真心话
  18. 关于点击微信图文信息直接跳转至外部链接
  19. 2023年河北医科大学临床检验诊断学考研分享
  20. Scrapy爬取网页并保存到数据库中

热门文章

  1. 2021TIOBE 11月榜单:Python蝉联榜首,PHP前十“岌岌可危”
  2. 在局域网内怎样使两台计算机共享,怎么使两台电脑共享数据?
  3. 从小米智能家居入手,揭秘物联网关键技术​
  4. matlab中nc值是什么意思,科学网-.nc数据读取详细资料matlab2010a及后面的版本-张凌的博文...
  5. 查找FB15k-237 entity id对应实体数据
  6. mach ipc 学习
  7. 【C++决赛】2019年全国高校计算机能力挑战赛决赛C++组题解
  8. (二)XGBoost之DART booster
  9. Learn Python The Hard Way (python 2.7) ex45.py 你来制作一个游戏
  10. 计算机输入输出方式的应用,[原创]计算机组成原理之输入输出系统题目及解答...