huanglizhi hai 1 ano
pai
achega
7f25c31ce0

+ 9 - 5
module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java

@@ -56,7 +56,7 @@ public class PayController {
 
     @ApiOperation(value = "扫描完获取拉起支付的url")
     @PostMapping("/getPayUrl")
-    public Object getListByScan(@RequestBody @Validated PayTypeUrl payTypeUrl) throws UnknownHostException {
+    public Object getListByScan(@RequestBody @Validated PayTypeUrl payTypeUrl) throws UnknownHostException, WxPayException {
         System.out.println("授权完成后带过来的openid-------------------------------------------------------------"+payTypeUrl.getOpenid()+"------------------------------------"+payTypeUrl.getOrderId());
         OrderDO aDo = orderManager.getById(payTypeUrl.getOrderId());
         if (ObjectUtil.isNull(aDo)) {
@@ -134,13 +134,17 @@ public class PayController {
 
     @GetMapping("/weixin/callback/openidCode")
     public String handleWeixinCallback(@RequestParam("code") String code, @RequestParam("state") String state, HttpSession session) throws UnsupportedEncodingException {
+        String[] split = state.split("--");
+     String orderId=   split[0];
+     String ip = split[1];
+
+
 
-        Map<String, Object> map = JsonUtil.toMap(state);
         System.out.println("回调来了啊    code="+code+"111111111111111111111111111111111111111111111state="+state);
 //        if (!state.equals((String) session.getAttribute("WEIXIN_OAUTH_STATE"))) {
 //            log.error("用户授权,state错误");
 //        }
-        OrderDO aDo = orderManager.getById(Long.valueOf(map.get("orderId").toString()));
+        OrderDO aDo = orderManager.getById(Long.valueOf(orderId));
         if (ObjectUtil.isNull(aDo)) {
             log.error("用户授权完成后未找到订单信息:" + state);
         }
@@ -155,8 +159,8 @@ public class PayController {
         } else {
             price =aDo.getRealPrice() * (1 + aDo.getTaxRate() * 0.01);
         }
-        System.out.println( "redirect:"+map.get("ip").toString()+"#/payType?id="+aDo.getId()+"&sn="+aDo.getSn()+"&price="+price+"&openid="+openId+"8888888888888888888888888888888888888888888");
-        String url = "redirect:"+map.get("ip").toString()+"#/payType?id="+aDo.getId()+"&sn="+aDo.getSn()+"&price="+price+"&openid="+openId;
+        System.out.println( "redirect:"+ip+"#/payType?id="+aDo.getId()+"&sn="+aDo.getSn()+"&price="+price+"&openid="+openId+"8888888888888888888888888888888888888888888");
+        String url = "redirect:"+ip+"#/payType?id="+aDo.getId()+"&sn="+aDo.getSn()+"&price="+price+"&openid="+openId;
         String encodedUrl = URLEncoder.encode(url, "UTF-8");
         return "redirect:" + encodedUrl;
     }

+ 69 - 30
module-erp/src/main/java/com/hys/app/pay/wx/WxPayServiceMy.java

@@ -54,48 +54,87 @@ public class WxPayServiceMy {
     }
 
 
-    public Map<String, String> pay(PayOrder payOrder) throws UnknownHostException {
+    public Object pay(PayOrder payOrder) throws UnknownHostException, WxPayException {
         WxPayService wxPayService = getPayService();
-
-        WxPayUnifiedOrderRequest orderRequest = WxPayUnifiedOrderRequest.newBuilder()
+        //H5
+        WxPayUnifiedOrderRequest build = WxPayUnifiedOrderRequest.newBuilder()
                 .body(payOrder.getSubject())
-                .openid(payOrder.getOpenId())
                 .outTradeNo(payOrder.getTraceNo())
-                .totalFee((int) Math.round(payOrder.getTotalAmount() * 100)) // 单位是分
+                .feeType("CNY")
+                .totalFee((int) Math.round(payOrder.getTotalAmount() * 100))
                 .spbillCreateIp(InetAddress.getLocalHost().getHostAddress())
                 .notifyUrl(wxConfig.getNotifyUrl())
-                .tradeType("JSAPI")
-                .productId(IdUtil.fastUUID())
+                .tradeType("MWEB")
                 .build();
+        //        // 设置商户子账户id
+        build.setSubMchId(wxConfig.getSubMchId());
+        WxPayUnifiedOrderResult wxPayUnifiedOrderResult = wxPayService.unifiedOrder(build);
+        return wxPayUnifiedOrderResult.getMwebUrl(); // 包含 mweb_url
 
-        // 设置商户子账户id
-        orderRequest.setSubMchId(wxConfig.getSubMchId());
-        try {
-            WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(orderRequest);
-            Map<String, String> payData = new HashMap<>();
-            payData.put("appId", wxConfig.getAppId());
-            payData.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
-            payData.put("nonceStr", result.getNonceStr());
-            payData.put("package", "prepay_id=" + result.getPrepayId());
-            payData.put("signType", "MD5");
-            payData.put("openid", payOrder.getOpenId());
-            payData.put("paySign", SignUtils.createSign(payData, wxPayService.getConfig().getMchKey(), null, null));
-            System.out.println(payData.toString());
-            return payData;
-        } catch (WxPayException e) {
-            e.printStackTrace();
-            return null;
-        }
+
+//        WxPayUnifiedOrderRequest orderRequest = WxPayUnifiedOrderRequest.newBuilder()
+//                .body(payOrder.getSubject())
+//                .outTradeNo(payOrder.getTraceNo())
+//                .totalFee((int) Math.round (payOrder.getTotalAmount()*100)) // 单位是分
+//                .spbillCreateIp(InetAddress.getLocalHost().getHostAddress())
+//                .notifyUrl(wxConfig.getNotifyUrl())
+//                .tradeType("NATIVE")
+//                .productId(IdUtil.fastUUID())
+//                .build();
+//        // 设置商户子账户id
+//        orderRequest.setSubMchId(wxConfig.getSubMchId()); //
+//        try {
+//            WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(orderRequest);
+//            return result.getCodeURL(); // 获取生成的二维码URL
+//        } catch (WxPayException e) {
+//            e.printStackTrace();
+//            return null;
+//        }
+
+
+//        WxPayService wxPayService = getPayService();
+//
+//        WxPayUnifiedOrderRequest orderRequest = WxPayUnifiedOrderRequest.newBuilder()
+//                .body(payOrder.getSubject())
+//                .openid(payOrder.getOpenId())
+//                .outTradeNo(payOrder.getTraceNo())
+//                .totalFee((int) Math.round(payOrder.getTotalAmount() * 100)) // 单位是分
+//                .spbillCreateIp(InetAddress.getLocalHost().getHostAddress())
+//                .notifyUrl(wxConfig.getNotifyUrl())
+//                .tradeType("JSAPI")
+//                .productId(IdUtil.fastUUID())
+//                .build();
+//
+//
+//        wxPayService.createOrder(orderRequest)
+//
+//        // 设置商户子账户id
+//        orderRequest.setSubMchId(wxConfig.getSubMchId());
+//        try {
+//            WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(orderRequest);
+//            Map<String, String> payData = new HashMap<>();
+//            payData.put("appId", wxConfig.getAppId());
+//            payData.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
+//            payData.put("nonceStr", result.getNonceStr());
+//            payData.put("package", "prepay_id=" + result.getPrepayId());
+//            payData.put("signType", "MD5");
+//            payData.put("openid", payOrder.getOpenId());
+//            payData.put("paySign", SignUtils.createSign(payData, wxPayService.getConfig().getMchKey(), null, null));
+//            System.out.println(payData.toString());
+//            return payData;
+//        } catch (WxPayException e) {
+//            e.printStackTrace();
+//            return null;
+//        }
     }
 
-    public String getOpenIdCode(Long orderId,String ip) throws UnsupportedEncodingException {
+    public String getOpenIdCode(Long orderId, String ip) throws UnsupportedEncodingException {
         String oAuth2Url = wxConfig.getOAuth2Url();
         Map<String, Object> map = new HashMap<>();
-        map.put("orderId",orderId);
-        map.put("ip",ip);
+        map.put("orderId", orderId);
+        map.put("ip", ip);
         return String.format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect",
-                wxConfig.getAppId(), URLEncoder.encode(wxConfig.getOAuth2Url(), "UTF-8"), "snsapi_base", JSONUtil.toJsonStr(map));
-
+                wxConfig.getAppId(), URLEncoder.encode(wxConfig.getOAuth2Url(), "UTF-8"), "snsapi_base", orderId+"--"+ip);
     }
 
     public String getOpenId(String code) {