| | |
| | | package com.ruoyi.account.ali.tools; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.TypeReference; |
| | | import com.alibaba.fastjson.parser.Feature; |
| | | import com.alipay.api.AlipayApiException; |
| | | import com.alipay.api.AlipayClient; |
| | | import com.alipay.api.AlipayConfig; |
| | | import com.alipay.api.DefaultAlipayClient; |
| | | import com.alipay.api.internal.util.AlipayEncrypt; |
| | | import com.alipay.api.internal.util.AlipaySignature; |
| | | import com.alipay.api.request.AlipaySystemOauthTokenRequest; |
| | | import com.alipay.api.request.AlipayUserInfoShareRequest; |
| | | import com.alipay.api.request.AlipayUserUserinfoShareRequest; |
| | | import com.alipay.api.response.AlipaySystemOauthTokenResponse; |
| | | import com.alipay.api.response.AlipayUserInfoShareResponse; |
| | | import com.alipay.api.response.AlipayUserUserinfoShareResponse; |
| | | import com.ruoyi.account.ali.Constant.AliConstant; |
| | | import com.ruoyi.account.ali.model.AliProperties; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取用户手机号 |
| | | * @param response |
| | | * @return |
| | | */ |
| | | public String getPhoneNumber(String response){ |
| | | //1. 获取验签和解密所需要的参数 |
| | | Map<String, String> openapiResult = JSON.parseObject(response,new TypeReference<Map<String, String>>() {}, Feature.OrderedField); |
| | | String signType = "RSA2"; |
| | | String charset = "UTF-8"; |
| | | String encryptType = "AES"; |
| | | String sign = openapiResult.get("sign"); |
| | | String content = openapiResult.get("response"); |
| | | //判断是否为加密内容 |
| | | boolean isDataEncrypted = !content.startsWith("{"); |
| | | boolean signCheckPass = false; |
| | | //2. 验签 |
| | | String signContent = content; |
| | | if (isDataEncrypted) { |
| | | signContent = "\"" + signContent + "\""; |
| | | } try { |
| | | signCheckPass = AlipaySignature.rsaCheck(signContent, sign, aliProperties.getAlipayPublicKey(), charset, signType); |
| | | } catch (AlipayApiException e) { |
| | | // 验签异常, 日志 |
| | | } if (!signCheckPass) { |
| | | //验签不通过(异常或者报文被篡改),终止流程(不需要做解密) |
| | | throw new ServiceException("验签失败"); |
| | | } |
| | | //3. 解密 |
| | | String plainData = null; |
| | | if (isDataEncrypted) { |
| | | try { |
| | | plainData = AlipayEncrypt.decryptContent(content, encryptType, "XABBSOeWDakvuG9TDez4Qg====", charset); |
| | | } catch (AlipayApiException e) { |
| | | //解密异常, 记录日志 |
| | | throw new ServiceException("解密异常"); |
| | | }} else { |
| | | plainData = content; |
| | | } |
| | | return plainData; |
| | | } |
| | | |
| | | /** |
| | | * 初始化支付宝配置 |
| | | * @return |
| | | */ |