文章目录

前言

一、创建开发者账号和应用并配置

(1)创建应用

(2)接入产品并配置

(3)开发设置

二、接入SDK

(1)下载SDK

(2)写后台

代码解释 :

getToken方法的code参数怎么来的?

关于过程中出现的错误,可以使用支付宝官方的云排查工具,点击红框还可以跳转到错误原因和解决方案

以上.

总结



前言

本文将以APICloud开发的app为前端,Java为后台接入支付宝授权登录功能并获取用户基本公开信息(六个字段: 支付宝唯一的用户ID,用户昵称,头像地址,城市,省份,性别)为例,其他语言和pc端类似

一、创建开发者账号和应用并配置

(1)创建应用

登录支付宝开发平台(https://open.alipay.com/develop/manage),点击右上角的控制台,进入如下页面:

选择你的项目类型,并点击创建

填写对应的信息,关于移动应用的BundleID,应用签名以及应用包名怎么获取,由于各个开发平台的不一致,这里不一一赘述,在本社区应该可以找到答案,APICloud平台的应用可以直接在网页端的控制台查看应用包名以及Bundle ID,应用签名需要打包成正式包在真机安装GenSignature工具获取

安装成功后输入应用包名获取应用签名

(2)接入产品并配置

应用创建成功后添加相应的产品并开通,由于个人开发者需上传营业执照才能接入支付宝支付功能,所以个人开发者只能接入支付宝登录功能(免费)

(3)开发设置

添加产品后进行开发设置

下载支付宝开发助手生成应用的密钥进行加签配置(上图红框填应用公钥)(这一步很重要,千万别搞错,仔细来)

然后再给设置下面的接口内容加密方式,其他的设置不用管,如果没有这些方面的需求的话

最后就是在应用详情那里提交审核了,审核时间一般为一天内.

二、接入SDK

(1)下载SDK

按需求来,官方提供的SDK有两种形式,jar包和Maven:

Maven:(直接放在pom.xml的依赖中就好)

<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83_noneautotype</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.62</version></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

如果是下载jar包需要将jar包引入你的项目中

(2)写后台

不用去看官方的SDK文档,人家官方都已经帮你封装好了完整功能的SDK,只需要填入你自己的参数就可以了,以下代码只需填写appid,应用私钥,支付宝公钥就行(appid在支付宝开发平台创建完应用后可以看到,应用私钥,支付宝公钥在本文   一、创建开发者账号和应用并配置> (3)开发设置)  步骤完成后可以看到, 再对应一下Java的包名类名与访问后台路径名啥的就行,响应的值也注意一下(应用私钥和支付宝公钥一定不要错,很重要)

以SSM框架为例:

完整代码:

package com.sail.controller;import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.request.AlipayUserInfoShareRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayUserInfoShareResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
@Controller
public class GetInfoController {private static final String URL = "https://openapi.alipay.com/gateway.do";private static final String APPID = "你的APP ID";private static final String PRIVATE_KEY = "你自己应用的私钥";private static final String FORMAT = "JSON";private static final String CHARSET = "UTF-8";private static final String SIGN_TYPE = "RSA2";private static final String ALIPAY_PUBLIC_KEY = "你的支付宝公钥";
//通过授权码换取令牌@RequestMapping("getToken")@ResponseBodypublic void getToken(@RequestParam("code") String code,HttpServletResponse httpServletResponse) throws IOException, AlipayApiException {System.out.println(code);PrintWriter out = httpServletResponse.getWriter();AlipayConfig alipayConfig = new AlipayConfig();
//设置网关地址alipayConfig.setServerUrl(URL);
//设置应用IDalipayConfig.setAppId(APPID);
//设置应用私钥alipayConfig.setPrivateKey(PRIVATE_KEY);
//设置请求格式,固定值jsonalipayConfig.setFormat(FORMAT);
//设置字符集alipayConfig.setCharset(CHARSET);
//设置签名类型alipayConfig.setSignType(SIGN_TYPE);
//设置支付宝公钥alipayConfig.setAlipayPublicKey(ALIPAY_PUBLIC_KEY);
//实例化客户端AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modifyAlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();request.setGrantType("authorization_code");request.setCode(code);
//        request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");AlipaySystemOauthTokenResponse response = alipayClient.execute(request);if(response.isSuccess()){System.out.println("获取令牌调用成功");String accessToken = response.getAccessToken();out.print(accessToken);} else {System.out.println("获取令牌调用失败");}}
//通过令牌获取用户信息@RequestMapping("/getUserInfo")@ResponseBodypublic void getUserInfo(@RequestParam("token")String token,HttpServletResponse httpServletResponse) throws IOException, AlipayApiException {System.out.println(token);PrintWriter out = httpServletResponse.getWriter();AlipayConfig alipayConfig = new AlipayConfig();
//设置网关地址alipayConfig.setServerUrl(URL);
//设置应用IDalipayConfig.setAppId(APPID);
//设置应用私钥alipayConfig.setPrivateKey(PRIVATE_KEY);
//设置请求格式,固定值jsonalipayConfig.setFormat(FORMAT);
//设置字符集alipayConfig.setCharset(CHARSET);
//设置签名类型alipayConfig.setSignType(SIGN_TYPE);
//设置支付宝公钥alipayConfig.setAlipayPublicKey(ALIPAY_PUBLIC_KEY);
//实例化客户端AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();AlipayUserInfoShareResponse response = alipayClient.execute(request,token);Map<String,String> map = new HashMap<>();if(response.isSuccess()){System.out.println("获取用户信息调用成功");map.put("userId",response.getUserId());map.put("userName",response.getNickName());//实际为支付宝用户的昵称,个人开发者权限不够获取不到用户名map.put("avatar",response.getAvatar());//头像地址map.put("city",response.getCity());map.put("province",response.getProvince());map.put("gender",response.getGender());map.put("msg","success");} else {System.out.println("获取用户信息调用失败");map.put("msg","failed");}String jsonStr = JSON.toJSONString(map);out.print(jsonStr);}
}

代码解释 :

getToken方法的code参数怎么来的?

支付宝登录的整个流程为:点击登录按钮>调起用户授权页>同意授权>得到授权码>通过授权码换取令牌>通过令牌获取用户信息

所以code就是对应官方文档中的auth_code,也就是授权码,这个可以在前端获得,我是使用了APICloud封装的aliPayPlus模块,也可以在后台获得,详见官方的接口参数说明文档,注意scopes字段的值为auth_user,不然获取不到用户信息,文档中有举例,就是和上面代码中的两个方法类似,改一下

接口方法就行,获取授权的接口为alipay.user.info.auth,如下图调用

获取code的APICloud前端代码如下(sign参数在此方法中可以不写),authInfoStr为此接口的各个请求参数以键值对&   = 拼接而成的字符串

 var aliPayPlus = api.require('aliPayPlus');aliPayPlus.authDirect({authInfoStr: "详见官方文档的参数,此为所有参数拼接的字符串"}, function (ret) {switch (ret.resultStatus) {case "4000": api.toast({ msg: '系统异常' }); break;case "6001": api.toast({ msg: '用户中途取消' }); break;case "6002": api.toast({ msg: '网络连接出错' }); break;case "9000"://处理返回结果中的codelet resultStr = ret.result;let resultArray = resultStr.split("&");let code;for (let i = 0; i < resultArray.length; i++) {if (resultArray[i].includes("auth_code")) {code = resultArray[i].split("=")[1];}}

关于过程中出现的错误,可以使用支付宝官方的云排查工具,点击红框还可以跳转到错误原因和解决方案


以上.

本人其实也是一个小白,有什么不对的地方欢迎指正

个人开发者的项目如何接入支付宝登录功能(保姆级教学)(Java的后台为例,其他语言类似)相关推荐

  1. JDBC连接MySQL数据库,访问数据库信息完成登录功能——保姆级详细教程(附所有java和jsp源代码)

    目录 前言 JDBC的介绍 通过JDBC连接MySQL数据库 导入mysql驱动 连接数据库 连接数据库 判断连接是否成功 使用数据库实现登录 获取前端表单的用户输入 判断用户名和密码为空 查询表 判 ...

  2. discuz网站没备案无执照接入支付宝充值功能

    discuz个人网站没备案无执照接入支付宝充值功能 文章目录 事情是这样的 一.支付宝当面付是什么? 二.如何申请当面付接口 1.登录 支付宝商家中心 2.点击"产品中心",支付产 ...

  3. SpringBoot项目中集成第三方登录功能

    SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...

  4. 快速上手Springboot项目(登录注册保姆级教程)

    本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...

  5. 探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍

    探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍 文章目录 探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍 2.项目介绍 2.1.项目背景 2.2.市场分析 2.3.目标用户 ...

  6. 探花交友_第1章_项目介绍以及实现登录功能_第1节_功能介绍

    探花交友_第1章_项目介绍以及实现登录功能_第1节_功能介绍 文章目录 探花交友_第1章_项目介绍以及实现登录功能_第1节_功能介绍 1.功能介绍 1.1.功能列表 1.2.注册登录 1.3.交友 1 ...

  7. web项目web接入微信登录

    最近写了一个简单的微信第三方登录功能,存粹分享下心得和体会 首先需要APPID和SCRECT还有回调域(第三方地址,一般是公司的域名)(域名解析), 获取步骤是: a.在微信开放平台https://o ...

  8. 项目支付接入支付宝【沙箱环境】

    前言 订单支付接入支付宝,使用支付宝提供的沙箱机制模拟为订单付款.我这里主要记录一下沙箱环境如何接入到系统中,具体细节的实现.按照官方文档来就可以了. 1.使用步骤 这里有几个重要数据要拿到,一个是支 ...

  9. uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级详细教程

    前言 关于 uni-app 项目中接入微信授权登录的文章鱼龙混杂,各种乱代码.过时.没注释.不讲流程原理,非常难用. 本文实现了 uni-app H5 移动端网页项目,实现微信授权登录功能,详细讲解接 ...

最新文章

  1. 计算机视觉方向简介:深度图补全
  2. 带限制条件的最大子矩阵 - 牛客
  3. php点选按钮ajax,php – 在单选按钮上显示div中的数据单击ajax
  4. C# Programming Language学习笔记(三)
  5. 离职 10 天,仅面了 4 家公司,我的感受。。。
  6. 【好书试读】大数据处理之道
  7. 第二次作业:王者荣耀软件分析
  8. android吸附菜单,Android仿微博、人人Feed详情页吸附导航栏
  9. 独家 | 2021双11背后的数据库硬核科技
  10. 日本python教材_自学python:完整入门python书单!
  11. FluorineFx:视频录制及回放(Flash/AS3环境)
  12. FlashFXP 连接成功无法显示目录
  13. Podman一篇就学会
  14. shell 常用工具指令
  15. 购物中心智能管理系统该如何选择
  16. 解决win10笔记本内置麦克风不能用的历程和方法
  17. 【Java基础】Java IO编程:输入输出流、内存流、打印流、缓冲流BufferedReader、扫描流Scanner、序列化与反序列化
  18. echarts 球形水波_ECharts 水球图教程
  19. 特殊分布律篇2——指数分布
  20. Windows 应急流程及实战演练

热门文章

  1. python饼图添加颜色_PythonPlotly:通过字典自定义饼图颜色
  2. 33款可用来抓数据的开源爬虫软件工具
  3. 括号配对检测python123_括的拼音_括组词_括意思(解释)-常用汉字大全
  4. java微信公众号素材管理系统_微信公众平台后台素材管理
  5. QQ Tim另存为文件时闪退,错误模块ntdll.dll
  6. “零代码”写爬虫下载自己全部的豆瓣影评
  7. oracle rfs进程过多,Oracle物理备库RFS进程消失,不能启动--解决
  8. Google Earth Engine(GEE)——Landsat ETM+ to OLI 协调
  9. TI Zigbee Light Link 参考设计
  10. SQL Developer连接时报错:ORA-12528