From e1f5ba620ad2f0b3f62c1faa45ad65a854a3c79a Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 05 六月 2024 20:04:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java |  124 ++++++++++++++++++++++++++--------------
 1 files changed, 80 insertions(+), 44 deletions(-)

diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
index 79ebed2..b1379ab 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -2,10 +2,15 @@
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+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.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.response.AlipaySystemOauthTokenResponse;
@@ -237,10 +242,6 @@
             throw new ServiceException("密码输入错误");
         }
 
-        if (!sysUser.getUserType().equals("2")){
-            throw new ServiceException("该人员不是拍卖师");
-        }
-
         LambdaQueryWrapper<AuctionSalesroom> wrapper=Wrappers.lambdaQuery();
         wrapper.eq(AuctionSalesroom::getAuctionSalesroomNo,arepartAuctionBidRecordDTO.getAuctionSalesroomQrcode());
         wrapper.eq(AuctionSalesroom::getDelFlag,0);
@@ -250,12 +251,11 @@
 
     @Override
     public AppMiniLoginVO actionMiniLogin(AppMiniLoginDTO appMiniLoginDto) {
-        try {
         AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO();
-        if (appMiniLoginDto.getType()==1){
-            if (appMiniLoginDto.getAuth_code()== null || appMiniLoginDto.getAuth_code().length() == 0) {
+        if (appMiniLoginDto.getType()==1) {
+            if (appMiniLoginDto.getAuth_code() == null || appMiniLoginDto.getAuth_code().length() == 0) {
             } else {
-                AppMiniLoginVO user=new AppMiniLoginVO();
+              /*  AppMiniLoginVO user=new AppMiniLoginVO();
                 //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType
                 //实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式
                 AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2");
@@ -272,7 +272,6 @@
                     throw new RuntimeException(e);
                 }
                 //刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段
-                request.setRefreshToken(response.getAccessToken());
 
                 //返回成功时 就将唯一标识返回
                 if (response.isSuccess()) {
@@ -280,37 +279,92 @@
                     //我这里只返回了一个字段给前端用
                     String user1= response.getOpenId();
                     appMiniLoginVo.setZfbuserid(response.getOpenId());
-                    AlipayUserInfoShareResponse  alipayUserInfoShareResponse=getAliUserInfo(response.getAccessToken());
-                    appMiniLoginVo.setPhone(alipayUserInfoShareResponse.getPhone());
+                    AlipayUserInfoShareResponse  alipayUserInfoShareResponse= null;
+                    try {
+                        AlipayUserInfoShareRequest request1 = new AlipayUserInfoShareRequest();
+                        AlipayUserInfoShareResponse response1 = alipayClient.execute(request1, response.getAccessToken());
+                        appMiniLoginVo.setPhone(response1.getPhone());
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+
                     R<SysUser> sysUserR = sysUserClient.queryUserByPhone(alipayUserInfoShareResponse.getPhone());
                     SysUser data = sysUserR.getData();
                     appMiniLoginVo.setSysUser(data);
                 }
+            }*/
+
+
+                String response = JSON.parseObject(appMiniLoginDto.getAuth_code()).getString("response");
+
+                //1. 获取验签和解密所需要的参数
+                Map<String, String> openapiResult = JSON.parseObject(appMiniLoginDto.getAuth_code(),
+                        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, ALIPAY_PUBLIC_KEY, charset, signType);
+                } catch (AlipayApiException e) {
+                    //验签异常, 日志
+                }
+                if (!signCheckPass) {
+                    //验签不通过(异常或者报文被篡改),终止流程(不需要做解密)
+                }
+
+                //3. 解密
+                String plainData = null;
+                if (isDataEncrypted) {
+                    try {
+                        plainData = AlipayEncrypt.decryptContent(content, encryptType, "VSpPcLQjLSoTz6Yd7KNoyQ==", charset);
+                    } catch (AlipayApiException e) {
+                        //解密异常, 记录日志
+                        e.getMessage();
+                    }
+                } else {
+                    plainData = content;
+                }
+
             }
         }else{
-            WxMaJscode2SessionResult session = null;
-            String unionid;
-            String openid;
-            String sessionKey = null;
-            //获取session
-            session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode());
-            if (session != null && StringUtils.isNotBlank(session.getOpenid())) {
-                unionid = session.getUnionid();
-                openid = session.getOpenid();
-                sessionKey = session.getSessionKey();
 
 
-                String responseAccessToken = getAccessTokenByWX();
+            String responseAccessToken = null;
+            try {
+                responseAccessToken = getAccessTokenByWX();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
 
-                JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
+            JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
                 String accessToken = jsonAccessToken.getString("access_token");
                 String errmsg = jsonAccessToken.getString("errmsg");
                 Long expiresIn = jsonAccessToken.getLong("expires_in");
                 if (StringUtils.isBlank(accessToken)) {
                     throw new ServiceException(errmsg);
                 }
-                String responseUserPhoneNumber = getMobileByWX(accessToken, appMiniLoginDto.getCode());
-                JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
+            String responseUserPhoneNumber = null;
+            try {
+                responseUserPhoneNumber = getMobileByWX(accessToken, appMiniLoginDto.getCode());
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
 
 
                 String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
@@ -320,33 +374,15 @@
                 R<SysUser> sysUserR = sysUserClient.queryUserByPhone(mobile);
                 SysUser data = sysUserR.getData();
                 appMiniLoginVo.setSysUser(data);
-
-                appMiniLoginVo.setMiniOpenid(openid);
-                appMiniLoginVo.setWxUnionid(unionid);
                 appMiniLoginVo.setPhone(mobile);
-                appMiniLoginVo.setSessionKey(sessionKey);
-           }
         }
             return appMiniLoginVo;
-        } catch (Exception e) {
-        e.printStackTrace();
-        return null;
-    }
+
     }
 
 
 
-    private AlipayUserInfoShareResponse getAliUserInfo (String accessToken) throws Exception {
 
-        AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2");
-        AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
-        AlipayUserInfoShareResponse response = alipayClient.execute(request, accessToken);
-        if(response.isSuccess()){
-            System.out.println("获取会员信息 - 调用成功");
-            return response;
-        }
-        return null;
-    }
 
     @Override
     public PageDTO<MemberAuctionSalesroomVO> getMemberAuctionSalesroomList(MemberAuctionSalesroomDTO memberAuctionSalesroomDTO) {

--
Gitblit v1.7.1