为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
活动

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

主讲老师:神思者

课程内容:

支付宝用户登陆的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("登陆授权失败");
        }
    }

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消