Forráskód Böngészése

author:dukun
describ:更新接口、数据库

864633403@qq.com 5 éve
szülő
commit
f853863386

+ 7 - 1
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/dto/CallbackCardSecret.java

@@ -8,7 +8,6 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
 
 @Data
 @Component
@@ -32,6 +31,13 @@ public class CallbackCardSecret {
 
 
 
+    /**
+     * @Description    
+     *  
+     *  * @return com.alibaba.fastjson.JSONObject
+     * @Author  dukun
+     * @Datetime  2020/11/3 18:11
+     */ 
     public JSONObject toJson() {
         JSONObject json = new JSONObject();
         json.put("status", this.status.toString());;

+ 32 - 5
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/dto/CallbackCardSecretStatus.java

@@ -5,10 +5,12 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+
+
 
 @Data
-@Component
 @AllArgsConstructor
 @NoArgsConstructor
 @JsonInclude(JsonInclude.Include.NON_NULL)
@@ -26,9 +28,24 @@ public class CallbackCardSecretStatus {
     private String nonce;
 
     /**
-     * 卡
+     * 卡
      */
-    private String cardSecret;
+    private String cardNo;
+
+    /**
+     * 订单号
+     */
+    private String sysOrderNo;
+
+    /**
+     *供应商订单号
+     */
+    private String orderNo;
+
+    /**
+     * 支付面额
+     */
+    private Integer realFace;
 
     /**
      * 状态码
@@ -54,11 +71,21 @@ public class CallbackCardSecretStatus {
 
 
 
+    /**
+     * @Description    
+     * @Param
+     * @Return * @return com.alibaba.fastjson.JSONObject
+     * @Author  dukun
+     * @Datetime  2020/11/3 17:29
+     */ 
     public JSONObject toJson() {
         JSONObject json = new JSONObject();
         json.put("partnerId", this.partnerId);
         json.put("nonce", this.nonce);
-        json.put("cardSecret", this.cardSecret);
+        json.put("cardNo", this.cardNo);
+        json.put("sysOrderNo", this.sysOrderNo);
+        json.put("orderNo", this.orderNo);
+        json.put("realFace", this.realFace.toString());
         json.put("status", this.status.toString());
         json.put("message", this.message);
         json.put("timestamp", this.timestamp.toString());

+ 9 - 2
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/dto/CardSecretInfo.java

@@ -5,12 +5,10 @@ package com.bluefire.deventorcor.mybatis.dto;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 
 @Data
-@Component
 @AllArgsConstructor
 @NoArgsConstructor
 public class CardSecretInfo {
@@ -20,6 +18,15 @@ public class CardSecretInfo {
      */
     private String partnerId;
 
+    /**
+     * 供应商订单号
+     */
+    private String  ordNo;
+
+    /**
+     * 卡号
+     */
+    private String cardNo;
 
 
     /**

+ 50 - 0
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/dto/ChangeCardSecretInfo.java

@@ -0,0 +1,50 @@
+package com.bluefire.deventorcor.mybatis.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ClassName: ChangeCardSecretInfo
+ * @Description: 卡密使用结果dto
+ * @Author dukun
+ * @Date 2020/11/413:36
+ * @Version 1.0
+ **/
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ChangeCardSecretInfo {
+
+    /**
+     * 卡密
+     */
+    private  String cardSecret;
+
+    /**
+     * 卡密支付结果
+     */
+    private Boolean payResult;
+
+    /**
+     * 卡密是否有效
+     */
+    private Boolean emit;
+
+    /**
+     * 支付面额
+     */
+    private Double payPrice;
+
+    /**
+     * 订单号
+     */
+    private String orderId;
+
+    /**
+     * 充值手机号
+     */
+    private String usedMobile;
+}

+ 2 - 2
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/dto/QueryCardSecretInfo.java

@@ -26,9 +26,9 @@ public class QueryCardSecretInfo {
     private String nonce;
 
     /**
-     * 卡
+     * 卡
      */
-    private String cardSecret;
+    private String cardNo;
 
 
 

+ 31 - 7
deventor-cor/src/main/java/com/bluefire/deventorcor/mybatis/entity/UnicomCardSecretEntity.java

@@ -11,16 +11,25 @@ import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
 
 @Data
 @Component
 @AllArgsConstructor
 @NoArgsConstructor
-@TableName(value = "unicom_card_secret")
+@TableName(value = "unicom_card")
 public class UnicomCardSecretEntity implements Serializable {
 
-    @TableId(value ="id",type = IdType.AUTO)
-    private Integer id;
+    /**
+     * 供应商订单号
+     */
+    @TableId(value ="pro_order_id")
+    private String  proOrderId;
+
+    /**
+     * 卡号
+     */
+    private String cardNum;
 
     /**
      * 卡密
@@ -28,22 +37,37 @@ public class UnicomCardSecretEntity implements Serializable {
     private String cardSecret;
 
     /**
-     * 面额
+     * 卡密面额
      */
     private BigDecimal facePrice;
 
     /**
-     * 卡密状态
+     * 订单号
+     */
+    private String orderId;
+
+    /**
+     * 手机号
+     */
+    private String usedMobile;
+
+    /**
+     * 实际支付面额
+     */
+    private BigDecimal payPrice;
+
+    /**
+     * 卡密状态:1、未使用;2、取走;3、已经使用
      */
     private Integer status;
 
     /**
      * 接收卡密时间
      */
-    private Long timestamp;
+    private String acceptTime;
 
     /**
      * 支付时间
      */
-    private Long payTimestamp;
+    private String payTime;
 }

+ 21 - 4
deventor-cor/src/main/java/com/bluefire/deventorcor/util/CallBackUtil.java

@@ -1,15 +1,19 @@
 package com.bluefire.deventorcor.util;
 
-import com.alibaba.fastjson.JSONObject;
+
 import com.bluefire.deventorcor.mybatis.dto.CallbackCardSecretStatus;
 import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.*;
+
 import org.springframework.stereotype.Component;
 import org.springframework.util.MimeType;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.Map;
+
 
 
 /**
@@ -21,12 +25,19 @@ import java.util.Map;
  */
 @Slf4j
 @Component
-@AllArgsConstructor
 public class CallBackUtil {
 
-    private RestTemplate restTemplate;
+    private  RestTemplate restTemplate;
     private static final HttpHeaders headers;
 
+
+
+    /**
+    @Autowired
+    public CallBackUtil (RestTemplate restTemplate){
+        this.restTemplate = restTemplate;
+    }*/
+
     static {
         headers = new HttpHeaders();
 
@@ -39,6 +50,11 @@ public class CallBackUtil {
         headers.add("Accept", MediaType.ALL_VALUE);
     }
 
+    @Autowired
+    public CallBackUtil(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+
     /**
      *
      * @param callbackUrl
@@ -59,6 +75,7 @@ public class CallBackUtil {
         //HttpEntity<String> formEntity = new HttpEntity<String>(cardSecretStatus.toJson().toJSONString(), headers);
 
         HttpEntity<CallbackCardSecretStatus> formEntity = new HttpEntity<CallbackCardSecretStatus>(cardSecretStatus, headers);
+        log.info("formEntity is {}",formEntity);
         log.info("request is : {} , url is : {}",cardSecretStatus.toJson().toJSONString(), callbackUrl);
 
         //ResponseEntity<JSONObject> response = restTemplate.postForEntity(callbackUrl, formEntity, JSONObject.class);

+ 12 - 13
deventor-unicom-carmi/src/main/java/com/bluefire/deventorunicomcarmi/controller/UnicomCardSecretController.java

@@ -3,9 +3,7 @@ package com.bluefire.deventorunicomcarmi.controller;
 
 import cn.hutool.json.JSON;
 import cn.hutool.json.JSONUtil;
-import com.bluefire.deventorcor.mybatis.dto.CallbackCardSecret;
-import com.bluefire.deventorcor.mybatis.dto.CardSecretInfo;
-import com.bluefire.deventorcor.mybatis.dto.QueryCardSecretInfo;
+import com.bluefire.deventorcor.mybatis.dto.*;
 import com.bluefire.deventorcor.util.ResponseObject;
 import com.bluefire.deventorcor.util.WebResponse;
 import com.bluefire.deventorunicomcarmi.service.impl.UnicomCardSecretImpl;
@@ -42,11 +40,11 @@ public class UnicomCardSecretController {
     @CrossOrigin
     @RequestMapping(value = "/queryCardStatus.json", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
     public ResponseObject<JSON> QueryUnicomCardStatus(@RequestBody QueryCardSecretInfo queryCardSecretInfo) {
-        CallbackCardSecret callbackCardSecret = unicomCardSecretService.queryUnicomCardStatus(queryCardSecretInfo);
+        CallbackCardSecretStatus callbackCardStatus = unicomCardSecretService.queryUnicomCardStatus(queryCardSecretInfo);
 
-        log.info("request is : {}, response is : {} ", JSONUtil.parseObj(queryCardSecretInfo), JSONUtil.parseObj(callbackCardSecret));
+        log.info("request is : {}, response is : {} ", JSONUtil.parseObj(queryCardSecretInfo), JSONUtil.parseObj(callbackCardStatus));
 
-        return WebResponse.WebResponse.ok(JSONUtil.parseObj(callbackCardSecret));
+        return WebResponse.WebResponse.ok(JSONUtil.parseObj(callbackCardStatus));
     }
 
     @GetMapping("/give")
@@ -60,15 +58,16 @@ public class UnicomCardSecretController {
         }
     }
 
-    @PutMapping("/update")
+
+
+
+
     @CrossOrigin
-    public ResponseObject<Integer> changeUnicomCardStatus(String cardSecret, Boolean flag) {
-        log.info("更新controller  " + cardSecret);
+    @RequestMapping(value = "/update", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
+    public ResponseObject<Integer> changeUnicomCardStatus(@RequestBody ChangeCardSecretInfo changeCardSecretInfo) {
 
-        Map map  = new HashMap();
-        map.put(cardSecret,flag);
-        Integer num = unicomCardSecretService.changeCardSecretStatus(cardSecret, flag);
-        log.info("request is : {}, response is : {} ",map.toString(),num);
+        Integer num = unicomCardSecretService.changeCardSecretStatus(changeCardSecretInfo);
+        log.info("request is : {}, response is : {} ",changeCardSecretInfo.toString(),num);
         return WebResponse.WebResponse.ok(num);
     }
 }

+ 4 - 5
deventor-unicom-carmi/src/main/java/com/bluefire/deventorunicomcarmi/service/UnicomCardSecret.java

@@ -2,22 +2,21 @@ package com.bluefire.deventorunicomcarmi.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.bluefire.deventorcor.mybatis.dto.CallbackCardSecret;
-import com.bluefire.deventorcor.mybatis.dto.CardSecretInfo;
-import com.bluefire.deventorcor.mybatis.dto.QueryCardSecretInfo;
+import com.bluefire.deventorcor.mybatis.dto.*;
 import com.bluefire.deventorcor.mybatis.entity.UnicomCardSecretEntity;
 
 import java.math.BigDecimal;
 
 public interface UnicomCardSecret extends IService<UnicomCardSecretEntity> {
 
+
     CallbackCardSecret saveUnicomCardSecret(CardSecretInfo cardSecretInfo);
 
-    CallbackCardSecret queryUnicomCardStatus(QueryCardSecretInfo queryCardSecretInfo);
+    CallbackCardSecretStatus queryUnicomCardStatus(QueryCardSecretInfo queryCardSecretInfo);
 
     String giveCardSecret(BigDecimal facePrice);
 
-    int changeCardSecretStatus(String carmi, Boolean flag);
+    int changeCardSecretStatus(ChangeCardSecretInfo changeCardInfo);
 
 
 }

+ 127 - 68
deventor-unicom-carmi/src/main/java/com/bluefire/deventorunicomcarmi/service/impl/UnicomCardSecretImpl.java

@@ -4,15 +4,14 @@ package com.bluefire.deventorunicomcarmi.service.impl;
 import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.symmetric.AES;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.bluefire.deventorcor.mybatis.dto.CallbackCardSecret;
-import com.bluefire.deventorcor.mybatis.dto.CallbackCardSecretStatus;
-import com.bluefire.deventorcor.mybatis.dto.CardSecretInfo;
-import com.bluefire.deventorcor.mybatis.dto.QueryCardSecretInfo;
+import com.bluefire.deventorcor.mybatis.dto.*;
 import com.bluefire.deventorcor.mybatis.entity.UnicomCardSecretEntity;
 import com.bluefire.deventorcor.util.CallBackUtil;
+import com.bluefire.deventorcor.util.DateUtil;
 import com.bluefire.deventorunicomcarmi.mapper.UnicomCarmiMapper;
 import com.bluefire.deventorunicomcarmi.service.UnicomCardSecret;
 import lombok.extern.slf4j.Slf4j;
@@ -20,9 +19,11 @@ import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import sun.font.TrueTypeFont;
 
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.*;
 
 @Slf4j
@@ -30,19 +31,11 @@ import java.util.*;
 public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomCardSecretEntity> implements UnicomCardSecret {
 
     @Autowired
-    private CallBackUtil callBackUtil;
+    private CallBackUtil callBackUtil ;
 
-    @Autowired
-    private CallbackCardSecret callbackCardSecret;
-
-    @Autowired
-    private CallbackCardSecretStatus cardSecretStatus;
 
-    @Autowired
-    private UnicomCardSecretEntity unicomCardSecret;
 
-
-    private String callbackUrl;
+    private String callbackUrl ;
 
     private final static String partnerId = "108463 ";
 
@@ -67,24 +60,32 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
 
         Long now = System.currentTimeMillis() / 1000;
 
-        String signSlice = String.format("%s%s%s%s%s%s%s",
+        String signSlice = String.format("%s%s%s%s%s%s%s%s%s",
                 cardSecretInfo.getPartnerId(),
                 cardSecretInfo.getNonce(),
                 cardSecretInfo.getCardSecret(),
+                cardSecretInfo.getCardNo(),
+                cardSecretInfo.getOrdNo(),
                 cardSecretInfo.getFacePrice(),
                 cardSecretInfo.getCallbackUrl(),
                 cardSecretInfo.getTimestamp(),partnerKey
         );
 
+        //log.info("加密前签名 {}",signSlice);
         String sign = DigestUtils.md5Hex(signSlice);
+        //log.info("加密后签名 {}",sign);
 
         //解密
         String cardSecret = aes.decryptStr(cardSecretInfo.getCardSecret(), CharsetUtil.CHARSET_UTF_8);
 
         QueryWrapper<UnicomCardSecretEntity> queryWrapper = new QueryWrapper<>();
-        QueryWrapper<UnicomCardSecretEntity> wrapper = queryWrapper.eq("card_secret",cardSecret);
-        UnicomCardSecretEntity cardSecretEntity = this.baseMapper.selectOne(wrapper);
+        QueryWrapper<UnicomCardSecretEntity> wrapper = queryWrapper.eq("card_num",cardSecretInfo.getCardNo())
+                                                                    .or().eq("card_secret",cardSecretInfo.getCardSecret())
+                                                                    .or().eq("pro_order_id",cardSecretInfo.getOrdNo());
+        List<UnicomCardSecretEntity> unicomCardSecretEntities = this.baseMapper.selectList(wrapper);
+        //log.info("unicomCardSecretEntities is {}",unicomCardSecretEntities);
 
+        CallbackCardSecret  callbackCardSecret = new CallbackCardSecret();
 
         /**
          * 校验时间
@@ -105,21 +106,20 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
         }
 
         /**
-         * 校验卡密是否重复
+         * 校验订单号、卡号、卡密是否重复
          */
-        if (cardSecretEntity != null) {
+        if (unicomCardSecretEntities != null && unicomCardSecretEntities.size() > 0 ) {
             callbackCardSecret.setStatus(503);
-            callbackCardSecret.setMessage("推送失败,卡密重复");
+            callbackCardSecret.setMessage("推送失败,订单号、卡号、卡密重复");
             return callbackCardSecret;
         }
 
-        //UnicomCardSecretEntity unicomCardSecret = new UnicomCardSecretEntity();
-
+        UnicomCardSecretEntity unicomCardSecret = new UnicomCardSecretEntity();
 
-
-
-        unicomCardSecret.setTimestamp(now);
+        unicomCardSecret.setAcceptTime(DateUtil.formatDate(LocalDateTime.now()));
         unicomCardSecret.setCardSecret(cardSecret);
+        unicomCardSecret.setCardNum(cardSecretInfo.getCardNo());
+        unicomCardSecret.setProOrderId(cardSecretInfo.getOrdNo());
         unicomCardSecret.setFacePrice(cardSecretInfo.getFacePrice());
         unicomCardSecret.setStatus(1);
         this.baseMapper.insert(unicomCardSecret);
@@ -132,67 +132,83 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
 
 
     @Override
-    public CallbackCardSecret queryUnicomCardStatus(QueryCardSecretInfo queryCardSecretInfo) {
+    public CallbackCardSecretStatus queryUnicomCardStatus(QueryCardSecretInfo queryCardSecretInfo) {
 
         Long now = System.currentTimeMillis() / 1000;
 
         String signSlice = String.format("%s%s%s%s%s",
                 queryCardSecretInfo.getPartnerId(),
                 queryCardSecretInfo.getNonce(),
-                queryCardSecretInfo.getCardSecret(),
+                queryCardSecretInfo.getCardNo(),
                 queryCardSecretInfo.getTimestamp(),partnerKey
         );
 
         String sign = DigestUtils.md5Hex(signSlice);
 
-        //解密
-        String queryCardSecret = aes.decryptStr(queryCardSecretInfo.getCardSecret(), CharsetUtil.CHARSET_UTF_8);
+
+        //String queryCardSecret = aes.decryptStr(queryCardSecretInfo.getCardSecret(), CharsetUtil.CHARSET_UTF_8);
 
         QueryWrapper<UnicomCardSecretEntity> queryWrapper = new QueryWrapper<>();
-        QueryWrapper<UnicomCardSecretEntity> wrapper = queryWrapper.eq("card_secret", queryCardSecret);
+        QueryWrapper<UnicomCardSecretEntity> wrapper = queryWrapper.eq("card_num", queryCardSecretInfo.getCardNo());
         UnicomCardSecretEntity cardSecretEntity = this.baseMapper.selectOne(wrapper);
+        //log.info(cardSecretEntity.toString());
+
+        //CallbackCardSecret  callbackCardSecret = new CallbackCardSecret();
+        CallbackCardSecretStatus callbackCardStatus = new CallbackCardSecretStatus();
 
         /**
          * 校验时间
          */
         if (Math.abs(now - queryCardSecretInfo.getTimestamp()) > 300) {
-            callbackCardSecret.setStatus(501);
-            callbackCardSecret.setMessage("连接超时");
-            return callbackCardSecret;
+            callbackCardStatus.setStatus(501);
+            callbackCardStatus.setMessage("连接超时");
+            return callbackCardStatus;
         }
 
         /**
          * 校验签名
          */
         if (!sign.equals(queryCardSecretInfo.getSign())) {
-            callbackCardSecret.setStatus(502);
-            callbackCardSecret.setMessage("签名错误");
-            return callbackCardSecret;
+            callbackCardStatus.setStatus(502);
+            callbackCardStatus.setMessage("签名错误");
+            return callbackCardStatus;
         }
 
         /**
-         * 校验卡是否输入正确
+         * 校验卡是否输入正确
          */
         if (cardSecretEntity == null) {
-            callbackCardSecret.setStatus(503);
-            callbackCardSecret.setMessage("查询失败,卡密不存在");
-            return callbackCardSecret;
+            callbackCardStatus.setStatus(503);
+            callbackCardStatus.setMessage("查询失败,卡号不存在");
+            return callbackCardStatus;
         }
 
+
+        callbackCardStatus.setOrderNo(cardSecretEntity.getProOrderId());
+        callbackCardStatus.setStatus(200);//查询成功
         Integer status = cardSecretEntity.getStatus();
-        callbackCardSecret.setStatus(status);
+
         if (status == 1) {
-            callbackCardSecret.setMessage("未使用");
+            callbackCardStatus.setMessage("未使用");
         } else if (status == 2) {
-            callbackCardSecret.setMessage("充值中");
+            callbackCardStatus.setMessage("充值中");
         } else if (status == 3) {
-            callbackCardSecret.setMessage("充值成功");
+            callbackCardStatus.setMessage("充值成功");
         } else {
-            callbackCardSecret.setMessage("充值失败");
+            callbackCardStatus.setMessage("充值失败");
         }
 
+        if (!"".equals(cardSecretEntity.getOrderId())){
+            callbackCardStatus.setSysOrderNo(cardSecretEntity.getOrderId());
+        }
 
-        return callbackCardSecret;
+        if(cardSecretEntity.getPayPrice().intValue() != 0){
+            callbackCardStatus.setRealFace(cardSecretEntity.getPayPrice().intValue());
+        }
+
+
+
+        return callbackCardStatus;
     }
 
     @Override
@@ -220,45 +236,91 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
 
     @Override
     @Transactional
-    public int changeCardSecretStatus(String cardSecret, Boolean flag) {
+    public int changeCardSecretStatus(ChangeCardSecretInfo changeCardInfo) {
         Integer result = 0;
 
 
         UpdateWrapper<UnicomCardSecretEntity> updateWrapper = new UpdateWrapper<>();
+        LambdaQueryWrapper<UnicomCardSecretEntity> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(UnicomCardSecretEntity::getCardSecret,changeCardInfo.getCardSecret());
+        UnicomCardSecretEntity cardSecretEntity = this.baseMapper.selectOne(queryWrapper);
 
+        CallbackCardSecretStatus cardSecretStatus = new CallbackCardSecretStatus();
 
-        if (flag) {  //充值成功
-            UpdateWrapper<UnicomCardSecretEntity> wrapper = updateWrapper.eq("card_secret", cardSecret)
+        cardSecretStatus.setRealFace(changeCardInfo.getPayPrice().intValue());
+        cardSecretStatus.setSysOrderNo(changeCardInfo.getOrderId());
+        cardSecretStatus.setCardNo(cardSecretEntity.getCardNum());
+        cardSecretStatus.setOrderNo(cardSecretEntity.getProOrderId());
+        cardSecretStatus.setPartnerId(partnerId);
+
+        if (changeCardInfo.getPayResult()) {  //充值成功
+            UpdateWrapper<UnicomCardSecretEntity> wrapper = updateWrapper.eq("card_secret", changeCardInfo.getCardSecret())
                     .eq("status", 2)
                     .set("status", 3)
-                    .set("pay_timestamp", System.currentTimeMillis() / 1000);
+                    .set("order_id",changeCardInfo.getOrderId())
+                    .set("pay_price",changeCardInfo.getPayPrice())
+                    .set("used_mobile",changeCardInfo.getUsedMobile())
+                    .set("pay_time", DateUtil.formatDate(LocalDateTime.now()));
 
-            cardSecretStatus.setStatus(3);
+            cardSecretStatus.setStatus(200);
             cardSecretStatus.setMessage("充值成功");
 
-            result = this.baseMapper.update(null, wrapper);
-        } else {
-            UpdateWrapper<UnicomCardSecretEntity> wrapper = updateWrapper.eq("card_secret", cardSecret)
-                    .eq("status", 2)
-                    .set("status", 4);
 
-            cardSecretStatus.setStatus(4);
-            cardSecretStatus.setMessage("充值失败");
+            callBack(cardSecretStatus);
+
+
+            //cardSecret = aes.encryptHex(cardSecret, CharsetUtil.CHARSET_UTF_8);
+
 
 
             result = this.baseMapper.update(null, wrapper);
+        } else {//充值失败
+
+            if (changeCardInfo.getEmit() == Boolean.TRUE){//有效卡密
+
+                UpdateWrapper<UnicomCardSecretEntity> wrapper = updateWrapper.eq("card_secret", changeCardInfo.getCardSecret())
+
+                        .eq("status", 2)
+                        .set("status", 1);
+
+                result = this.baseMapper.update(null, wrapper);
+            }else  {//无效卡密
+                UpdateWrapper<UnicomCardSecretEntity> wrapper = updateWrapper.eq("card_secret", changeCardInfo.getCardSecret())
+                        .eq("status", 2)
+                        .set("status",4)
+                        .set("order_id",changeCardInfo.getOrderId())
+                        .set("pay_price",changeCardInfo.getPayPrice())
+                        .set("used_mobile",changeCardInfo.getUsedMobile())
+                        .set("pay_time", DateUtil.formatDate(LocalDateTime.now()));
+
+                result = this.baseMapper.update(null, wrapper);
+
+                cardSecretStatus.setStatus(500);
+                cardSecretStatus.setMessage("充值失败");
+                callBack(cardSecretStatus);
+
+            }
+
+
         }
 
-        //log.info(callbackUrl);
 
+
+        return result;
+
+    }
+
+    private  void callBack(CallbackCardSecretStatus cardSecretStatus){
         String nonce = UUID.randomUUID().toString().replace("-", "");
 
         Long timestamp = System.currentTimeMillis() / 1000;
 
-        //cardSecret = aes.encryptHex(cardSecret, CharsetUtil.CHARSET_UTF_8);
-
-        String signSlice = String.format("%s%s%s%s%s%s%s",
-                partnerId, nonce, cardSecret,
+        String signSlice = String.format("%s%s%s%s%s%s%s%s%s%s",
+                partnerId, nonce,
+                cardSecretStatus.getCardNo(),
+                cardSecretStatus.getOrderNo(),
+                cardSecretStatus.getSysOrderNo(),
+                cardSecretStatus.getRealFace(),
                 cardSecretStatus.getStatus(),
                 cardSecretStatus.getMessage(),
                 timestamp, partnerKey
@@ -266,17 +328,14 @@ public class UnicomCardSecretImpl extends ServiceImpl<UnicomCarmiMapper, UnicomC
 
         String sign = DigestUtils.md5Hex(signSlice);
 
-        cardSecretStatus.setPartnerId(partnerId);
-        cardSecretStatus.setNonce(nonce);
         cardSecretStatus.setSign(sign);
+        cardSecretStatus.setNonce(nonce);
         cardSecretStatus.setTimestamp(timestamp);
-        cardSecretStatus.setCardSecret(cardSecret);
 
 
+        //回调供应商
         callBackUtil.callbackCardSecret(cardSecretStatus, callbackUrl);
 
-        return result;
-
     }
 
 

+ 26 - 5
deventor-unicom-carmi/src/test/test-unicom-carmi-push.py

@@ -12,7 +12,21 @@ nonce = ''.join(random.sample(string.ascii_letters+string.digits,32))
 #nonce = 'WUKRmNYGcFaqgy7Hl8dbLOMzrSQuPfZ1'
 #print(nonce)
 cardSecret = ''.join(random.sample(string.ascii_letters+string.digits,32))
-#cardSecret = '2434353536564645448'
+#cardSecret = '9805866770741987306'
+#cardSecret = '9801094327043624718'
+#cardSecret = '9806363719107293240'
+#cardSecret = '9800342433565786688'
+#cardSecret = '9807507773719336802'
+#cardSecret = '9805458964684726970'
+#cardSecret = '9802454772185588724'
+#cardSecret = '9806065591294307718'
+#cardSecret = '9801728838296435140'
+#cardSecret = '9803598172597250632'
+#cardSecret = '9809945522375369234'
+#cardSecret = '9820010909371731111'
+
+
+
 #key = ''.join(random.sample(string.ascii_letters+string.digits,16))
 
 #print(key)
@@ -20,19 +34,27 @@ cardSecret = ''.join(random.sample(string.ascii_letters+string.digits,32))
 key = '9lI82q3eBZhdwk7b'
 helo = MyHash()
 cardSecret = helo.My_Aes_Encrypt(key,cardSecret)
-#cardSecret = ''
+#print(cardSecret)
+#cardSecret = 'c5GzZYNJruKnUq7Xk5DkMvwYEi7WSrzed9ppwfJXnzQ='
 facePrice = 50
 callbackUrl = 'https://admin.77shou.cn/index.php/Pinnotify/liantong.html'
+#callbackUrl = 'http://47.108.14.99:9889/sup/callback'
+
+cardNo = "".join(random.choice("0123456789") for i in range(15))
+#cardNo = "051943980763330"
+ordNo = "".join(random.choice("0123456789") for i in range(10))
 timestamp = int(time.time())
-pre_sign = '{}{}{}{}{}{}{}'.format(partnerId,nonce,cardSecret,facePrice,callbackUrl,timestamp,partnerKey)
+pre_sign = '{}{}{}{}{}{}{}{}{}'.format(partnerId,nonce,cardSecret,cardNo,ordNo,facePrice,callbackUrl,timestamp,partnerKey)
 
-#print(pre_sign)
+print(pre_sign)
 sign = hashlib.md5(pre_sign.encode(encoding='UTF-8')).hexdigest()
 #print(sign)
 data = {
         'partnerId': partnerId,
         'nonce': nonce,
         'cardSecret': cardSecret,
+        'cardNo': cardNo,
+        'ordNo': ordNo,
         'facePrice':facePrice,
         'callbackUrl':callbackUrl,
         'timestamp':timestamp,
@@ -51,5 +73,4 @@ s = requests.session()
 s.keep_alive = False
 r_json = requests.post("http://47.108.14.99:8086/unicom/card/secret/push.json", data=data_json, headers=http_header)
 #r_json = requests.post("http://localhost:8086/unicom/card/secret/push.json", data=data_json, headers=http_header)
-#r_json = requests.post("http://47.108.14.99:8085/sup/order/add", data=data_json, headers=http_header)
 print( r_json.text )

+ 6 - 5
deventor-unicom-carmi/src/test/test-unicom-carmi-query.py

@@ -11,20 +11,21 @@ partnerKey = 'tdz5xjtmuymkrhbx460iwv8kyw9hasqa'
 nonce = ''.join(random.sample(string.ascii_letters+string.digits,32))
 print(nonce)
 #cardcardSecret = ''.join(random.sample(string.ascii_letters+string.digits,32))
-cardSecret = 'zO1PZKnDrJEp3VlNATj7BygvUY8c4LqI'
+#cardSecret = 'zO1PZKnDrJEp3VlNATj7BygvUY8c4LqI'
+cardNo = '394601549259297'
 key = '9lI82q3eBZhdwk7b'
 
-helo = MyHash()
-cardSecret = helo.My_Aes_Encrypt(key,cardSecret)
+#helo = MyHash()
+#cardSecret = helo.My_Aes_Encrypt(key,cardSecret)
 
 timestamp = int(time.time())
-pre_sign = '{}{}{}{}{}'.format(partnerId,nonce,cardSecret,timestamp,partnerKey)
+pre_sign = '{}{}{}{}{}'.format(partnerId,nonce,cardNo,timestamp,partnerKey)
 #print(pre_sign)
 sign = hashlib.md5(pre_sign.encode(encoding='UTF-8')).hexdigest()
 data = {
         'partnerId': partnerId,
         'nonce': nonce,
-        'cardSecret': cardSecret,
+        'cardNo': cardNo,
         'timestamp':timestamp,
         'sign':sign
 }

+ 21 - 4
deventor-unicom-carmi/src/test/test-unicom-carmi-update.py

@@ -1,9 +1,26 @@
+import json
 import requests
 
-url = 'http://47.108.14.99:8086/unicom/card/secret/update'
-#url = 'http://localhost:8086/unicom/card/secret/update'
+#url = 'http://47.108.14.99:8086/unicom/card/secret/update'
+url = 'http://localhost:8086/unicom/card/secret/update'
 
-params1 = {'cardSecret': '2434353536564645445','flag':False}
-response = requests.put(url = url,params = params1)
+params = {'cardSecret': 'xMuiR4UbXOs852Ve0ScBHnpo1ha9GKj6',
+           'payResult':True,
+           'emit':False,
+           'payPrice':50,
+           'usedMobile':'15884952222',
+           'orderId':'111111111111111'
+           }
+
+http_header = {
+    'Content-Type': 'application/json',
+    'Connection': 'close'
+}
+
+data_json = json.dumps(params)
+
+s = requests.session()
+s.keep_alive = False
+response = requests.post(url = url,data = data_json,headers = http_header)
 print(response.status_code)
 print(response.text)

+ 6 - 2
mock-carmi-callback.py

@@ -15,11 +15,15 @@ def hello_world():
     partnerId = data['partnerId']
     partnerKey = 'tdz5xjtmuymkrhbx460iwv8kyw9hasqa'
     nonce = data['nonce']
-    cardSecret = data['cardSecret']
+    cardNo = data['cardNo']
+    orderNo = data['orderNo']
+    sysOrderNo = data['sysOrderNo']
+    realFace = data['realFace']
     status = data['status']
     message = data['message']
     timestamp = data['timestamp']
-    pre_sign = '{}{}{}{}{}{}{}'.format(partnerId,nonce,cardSecret,status,message,timestamp,partnerKey)
+    pre_sign = '{}{}{}{}{}{}{}{}{}'.format(partnerId,nonce,cardNo,orderNo,sysOrderNo,status,message,timestamp,partnerKey)
+
     #print(pre_sign)
     sign = hashlib.md5(pre_sign.encode(encoding='UTF-8')).hexdigest()
     print(sign)

+ 14 - 0
sql/unicom_card.sql

@@ -0,0 +1,14 @@
+CREATE TABLE IF NOT EXISTS `unicom_card`(
+    `pro_order_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '供应商订单号',
+    `card_num`  VARCHAR(64) NOT NULL DEFAULT '' COMMENT '卡号',
+    `card_secret` VARCHAR(64) NOT NULL DEFAULT ''  COMMENT '卡密',
+    `face_price` DOUBLE(6,2) NOT NULL DEFAULT 0 COMMENT '卡密面额',
+    `order_id` VARCHAR(64) NOT NULL DEFAULT ''  COMMENT '订单号',
+    `used_mobile` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '手机号',
+    `pay_price` DOUBLE(6,2) NOT NULL DEFAULT 0 COMMENT '支付面额',
+    `status` int(11) NOT NULL DEFAULT 0 COMMENT '卡密状态:1、未使用;2、取走;3、已经使用',
+    `accept_time` DATETIME DEFAULT NULL COMMENT '卡密接收时间',
+    `pay_time` DATETIME DEFAULT NULL COMMENT '卡密使用时间',
+   PRIMARY KEY (`pro_order_id`),
+   UNIQUE KEY `U_1` (`card_num`,`card_secret`)
+)ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

BIN
联通卡密对接文档.docx


+ 10 - 0
联通卡密账号资料.txt

@@ -0,0 +1,10 @@
+用户编号(partnerId):108463
+秘钥(partnerKey):tdz5xjtmuymkrhbx460iwv8kyw9hasqa
+推送接口地址:http://47.108.14.99:8086/unicom/card/secret/push.json
+查询接口地址:http://47.108.14.99:8086/unicom/card/secret/queryCardStatus.json
+AES 加密密钥(key):9lI82q3eBZhdwk7b
+
+//解密:
+ String key = "9lI82q3eBZhdwk7b";//aes加密密钥
+ AES aes = SecureUtil.aes(key.getBytes());
+String cardSecret = aes.decryptStr(cardSecret, CharsetUtil.CHARSET_UTF_8);