最详细Java实现支付宝第三方登录

文章目录

概要

分享最新Java实现支付宝登录。(注:支付宝登入用个人账号登录(不非得用企业账号)即可测试,如果用沙箱环境进行测试可能会有Bug,建议用个人用户进行测试❤)如果用沙箱环境的话需要

把底下的路径改为它https://openauth-sandbox.dl.alipaydev.com/oauth2/publicAppAuthorize.htm?

流程

登录支付宝开放平台 链接如下:

https://open.alipay.com/https://open.alipay.com/

 打开控制台,创建一个自己需要的应用(这边用的网页/移动应用进行演示)然后填写资料,商家账号写自己的个人账号即可

https://open.alipay.com/develop/pm/create?from=createMenuPage&templateId=6-bcb9-7250e6fd2c431487669730456https://open.alipay.com/develop/pm/create?from=createMenuPage&templateId=6-bcb9-7250e6fd2c431487669730456

 创建完需要申请上线 如下图所示:

 然后进行开发设置

 

密钥工具下载地址 

小程序文档 - 支付宝文档中心支付宝文档中心https://opendocs.alipay.com/isv/02kipk

 绑定产品 如下:

代码

以上的准备工作就结束了,以下将用最简洁的代码实先登录功能,首先创建一个spring项目

导入依赖:

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

实体类:

package com.liu.zfb.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AlipayUser {
    private String Address;
    private String CertNo;
    private String City;
    private String CollegeName;
    private String Degree;
    private String Mobile;
    private String Phone;
    private String Province;
    private String UserName;
    private String NickName;

}

 业务逻辑类:

package com.liu.zfb.service.impl;

import com.alipay.api.AlipayClient;
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 com.liu.zfb.pojo.AlipayUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;

@Service
public class AlipayLoginService implements InitializingBean {

    private static final Logger LOGGER = LoggerFactory.getLogger(AlipayLoginService.class);

    /**Alipay客户端*/
    private AlipayClient alipayClient;

    /**支付宝网关*/
    /**沙箱的*/
    private static final String ALIPAY_BORDER_DEV = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
/**个人用户的*/
    private static final String ALIPAY_BORDER_PROD = "https://openapi.alipay.com/gateway.do";
    /**appID**/
    private static final String APP_ID_PROD = "2021003196653501";
    /**私钥*/
    private static final String APP_PRIVATE_KEY ="";
    /**支付宝公钥*/
    private static final String ALIPAY_PUBLIC_KEY ="";
    @Override
    public void afterPropertiesSet() throws Exception {
        alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD, APP_ID_PROD, APP_PRIVATE_KEY, "json", "UTF-8", ALIPAY_PUBLIC_KEY, "RSA2");

    }

    /**
     * 根据auth_code获取用户的user_id和access_token
     * @param authCode
     * @return
     */
    public String getAccessToken(String authCode) {
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        request.setCode(authCode);
        request.setGrantType("authorization_code");
        System.out.println("11111111111111111111111111111111111111111111111111111");
        try {
            AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);
            System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
            return oauthTokenResponse.getAccessToken();
        } catch (Exception e) {

            LOGGER.error("使用authCode获取信息失败!", e);
            return null;
        }
    }

    /**
     * 根据access_token获取用户信息
     * @param token
     * @return
     */
    public AlipayUser getUserInfoByToken(String token) {
        AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest ();
        try {
            AlipayUserInfoShareResponse response =  alipayClient.execute(request, token);
            if (response.isSuccess()) {
                //打印响应信息
//                System.out.println(ReflectionToStringBuilder.toString(response));
                //封装支付宝对象信息
                AlipayUser alipayUser = new AlipayUser();
                alipayUser.setAddress(response.getUserId());
                alipayUser.setCertNo(response.getCertNo());
                alipayUser.setCity(response.getPhone());
                alipayUser.setCollegeName(response.getCollegeName());
                alipayUser.setDegree(response.getDegree());
                alipayUser.setMobile(response.getMobile());
                alipayUser.setPhone(response.getPhone());
                alipayUser.setProvince(response.getProvince());
                alipayUser.setUserName(response.getUserName());
                alipayUser.setNickName(response.getNickName());
                return alipayUser;
            }
            LOGGER.error("根据 access_token获取用户信息失败!");
            return null;

        } catch (Exception e) {
            LOGGER.error("根据 access_token获取用户信息抛出异常!", e);
            return null;
        }
    }
}

实现接口类: 

package com.liu.zfb.controller;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import com.liu.zfb.pojo.AlipayUser;
import com.liu.zfb.service.impl.AlipayLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


/**
 * 支付宝第三方登录服务
 *
 * @author minghui.y
 * @create 2018-05-22 14:05
 **/
@RestController
public class AlipayController {

    @Autowired
    private AlipayLoginService alipayLoginService;

    @RequestMapping("/alipay/getAuthInfo")
    public String getAuthCode(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("支付宝返回信息....................................................");
        //从request中获取授权信息
        String authCode = request.getParameter("auth_code");
        System.out.println(authCode);
        String appID = request.getParameter("app_id");
        String scope = request.getParameter("scope");
        System.out.println(scope);
        System.out.println("aaaaaaaaa"+appID);



        if (StringUtils.isNotEmpty(authCode)) {
            //获取access_token
            String accessToken = alipayLoginService.getAccessToken(authCode);
            //获取用户信息
            if (StringUtils.isNotEmpty(accessToken)) {
                //获取用户信息
                AlipayUser alipayUser = alipayLoginService.getUserInfoByToken(accessToken);
                System.out.println("name"+alipayUser.getNickName());
                System.out.println("aaaaaaaaaaaaaa信息"+alipayUser);
                //存储到cookie中
                Cookie cookieName = new Cookie("account", alipayUser.getNickName());
                Cookie cookieRole = new Cookie("roleName", "支付宝账户");
                cookieName.setMaxAge(3600);
                cookieRole.setMaxAge(3600);
                cookieName.setPath("/");
                cookieRole.setPath("/");
                response.addCookie(cookieName);
                response.addCookie(cookieRole);
                //跳转至主界面
                response.sendRedirect("http://localhost:8051/aa");
            }
        }

        return "hello alipay!";
    }
    @RequestMapping("/aa")
   public String aa(){
        return "首页";
   }
    @RequestMapping("/login")
    public void login(HttpServletResponse resp) throws IOException {
            String id="你的appid";
            String url="你的回调路径";
            resp.sendRedirect("https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id="+id+"&scope=auth_user&redirect_uri="+url);
    }
}

将以上代码复制到你的项目里改好自己信息即可 

效果:

小结

以上就是具体步骤,我们也可以根据官方文档来写 网址如下:

小程序文档 - 支付宝文档中心支付宝文档中心https://opendocs.alipay.com/open/01emu5提供一个内网穿透的工具❤

NATAPP -https://natapp.cn/login

下载好工具后 在官网上操作:

 

创建authtoken启动项。

然后打开下载的Natapp软件文件夹,创建文本把下面代码加上先前复制的authtoken号,然后把文件后缀改成bat。

natapp.exe -authtoken=

 

 

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Java聚合支付第三方平台是基于Java语言开发的一种支付解决方案。它通过整合多个支付渠道的功能和服务,为商家提供了一种统一的支付接口,从而简化了支付流程,提高了支付效率和用户体验。 首先,Java聚合支付第三方平台可以支持不同的支付渠道,包括支付宝、微信支付、银联等,以满足不同用户的支付需求。通过一个统一的接口,商家可以轻松接入多个支付渠道,不再需要针对每个支付方式单独开发和维护支付接口,极大地减轻了开发和运维的负担。 其次,Java聚合支付第三方平台提供了丰富的支付功能和服务。商家可以通过该平台实现支付、退款、查询订单、对账等常见的支付操作,满足不同的支付场景和业务需求。同时,该平台还提供了安全性较高的支付环境和风控系统,保障交易的安全性和可靠性。 另外,Java聚合支付第三方平台还提供了一些附加功能,如支付数据分析、统计和报表等,帮助商家实时掌握支付情况和用户支付行为,从而进行数据驱动的经营决策,提升收益和用户满意度。 最后,Java聚合支付第三方平台还具有良好的扩展性和定制化能力。平台可以根据商家的具体需求进行定制开发和二次开发,满足个性化的支付需求。而且,平台还支持与其他系统的集成,如订单系统、会员系统等,实现支付和业务的无缝对接。 综上所述,Java聚合支付第三方平台是一种高效、灵活和安全的支付解决方案,为商家提供了便捷快速的支付接入和支付服务,助力商家提升营收和用户体验。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值