支付宝小程序授权登录 (Java 后台篇)

这篇具有很好参考价值的文章主要介绍了支付宝小程序授权登录 (Java 后台篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

支付宝小程序授权登录 (Java 后台篇)
开始 :

实现支付宝小程序授权登录功能, 本文主要是介绍支付宝小程序授权登录流程,与关键登录与处理代码.


流程 :

支付宝小程序登录,Java,java,小程序,开发语言,支付宝小程序,授权登录


关键代码 :

1.获取用户信息

	/**
     * (支付宝) 换取授权访问令牌
     * @param grantType 必选 授权方式
     * @param code 可选 授权码
     * @param refreshToken 可选 刷新令牌
     * @return
     */
    private Map getAuthToken(String grantType,String code,String refreshToken) throws AlipayApiException {
    
        AlipayClient alipayClient = new DefaultAlipayClient(
                "https://openapi.alipay.com/gateway.do",  // 请求支付宝网关地址,建议定义为常量保存
                appId,     								  // 小程序APPID,建议存储在配置中心中,动态获取.
               	secretKey ,								  // 小程序密钥,建议存储在配置中心中,动态获取.
                "json",									  // 仅支持JSON
                "charset",								  // 请求使用的编码格式,如utf-8,gbk,gb2312等
                publicKey,								  // 小程序公钥,建议存储在配置中心中,动态获取.
                signType);								  // 商户生成签名字符串所使用的签名算法类型,推荐使用RSA2
                
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
		// 构建请求参数
        request.setGrantType(grantType);
        request.setCode(code);
        if(ObjectUtils.isNotEmpty(grantType)){
            request.setGrantType(grantType);
        }else if(ObjectUtils.isNotEmpty(refreshToken)){
            request.setRefreshToken(refreshToken);
        }

        // 响应
        AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
        if(response.isSuccess()){
            log.info("[AlipaySystemOauthTokenResponse] >>>> Succeed!");
            return BeanConvertUtils.objectToMap(JSON.parseObject(response.getBody()));
        } else {
            log.error("[AlipaySystemOauthTokenResponse] = Fail! Cause:{}",response.getSubMsg());
            throw new AlipayApiException("获取支付宝信息失败,请稍后再试!");
        }
    }

2.获取用户手机号

/**
     * 用户信息解密
     * @param data 前端传递的加密数据
     * @return
     * @throws Exception
     */
    private Map infoDecode(String data) throws Exception {
        // 1. 获取验签和解密所需要的参数
        Map<String, String> openapiResult =
                JSON.parseObject(data, new TypeReference<Map<String, String>>() {}, Feature.OrderedField);

        // 加签算法
        String signType = "RSA2";
        // 验签和解密用的字符集
        String charset = AliConstant.CHARSET;
        // 加密算法
        String encryptType = "AES";
        // 返回码
        String code = "code";
        String sign = openapiResult.get("sign");
        String content = openapiResult.get("response");
        // 是否加密
        boolean isDataEncrypted = !content.startsWith("{");
        // 是否验签通过
        boolean signCheckPass = false;

        // 2. 验签
        String signContent = content;

        /**
         * 小程序对应的支付宝公钥(为扩展考虑建议用appId+signType做密钥存储隔离)
         * 小程序对应的加解密密钥(为扩展考虑建议用appId+encryptType做密钥存储隔离)
         */
        String signVeriKey = aliConfig.getPublicKey();
        String decryptKey = aliConfig.getDecryptKey();
        // 如果是加密的报文则需要在密文的前后添加双引号
        if (isDataEncrypted) {
            signContent = "\"" + signContent + "\"";
        }
        try {
            signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType);
        } catch (AlipayApiException e) {
            // 验签异常
            log.error("支付宝解密用户信息 >>> 验签异常:{}",e.getMessage());
        }
        // 验签不通过(异常或者报文被篡改),终止流程(不需要做解密)
        if (!signCheckPass) {
            throw new AlipayApiException("验签失败");
        }
        // 3. 解密
        String plainData = null;
        if (isDataEncrypted) {
            try {
                plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset);
            } catch (AlipayApiException e) {
                // 解密异常, 记录日志
                log.error("Decode Abnormal:{}",e.getMessage());
                throw new AlipayApiException("解密异常");
            }
        } else {
            plainData = content;
        }
        // 自定义转换 String 转 Map
        Map map = BeanConvertUtils.objectToMap(JSON.parseObject(plainData));
        if (map != null && AliConstant.SUCCEED_CODE.equals(map.get(code))) {
            return map;
        }else{
            log.error("Decode Fail :{}",map);
            throw new AlipayApiException("解密失败");
        }
    }

关键参数指南 :

AppId : 支付宝开放平台 ⇒ 控制台 ⇒ 左上角

公钥密钥: 支付宝开放平台 ⇒ 控制台 ⇒ 开发设置 ⇒ 接口加签方式(密钥/证书)
(如图所示:)
支付宝小程序登录,Java,java,小程序,开发语言,支付宝小程序,授权登录

加密解密密钥: 支付宝开放平台 ⇒ 控制台 ⇒ 开发设置 ⇒ 接口内容加密方式(密钥/证书)
(如图所示:)
支付宝小程序登录,Java,java,小程序,开发语言,支付宝小程序,授权登录

调用相关接口也需要开通相关权限(需要填写资料):
支付宝小程序登录,Java,java,小程序,开发语言,支付宝小程序,授权登录文章来源地址https://www.toymoban.com/news/detail-522785.html


到了这里,关于支付宝小程序授权登录 (Java 后台篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】微信小程序V3支付(后台)

    目录         相关官网文档         1.需要的参数         2.引入库         3.用到的工具类         4.支付下单实现         5.支付回调 接入前准备-小程序支付 | 微信支付商户平台文档中心 微信支付-JSAPI下单 获取平台证书列表-文档中心-微信支付商户平

    2024年02月12日
    浏览(45)
  • uniapp开发支付宝小程序

    1.运行支付宝小程序  这里运行后会打开你下载的支付宝开发者工具(中间有一步是配置你的支付宝开发者工具地址,这个就没有写了)    到此为止运行支付宝小程序就成功了 2.TypeError: Function(...) is not a function  出现该原因就是用了Function,当你的代码出现了该种情况就是看

    2024年02月11日
    浏览(52)
  • 支付宝小程序模板开发,协助商家一键创建小程序

    关于支付宝小程序模板开发,之前写过相关的介绍,详情请看 【支付宝小程序模板开发,一整套流程】这篇文章。 和微信一样,支付宝也有通过接口创建小程序的服务。不过在对接模板开发那时候,还没开放这个接口,是一个邀请制的,没有被官方主动邀请到就没有权限调

    2024年02月13日
    浏览(45)
  • java整合快手小程序(登陆,支付,结算,退款,手机号授权登陆)

    快手小程序官网地址 快手小程序后台配置回调域名 KSUrlConstants(请求地址常量) 商品类目编号 根据业务自行替换 RestTemplateUtil (rest发送请求工具类) KsUtil 支付前需要先获取到用户的openId,用户openId参与支付签名 支付前需要先获取到支付权限的access_token access_token 在支付 结算

    2024年02月11日
    浏览(46)
  • uniapp支付宝小程序如何在开发者工具启动

    小程序开发者工具安装地址 在uniapp项目根目录下的manifest.json中找到支付宝小程序配置,输入在支付宝中获取的appid 选择HBuilder导航栏的工具-设置-运行配置-支付宝小程序开发者工具路径-选择到小程序开发者工具.exe 运行-运行到小程序模拟器-支付宝小程序开发者工具 运行成功

    2024年02月11日
    浏览(44)
  • Uniapp + SpringBoot 开发微信H5项目 微信公众号授权登录 JAVA后台(一、配置使用微信公众平台测试公众号)

    一、接口配置信息填写校验 这里需要填写一个URL和一个Token验证字符串 我这里是用了natapp内网穿透 将本地的后台8080端口服务映射到了 http://x7zws8.natappfree.cc https://natapp.cn/在natapp官网注册账号并且申请免费隧道 申请完了之后把域名绑定到自己的后台 后台接口: SHA1: AesExcep

    2024年03月13日
    浏览(44)
  • Java开发微信小程序授权登录

    最近对接开发微信小程序,需要获取用户的openid使用支付,所以记下这篇通用小程序授权笔记。 这里使用到开源工具Wx-Java 此致 致敬 binarywang 大佬  maven引入如下 准备参数,application配置文件需配置参数 编写WxMaProperties.java文件获取配置文件中的字段 创建配置类WxMaConfigurat

    2024年02月16日
    浏览(45)
  • uni-app使用支付宝小程序开发者工具开发钉钉小程序

    一、添加运行配置 在项目的 package.json 文件中添加以下配置 配置完毕后在 HBuilderX 中会显示运行钉钉小程序按钮  二、设置钉钉小程序开发工具路径(支付宝小程序开发者工具)  三、通过 HBuilderX  把 uniapp 项目编译成钉钉小程序 编译成功后会自动打开钉钉小程序开发工具,编

    2024年02月11日
    浏览(58)
  • uniapp开发APP跳转微信小程序和支付宝小程序(安卓版)

    开发APP时需要支付时跳转微信或者支付宝去支付,但是因为银行合作问题不能直接跳转,所以选择跳转到小程序页面进行支付,微信小程序和支付宝小程序写法不同 APP跳转微信小程序 (需要manifest.json中APP模块配置Share中微信分享保持开启) 微信小程序原始id在微信开放平台查

    2024年02月06日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包