Java教程

【九月打卡】第20天 Java支付全家桶 企业级各类支付手段一站式解决方案(7-4)

本文主要是介绍【九月打卡】第20天 Java支付全家桶 企业级各类支付手段一站式解决方案(7-4),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称:Java支付全家桶 企业级各类支付手段一站式解决方案

课程章节:7-4 封装支付宝用户登陆的Web方法

主讲老师:神思者

课程内容:

支付宝用户登陆的Web方法的开发设计和实现,其步骤主要包括引入支付宝参数配置、引入支付宝支付SDK的maven包坐标、编写参数封装类、读取配置文件中的支付宝参数和支付宝用户登陆逻辑控制的实现代码。

课程收获:

1、引入支付宝参数配置
打开后端项目,在配置文件 application.yml 处引入支付宝参数配置,具体配置方式入下:

application:
  wxpay:
    ......
  alipay:
    gateway: 支付宝网关
    microApp:
      app-id: 支付宝小程序APPID
      public-key: 公钥
      private-key: 私钥

2、引入支付宝支付SDK的maven包坐标
到 https://github.com/alipay/alipay-sdk-java-all 网站获取支付宝支付SDK的maven包坐标,在后端项目的pom文件中进行引入,就引入方式如下:

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

3、编写参数封装类
编写参数封装类 ZfbLoginForm,其主要代码如下:

@Data
@ApiModel(value = "支付宝登录表单")
public class ZfbLoginForm {
    @ApiModelProperty(value = "临时登陆凭证")
    @NotBlank(message="临时登陆凭证不能为空")
    private String authCode;

    @ApiModelProperty(value = "昵称")
    @NotBlank(message="昵称不能为空")
    private String nickname;

    @ApiModelProperty(value = "头像URL")
    @NotBlank(message="头像URL不能为空")
    private String photo;

}

4、读取配置文件中的支付宝参数
新建 ZfbController 接口类,在这个文件内读取配置文件中的支付宝参数,具体实现如下:

    @Value("${application.alipay.microApp.app-id}")
    private String microApp_appId;

    @Value("${application.alipay.microApp.public-key}")
    private String microApp_publicKey;

    @Value("${application.alipay.microApp.private-key}")
    private String microApp_privateKey;

    @Value("${application.alipay.gateway}")
    private String gateway;

5、支付宝用户登陆逻辑控制的实现
使用支付宝SDK,实现支付宝用户登陆逻辑控制,其主要核心代码如下:

    @PostMapping("login")
    @ApiOperation("登录")
    public R login(@RequestBody ZfbLoginForm form) {
        //表单校验
        ValidatorUtils.validateEntity(form);

        AlipayClient client = new DefaultAlipayClient(gateway, microApp_appId,
                microApp_privateKey, "json", "UTF-8", microApp_publicKey,
                "RSA2");
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        request.setGrantType("authorization_code");
        request.setCode(form.getAuthCode());
        try {
            AlipaySystemOauthTokenResponse response = client.execute(request);
            if (response.isSuccess()) {
                String userId = response.getUserId();
                UserEntity user = new UserEntity();
                user.setOpenId(userId);
                QueryWrapper wrapper = new QueryWrapper(user);
                int count = userService.count(wrapper);
                if (count == 0) {
                    user.setNickname(form.getNickname());
                    user.setPhoto(form.getPhoto());
                    user.setType(2);
                    user.setCreateTime(new Date());
                    userService.save(user);
                }
                user = new UserEntity();
                user.setOpenId(userId);
                wrapper = new QueryWrapper(user);
                user = userService.getOne(wrapper);
                long id = user.getUserId();

                String token = jwtUtils.generateToken(id);

                Map<String, Object> result = new HashMap<>();
                result.put("token", token);
                result.put("expire", jwtUtils.getExpire());

                return R.ok(result);
            } else {
                return R.error("登陆授权失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("登陆授权失败");
        }
    }

这篇关于【九月打卡】第20天 Java支付全家桶 企业级各类支付手段一站式解决方案(7-4)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!