支付宝第三方登录

支付宝登录

         最近做了第三方登录,看了官方文档,加上各种百度,依然踩过不少坑,今天和大家分享一下。

         我是做的pc端的,贴张图。

 

首先:

  1. 有支付宝的实名账号,没有实名实名一下。
  2. 然后选择合作伙伴角色,好像有三个。详情看官网:https://docs.open.alipay.com/666/enter/
  3. 填写资料。

然后:

就可以创建应用了:pc页面的,开发中心—选择网页&移动应用列表

跳出下面的页面,按规定填写,上传

------

------

填写好之后:添加这两个功能,免费使用的

 

         Ok之后 ,就是这步了,填写你的页面回调,

         应用网关就是域名,

         回调地址不用说了。

加签这个要说一下:

         首先

  1. 去这个地址下载工具:

https://opensupport.alipay.com/support/knowledge/20069/201602242782#/?_k=xj2m2v

  1. 点击查看如何生成密钥,
  2. 根据不同系统下载,解压后如下:这时没有ras_private_key三个文件!!

  1. 双击RSA2_sin.jar,点击生成RSA密钥,这时会有上图的三个文件。
  2. 注意:java代码请使用pkcs8格式的密钥!!!后面java代码中会用到

我的电脑分辨率有点大就变成这样了,

  1. 点击复制,返回这个页面,点击设置应用公钥:粘贴进去

这时会出现这样的页面:这里的支付宝公钥java代码中会用到,在此踩坑!!!

功能添加,这两个不能忘了,否则无法查询登录的用户信息:

 

到此,资料填写差不多就结束了!确认资料无误就可以提交审核了。不过暂时不要提交,后面要复制支付宝密钥。

 

下面就是java代码开发:

         首先看一下官方文档:

        https://opendocs.alipay.com/open/289/105656

第三步:应用授权URL拼装

拼接规则:

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL

参数说明:

app_id16开发者应用的app_id; 相同支付宝账号下,不同的app_id获取的token切忌混用。  
scope不定,取决于请求授权时scope个数接口权限值,目前只支持auth_user(获取用户信息网站支付宝登录)、auth_base(用户信息授权)、auth_ecard(商户会员卡)、auth_invoice_info(支付宝闪电开票)、auth_puc_charge(生活缴费)五个值;多个scope时用”,”分隔,如scope为”auth_user,auth_ecard”时,此时获取到的access_token,既可以用来获取用户信息,又可以给用户发送会员卡。  
redirect_uri100授权回调地址,是经过URLENCODE转义 的url链接(url必须以http或者https开头); 在请求之前,开发者需要先到开发者中心对应应用内,配置授权回调地址。 redirect_uri与应用配置的授权回调地址域名部分必须一致。  
state100商户自定义参数,用户授权后,重定向到redirect_uri时会原样回传给商户。 为防止CSRF攻击,建议开发者请求授权时传入state参数,该参数要做到既不可预测,又可以证明客户端和当前第三方网站的登录认证状态存在关联。  

这个可以前端写,也可以后台写,我建议后台写,以后修改app_id,redirect_uri就不用前端修改重新部署代码了。

    @GetMapping("/aliAuto/get")
    @ResponseBody
    public String test() {
        String url = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=" + appId + "&scope=" + scope + "&redirect_uri=" + redirect_uri;
       return  url ;
    }

    //scope = auth_user,auth_base  什么意思,官方已经说明了,不重复,写上就行

这里找到你的appId

 

通过auth_code获取支付宝token

 

下载阿里的SDK:使用SDK开发会方便很多

非maven项目:https://docs.open.alipay.com/54/103419/自己下载jar。

Maven项目:

        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.4.49.ALL</version>
        </dependency>

注意:

APP_PRIVATE_KEY:这个就是用pkcs8文件中的密钥

ALIPAY_PUBLIC_KEY:这个就是用支付宝公钥,而不是你的应用公钥,是支付宝公钥!支付宝公钥!!支付宝公钥!!!

CHARSET:UTF-8

RSA2:不要写RAS

贴个图应该不会搞错了:

第一次从这里设置的时候,可以直接拿到支付宝公钥,如果忘了从这边复制。

在应用里面又找不到了。

请移步这边

找到对应的appid,点击查看。

希望不要再错了!!!

从跳转连接拿到auth_code,然后获取access_token并获得你的支付宝用户id

 //通过code拿到支付宝的token
            AlipayClient alipayClient = new DefaultAlipayClient(aliUrl, appId, privateKey, "json", "UTF-8", aliPublicKey, "RSA2");
            AlipaySystemOauthTokenRequest request = getAlipaySystemOauthTokenRequest(auth_code);
            AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
            logger.info("支付宝返回信息response:","msg==="+response.getMsg()+"msg==="+response.getSubMsg() + "code==="+response.getCode());
            if (!response.isSuccess()) {
                return JsonResult.build(ResultCode.ERROR, response.getSubMsg());
            }
            //获取用户的信息--呢称
            AlipayUserInfoShareRequest userRequest = new AlipayUserInfoShareRequest();
            AlipayUserInfoShareResponse userInfo = alipayClient.execute(userRequest, response.getAccessToken());
            logger.info("支付宝返回信息userInfo:","msg==="+userInfo.getMsg()+"msg==="+userInfo.getSubMsg() + "code==="+userInfo.getCode());

            if (!userInfo.isSuccess()) {
                return JsonResult.build(ResultCode.ERROR, userInfo.getSubMsg());
            }

            System.out.println(userInfo.getUserId());

 

//具体的业务逻辑自己写了,也可以参照各个网站去实现

……

 

到此就结束了,可以提交你的资料去审核了。

 

还不懂的,可以留言!!或加我QQ

QQ:1273017523

前几天有人看了我的博客,发现还是没能完成支付宝登录,今天又看了下自己的博客,发现一些问题并作出了改正。非常感谢这位朋友!希望我们一起进步!

 

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值