523096025 před 1 rokem
rodič
revize
82fb355435

+ 10 - 0
pom.xml

@@ -87,6 +87,16 @@
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.5</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.wechatpay-apiv3</groupId>
+            <artifactId>wechatpay-java</artifactId>
+            <version>0.2.10</version>
+        </dependency>
 
     </dependencies>
 

+ 13 - 0
src/main/java/com/huimv/wine/common/TimeUtil.java

@@ -0,0 +1,13 @@
+package com.huimv.wine.common;
+
+
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Date;
+
+public class TimeUtil {
+
+    public  static  String getNowStringTime(){
+        return DateUtil.format(new Date(),"yyyyMMddHHmmss");
+    }
+}

+ 20 - 0
src/main/java/com/huimv/wine/entity/vo/TradeRedis.java

@@ -0,0 +1,20 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class TradeRedis {
+    private  String device;
+    private  int cell;
+    private  int wine;
+    private  int weight;
+    private  int cash;
+
+    public TradeRedis(String device, int cell, int wine, int weight, int cash) {
+        this.device = device;
+        this.cell = cell;
+        this.wine = wine;
+        this.weight = weight;
+        this.cash = cash;
+    }
+}

+ 10 - 3
src/main/java/com/huimv/wine/ws/SellerController.java

@@ -2,12 +2,14 @@ package com.huimv.wine.ws;
 
 import com.alibaba.fastjson.JSON;
 import com.huimv.wine.common.EventWsErrUtil;
+import com.huimv.wine.common.TimeUtil;
 import com.huimv.wine.config.VipCofing;
 import com.huimv.wine.entity.Advertise;
 import com.huimv.wine.entity.Device;
 import com.huimv.wine.entity.Params;
 import com.huimv.wine.entity.Wine;
 import com.huimv.wine.entity.vo.QrcodeParam;
+import com.huimv.wine.entity.vo.TradeRedis;
 import com.huimv.wine.entity.vo.WsEvent;
 import com.huimv.wine.mapper.AdvertiseMapper;
 import com.huimv.wine.mapper.DeviceMapper;
@@ -16,6 +18,7 @@ import com.huimv.wine.mapper.WineMapper;
 import com.huimv.wine.utils.SpringContextUtil;
 import com.huimv.wine.utils.WebsocketSellerUtil;
 import lombok.extern.log4j.Log4j2;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.socket.handler.TextWebSocketHandler;
@@ -24,6 +27,7 @@ import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
 import java.io.IOException;
+import java.time.Duration;
 import java.util.*;
 
 /**
@@ -116,6 +120,8 @@ public class SellerController extends TextWebSocketHandler {
     //生成支付码
     private void getQrcode(Device device, Session session, Object data) {
         WineMapper wineMapper = SpringContextUtil.getBean(WineMapper.class);
+        RedisTemplate redisTemplate = SpringContextUtil.getBean(RedisTemplate.class);
+
         QrcodeParam qrcodeParam =   (QrcodeParam) data;
         int weight = qrcodeParam.getWeight();
         int id = qrcodeParam.getId();
@@ -132,12 +138,13 @@ public class SellerController extends TextWebSocketHandler {
             WebsocketSellerUtil.sendMessage(session,EventWsErrUtil.getWsErr(String.format("got a wrong cash[you: %d, real: %d]",cash,nowCash)));
             return;
         }
-
-
-
+        String trade = id+TimeUtil.getNowStringTime();
+        String store = JSON.toJSONString(new TradeRedis(device.getId(),cell,id,weight,cash));
+        redisTemplate.opsForValue().set(String.format("WxPay_%s", trade),store, Duration.ofSeconds(1800));
 
     }
 
+
     private void keepAlive(Session session, Object data) {
         WebsocketSellerUtil.sendMessage(session,new WsEvent("advResult",data));
     }

+ 46 - 0
src/main/java/com/huimv/wine/wxpay/QuickStart.java

@@ -0,0 +1,46 @@
+package com.huimv.wine.wxpay;
+
+import com.wechat.pay.java.core.Config;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.service.payments.nativepay.NativePayService;
+import com.wechat.pay.java.service.payments.nativepay.model.Amount;
+import com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest;
+import com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse;
+/** Native 支付下单为例 */
+public class QuickStart {
+    /** 商户号 */
+    public static String merchantId = "190000****";
+    /** 商户API私钥路径 */
+    public static String privateKeyPath = "/Users/yourname/your/path/apiclient_key.pem";
+    /** 商户证书序列号 */
+    public static String merchantSerialNumber = "5157F09EFDC096DE15EBE81A47057A72********";
+    /** 商户APIV3密钥 */
+    public static String apiV3key = "...";
+    public static void main(String[] args) {
+        // 使用自动更新平台证书的RSA配置
+        // 建议将 config 作为单例或全局静态对象,避免重复的下载浪费系统资源
+        Config config =
+                new RSAAutoCertificateConfig.Builder()
+                        .merchantId(merchantId)
+                        .privateKeyFromPath(privateKeyPath)
+                        .merchantSerialNumber(merchantSerialNumber)
+                        .apiV3Key(apiV3key)
+                        .build();
+        // 构建service
+        NativePayService service = new NativePayService.Builder().config(config).build();
+        // request.setXxx(val)设置所需参数,具体参数可见Request定义
+        PrepayRequest request = new PrepayRequest();
+        Amount amount = new Amount();
+        amount.setTotal(100);
+        request.setAmount(amount);
+        request.setAppid("wxa9d9651ae******");
+        request.setMchid("190000****");
+        request.setDescription("测试商品标题");
+        request.setNotifyUrl("https://notify_url");
+        request.setOutTradeNo("out_trade_no_001");
+        // 调用下单方法,得到应答
+        PrepayResponse response = service.prepay(request);
+        // 使用微信扫描 code_url 对应的二维码,即可体验Native支付
+        System.out.println(response.getCodeUrl());
+    }
+}

+ 30 - 0
src/main/java/com/huimv/wine/wxpay/WxConfig.java

@@ -0,0 +1,30 @@
+package com.huimv.wine.wxpay;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Data
+public class WxConfig {
+
+    @Value("${wx.pay_title}")
+    private String payTitle;
+
+    @Value("${wx.merchant_acc}")
+    private String merchantAcc;
+
+    @Value("${wx.app_id}")
+    private String appId;
+
+    @Value("${wx.api_cert_seq}")
+    private String apiCertSeq;
+
+    @Value("${wx.api_cert_path}")
+    private String apiCertPath;
+
+    @Value("${wx.api_v3_key}")
+    private String apiV3Key;
+
+
+}

+ 1 - 2
src/main/resources/application.properties

@@ -1,3 +1,2 @@
 spring.application.name=wine-server
-spring.profiles.active=dev
-vip.scan_api:http://192.168.1.10:3080/seller/vip-test
+spring.profiles.active=dev