支付宝小程序---Java后台自动登陆功能业务逻辑实现

前提需要去支付宝开发者平台申请私钥 公钥,APPID等,这些就不一一细说了。

 

1 . 集成支付宝开发所需的SDK  maven地址  

https://search.maven.org/search?q=g:com.alipay.sdk%20AND%20a:alipay-sdk-java&core=gav 

2. 登陆需要接收一个autoCode ,即授权码,这个授权码是客户端用户请求来的,然后我们只需要向前端人员获取即可。

3.获取到授权码之后,我们就需要调用Alipay支付接口

服务端接口文档URL

https://docs.open.alipay.com/api_1

示例代码

  AlipayClient alipayClient = new DefaultAlipayClient(LoginUrl, appId, privateKey, "json", "GBK", alipayPublicKey, "RSA2");
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        request.setGrantType("authorization_code");
        request.setCode(authCode);
        // request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");

        AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
        String accessToken  = response.getAccessToken();
        if (response.isSuccess()) {
            System.out.println("调用成功");
            System.out.println("支付宝用户唯一id:" + response.getUserId());
            System.out.println("token令牌:" + response.getAccessToken());   //访问令牌。通过该令牌调用需要授权类接口

这里我只设置了

grant_type 和 code 可根据自己需求来

这是官方文档,说的很详细

当请求成功之后,我们就可以获取token,和用户的ID了。我们拿着token可以请求另外一个接口,然后获取到用户信息。

获取用户信息API文档

当请求成功之后我们可以获取到用户的头像,用户的昵称,和用户ID。这个用户ID也就是我们的支付宝账号在阿里巴巴那边存储的一个唯一标识。

4 .当我们取到这些用户信息后,还需要进一步操作,因为第一次登陆的时候,数据库中肯定是没有信息的,所以当用户登录成功之后,如果数据库中有用户的信息,那么我们需要将用户的信息做一次更新,因为我们取的信息都是从支付宝中取到的,并不是用户和我们直接交互。

打个比方:比如说用户更改了他的支付宝用户名或者头像,那我们如果不做更新的话,可想而知,根本没有同步信息。

所以数据库中有用户信息就更新一下 ,若没有用户信息,我们就把取到的用户信息插入到数据库中。用户第一次登陆的时候我们需要先根据用户ID到数据库中查询一遍。

5. 最后给前端返回  用户昵称,用会ID,和头像。这个也根据自己的业务需求。

具体逻辑如下

 AlipayClient alipayClient = new DefaultAlipayClient(LoginUrl, appId, privateKey, "json", "GBK", alipayPublicKey, "RSA2");
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        request.setGrantType("authorization_code");
        request.setCode(authCode);
        // request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");

        AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
        String accessToken  = response.getAccessToken();
        if (response.isSuccess()) {
            System.out.println("调用成功");
            System.out.println("支付宝用户唯一id:" + response.getUserId());
            System.out.println("token令牌:" + response.getAccessToken());   //访问令牌。通过该令牌调用需要授权类接口


            //根据token调用支付宝API取出用户列表信息
            AlipayClient alipayClient2 = new DefaultAlipayClient(getUserMesUrl,appId,privateKey,"json","GBK",alipayPublicKey,"RSA2");
            AlipayUserInfoShareRequest request2 = new AlipayUserInfoShareRequest();
            AlipayUserInfoShareResponse response2 = alipayClient2.execute(request2,accessToken);
            if(response.isSuccess()){
                System.out.println("调用成功");
                System.out.println("头像地址:"+response2.getAvatar());
                System.out.println("用户昵称:"+response2.getNickName());
                System.out.println("用户ID:"+response2.getUserId());

                //支付宝唯一用户ID
                String userId = response2.getUserId();
                UserExample example = new UserExample();
                example.createCriteria().andAlipayUserIdEqualTo(userId);
                List<User> userList = userMapper.selectByExample(example);

                SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                if (userList.size()>0 && userList != null){
                    //如果存在用户信息,则更新用户信息,如果用户在支付宝中更改了信息,可以达到同步。
                    User user = userList.get(0);
                    user.setImgUrl(response2.getAvatar());
                    user.setUname(response2.getNickName());
                    user.setLastLoginTime(format.format(new Date()));
                    userMapper.updateByPrimaryKey(user);
                }else{
                    //如果没有用户信息,则新插入
                    User user = new User();
                    user.setUname(response2.getNickName());
                    user.setImgUrl(response2.getAvatar());
                    user.setAlipayUserId(response2.getUserId());
                    user.setLastLoginTime(format.format(new Date()));
//                    user.setPhone(response2.getPhone());
                    user.setToken(accessToken);
                    userMapper.insert(user);
                }

                //返回信息
                UserVo userVo = new UserVo();
                userVo.setImgUrl(response2.getAvatar());
                userVo.setUname(response2.getNickName());
                userVo.setAlipayUserId(response2.getUserId());
                return ReturnResult.build(200,"success",userVo);

            } else {
                System.out.println("调用失败,没有用户信息");
            }
            return ReturnResult.build(200, "success", ParamEnum.lOGIN_SUCCES.getMsg());
        } else {
            System.out.println("调用失败");
            return ReturnResult.build(200, "fail", ParamEnum.lOGIN_FAIL.getMsg());
        }

看完的话,帮忙点个赞呗

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
支付宝小程序中也可以使用v-show来控制组件的显示与隐藏。v-show是通过控制元素的display属性来实现的,当v-show的值为true时,元素显示;当v-show的值为false时,元素隐藏。与微信小程序类似,支付宝小程序也存在一些v-show在特定情况下不能及时触发的bug。如果在支付宝小程序中遇到v-show不能及时触发的问题,可以尝试以下解决思路: 1. 确保v-show的值是响应式的,即v-show所依赖的数据发生变化时,能够正确触发元素的显示与隐藏。 2. 在v-show所在的组件中,可以尝试使用setTimeout延迟执行相关逻辑,以确保v-show能够及时触发。例如,在组件加载完成后,延迟一段时间再进行v-show的判断。 3. 如果v-show的问题仍然存在,可以考虑使用其他方式来实现元素的显示与隐藏,比如使用条件渲染指令v-if。 需要注意的是,以上解决思路是基于支付宝小程序的现有情况和常见的问题提供的,具体的解决方法可能需要根据具体情况进行调整。同时,建议在开发过程中及时查阅支付宝小程序的官方文档和开发者社区,以获取更准确、更详细的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [uniapp开发支付宝小程序](https://blog.csdn.net/summer12580/article/details/122556431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [NZ源码交易平台虚拟交易付费下载系统v2.0V2.25](https://download.csdn.net/download/jack584379/9989089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [前端小白001:关于uni-app的v-show在微信小程序上的一些bug及解决思路](https://blog.csdn.net/ReXplan/article/details/107710959)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值