Browse Source

添加jsapi接口

zsf 5 months ago
parent
commit
66867c9f1d

+ 9 - 16
src/main/java/com/rf/psychological/security/DESede.java

@@ -170,21 +170,14 @@ public class DESede {
     }
 
     public static void main(String[] args) throws Exception {
-        String name = "hahah";
-        System.out.println(decryptString("27p2z4gBk/xNjD8p6nZNFE21IyxSxTpejYR2HcDAGCCdTnOtJ3n7gXz2nRgIySlAQk4MPkvO52hkWPUVJI/vsV+rKGjz4cjh50GRsef0OiX+2kRxsgVK6e54uRScnu1smQ8C2zIguhBaRgUbhbu9spsqA1bRQD90gGMf2gFEAZZ0Xl6z40d7Rmi/nQ7dH6Kgs8v1xt7oOh0zmwZwX3/Xp9FwEzXiCW2YmPm8eIjgvqu/Z3GgNFhZM6cuH/yPtgAXupfqNDtwaYQQSDPn2xrfJOp8c203olc7wLkoFf+QbtBdA4Te8QO5QoaWkIz5Jn1XpB1+06F1rLMZ+vAGzlEpfB+T5jJQT/vDexYIQm0uJCthYeZBkF5uIvOUzQ/fV8dsA0j92dKctFRncHbZC2o8/LOCrVCQu7wKkI2yoS/LffU6ixXD3j3ZRoqaWTF3/yQQMgIHa5JAhQ3Xf4sAlIoQoGXw/n1n7EWictv5qJBR7djBbdbz2b542kYhGrpcb/pHuQcyf2bNwKrNkQeE7Ph3JfJso1kdQDa8VmKlxSYgywu+SeedK5+bEicQZ1MPnVWqqaYVXLjIjY4AQ01WJfRIeXGU9vLS7H6Fv15Cl5SC3FH2UHtkeIsGjLS/MOxXSQybGWPFmnTqXmHTkcSGmKNUJ6tUvLMoruA87kxiZo6AMV2oqv9wympvpy2M0FrQdxuLyDxEVknHR3BmQuyN/Wy80bQiJ16nuf/QVzbXoP4iOuuSIw0fALxhTlVhE0EfIeUY15CWGa6eq4dFCq63STll0qEvbu7zvhWnHG9Rx6JsTF2NyDctUGLUf3YgfDZm7hD8SYTPt0I2QU2AHe6OWuoUu2DlV/sB54aNBGOTiw73UGEgBoroyfX7TRM3qS0cscMOwOcdKjv72GDzwqWXLVsCAW8eIAjjNfs1pMzAq0zIwuYVSzZnCA1uzKbZ213vKtMQ2vNkQQfEVJRPUS+brpk7Jdh4Hb7JtO7dTwFXO+0bPz/BU3URd1+VV+b3NxIRNJCOdkP1+lGXoMxyXxjgzQ2OS+QGrqKOQLf1iRqstEikMQnSaw6jFU3L4pUDiiDVHg6C/nPpIJL9QoAosRCxwfbIEkxs5+gyu2gZPX35dIO8gQvLwTQG463fiHlWTKP8vXjGU5VH0X1WCafS+eBqIXGhcBksuJsDqwytUfDzQq91l9/T09xk4wsVYPfUUvH2pCkPRM+XkpomM+dZJHflUUkEZRU5sjoUbrOqgewVRtQf8KmunzxUhw1UifLOWpbe40yOM+UPqnClEVeLYqCwua8FelO5OEBlm6NqTH5uQhYRndr/XA17xIsgRblXBEJ47tfCGHB4GZM1PUm+BbgfIf2w/oKguGfCEYD4x3nxQ5xNBFBTCQyMLXs84DBThmw1EbDH5a0jimp+sDHwWV67Qgc+tUfIoqnmvbcmOZ61hTvGyyXxHI2nRs2TiKmGT01sxhmE3lhIUlz5uIHSnfsQ0UXk01HR832Y9gmzN4NWwJK8vrSdYmX19K0ojCxZiqFgD+hD4BZQrf1nZyJXiXN1J4g9uREKXy2Z2nogp2xrDKluuxSMPyWqIwwyLrJVaO5Aspdes2q2/7kob/CoweH7jHxO+5gCSJEHtqgotCamZfEyeJ4hwByhvQZG2c8ii6bRuy2wydJNCG4gvAZfMxtn1FfhOC1cz0iKyn4gDizKiD1UKR/pADKlZuSgSIopDWUZyfY3H59TGn/eLgCCtYvM+IINBSFKQ9XkUoVQ4106tZwRDPsThSWgmFoFqHfeBnTi7FOTyHW+rWixdzs="));
-        System.out.println(encryptString("坚韧黑铁"));
-        System.out.println(encryptString("英勇黄铜"));
-        System.out.println(encryptString("英勇黄铜+"));
-        System.out.println(encryptString("不屈白银"));
-        System.out.println(encryptString("不屈白银+"));
-        System.out.println(encryptString("荣耀黄金"));
-        System.out.println(encryptString("荣耀黄金+"));
-        System.out.println(encryptString("华贵铂金"));
-        System.out.println(encryptString("华贵铂金+"));
-        System.out.println(encryptString("流光翡翠"));
-        System.out.println(encryptString("璀璨钻石"));
-        System.out.println(encryptString("超凡大师"));
-        System.out.println(encryptString("傲世宗师"));
-        System.out.println(encryptString("最强王者"));
+        System.out.println(decryptString("pN4k0rB1q2EqmRQQql6h46iBo4Jb0q1j"));
+        System.out.println(decryptString("AGySzZXGEiQ="));
+        System.out.println(decryptString("FFq0jdg/ZIU="));
+        System.out.println(decryptString("jsTC97oY/No="));
+        System.out.println(decryptString("uwtn3M2LbNE="));
+        System.out.println(decryptString("3Iy7A3sIzHw="));
+        System.out.println(encryptString("设计理论的课程"));
+
+
       }
 }

+ 22 - 3
src/main/java/com/rf/psychological/wxpay/controller/WxPayController.java

@@ -1,5 +1,6 @@
 package com.rf.psychological.wxpay.controller;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
@@ -157,6 +158,26 @@ public class WxPayController  extends BaseController {
         }
     }
 
+    @SafetyProcess
+    @ApiOperation(value = "JSAPI支付",notes = "参数同native下单")
+    @PostMapping("/jsapiPay")
+    public Result jsapiPay(@RequestBody String json){
+        log.info("json请求参数:{}",json);
+        try {
+            String paramData = AesEncryptUtils.decrypt(JSONObject.parseObject(json).getString("data"));
+            if (StringUtils.isEmpty(paramData)){
+                return fail(null,"参数不能为空");
+            }
+            //获取必要参数
+            JSONObject paramObject = JSONObject.parseObject(paramData);
+            Map result = wxPayService.jsapiPay(paramObject);
+            return success(result);
+        }catch (Exception e){
+            e.printStackTrace();
+            return fail("生成失败");
+        }
+    }
+
     /**
      * 支付通知 微信支付通过支付通知接口将用户支付成功消息通知给商户
      * @param request
@@ -361,14 +382,12 @@ public class WxPayController  extends BaseController {
             userEntity.setBirthday("-");
             userEntity.setGender("-");
             userEntity.setPetName("微信用户");
-            userEntity.setProfession("-");
+            userEntity.setProfession(DateUtil.now());
             userEntity.setAdditionInfo("微信小程序注册用户");
             userEntity.setPhone(openId);
             userEntity.setRoleType(UserRole.COMMON.getType());
             userEntity = this.userService.save(userEntity);
             resultJson.put("improve",true);
-            //登录
-//            TODO 将登录用户放入redis已登录用户信息,统计在线人数
         }
 
         resultJson.put("token", JWTUtil.getTokenByUserInfo(userEntity));

+ 7 - 0
src/main/java/com/rf/psychological/wxpay/service/WxPayService.java

@@ -76,4 +76,11 @@ public interface WxPayService {
     String generateLink(String path,String query) throws Exception;
 
     String generateWxCode(String page, String scene, String envVersion);
+
+    /**
+     * JSAPI支付
+     * @param paramObject 参数
+     * @return
+     */
+    Map jsapiPay(JSONObject paramObject) throws Exception;
 }

+ 80 - 0
src/main/java/com/rf/psychological/wxpay/service/impl/WxPayServiceImpl.java

@@ -299,6 +299,86 @@ public class WxPayServiceImpl implements WxPayService {
         return map;
     }
 
+    /**
+     * JSAPI支付
+     * @param paramData 参数
+     * @return
+     */
+    @Override
+    public Map<String,Object> jsapiPay(JSONObject paramData) throws Exception {
+        log.info("jsapiPay===="+paramData.toString());
+        String productId = paramData.getString("productId");
+        String userId = paramData.getString("userId");
+        String resultId = paramData.getString("resultId");
+        String description = paramData.getString("description");
+        String price = paramData.getString("total");
+        Integer money = new BigDecimal(String.valueOf(price)).movePointRight(2).intValue();
+        OrderInfo orderInfo = orderInfoService.createOrderByProductId(productId,userId,resultId,money,WxTradeType.JSAPI);
+        //判断支付码连接是否存在
+        String codeUrl =orderInfo.getCodeUrl();
+        log.info("生成订单----------------------"+StringUtils.hasLength(codeUrl));
+        if (StringUtils.hasLength(codeUrl) ){
+            Map<String,Object> map = new HashMap<>();
+            map.put("codeUrl",codeUrl);
+            map.put("orderNo",orderInfo.getOrderNo());
+            return map;
+        }
+        //调用统一下单API
+        HttpPost httpPost = new HttpPost(wxPayConfig.getDomain().concat(WxTradeType.JSAPI.getType()));
+        //构建必要参数
+        Gson gson = new Gson();
+        Map<String,Object> paramsMap = new HashMap<>();
+        paramsMap.put("sp_appid",wxPayConfig.getAppId());
+        paramsMap.put("sp_mchid",wxPayConfig.getMchId());
+        paramsMap.put("description",description);
+        paramsMap.put("out_trade_no",orderInfo.getOrderNo());
+        paramsMap.put("notify_url",wxPayConfig.getNotifyDomain().concat(WxNotifyType.NATIVE_NOTIFY.getType()));
+        Map<String,Object> amountMap = new HashMap<>();
+        amountMap.put("total", orderInfo.getTotalFee());
+        amountMap.put("currency", "CNY");
+        paramsMap.put("amount", amountMap);
+        log.info("paramsMap:"+paramsMap);
+
+        Map<String,String> payerMap = new HashMap<>();
+        payerMap.put("sp_openid",paramData.getString("openId"));
+        paramsMap.put("payer",payerMap);
+
+        //将body转化为json字符串
+        String jsonParams = gson.toJson(paramsMap);
+        log.info("请求参数-------"+jsonParams);
+        StringEntity entity = new StringEntity(jsonParams,"utf-8");
+        entity.setContentType("application/json");
+        httpPost.setEntity(entity);
+        httpPost.setHeader("Accept","application/json");
+        //完成签名并执行请求
+        CloseableHttpResponse response = wxPayClient.execute(httpPost);
+        //获取响应
+        try {
+            String bodyAsString = EntityUtils.toString(response.getEntity());//获取响应体
+            int statusCode = response.getStatusLine().getStatusCode();//获取状态码
+            if (statusCode == 200){//成功
+                log.info("成功,返回结果 = "+bodyAsString);
+            }else if (statusCode == 204){//成功 无返回body
+                log.info("成功");
+            }else {
+                log.info("下单失败,响应码 = " + statusCode+ ",返回结果 = " + bodyAsString);
+                throw new IOException("request failed"+bodyAsString);
+            }
+            //响应结果
+            Map<String,String> resultMap = gson.fromJson(bodyAsString,HashMap.class);
+            codeUrl = resultMap.get("prepay_id");
+            orderInfo.setCodeUrl(codeUrl);
+            orderInfoService.saveCodeUrl(orderInfo);
+            log.info("orderInfo:" + orderInfo);
+            Map<String, Object> map = new HashMap<>();
+            map.put("codeUrl", codeUrl);
+            map.put("orderNo", orderInfo.getOrderNo());
+            return map;
+        }finally {
+            response.close();
+        }
+    }
+