From b723d7f8769dd33816013eddfb888e8fcf1210da Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 17 Dec 2021 11:46:17 +0800
Subject: [PATCH] add alipay

---
 src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java               |   26 +++
 src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java                 |   42 +++++
 src/main/java/cc/mrbird/febs/video/entity/VideoVipOrderInfoEntity.java          |   64 ++++++++
 src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java                          |    3 
 src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java |   12 
 src/main/resources/application-prod.yml                                         |   13 +
 src/main/java/cc/mrbird/febs/pay/service/IPayService.java                       |   16 ++
 src/main/resources/application-test.yml                                         |   13 +
 src/main/resources/mapper/video/VideoVipOrderInfoMapper.xml                     |    5 
 pom.xml                                                                         |    7 
 src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java                 |   15 +
 src/main/java/cc/mrbird/febs/common/utils/MallUtils.java                        |   39 ++++
 src/main/java/cc/mrbird/febs/common/utils/AppContants.java                      |    2 
 src/main/java/cc/mrbird/febs/video/mapper/DataDictionaryCustomMapper.java       |    1 
 src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java               |  121 +++++++++++++++
 src/main/java/cc/mrbird/febs/video/dto/VipBuyDto.java                           |   17 ++
 src/main/resources/application-dev.yml                                          |   13 +
 src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml                |    4 
 src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java          |   58 +++++++
 src/main/java/cc/mrbird/febs/video/mapper/VideoVipOrderInfoMapper.java          |    7 
 src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java              |    1 
 21 files changed, 470 insertions(+), 9 deletions(-)

diff --git a/pom.xml b/pom.xml
index 6498c71..896a51a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,7 @@
         <tomcat.version>9.0.31</tomcat.version>
         <hutool.version>5.3.1</hutool.version>
         <mapstruct.version>1.3.1.Final</mapstruct.version>
+        <ijapy.version>2.7.8</ijapy.version>
     </properties>
 
     <dependencies>
@@ -228,6 +229,12 @@
             <artifactId>xml-apis</artifactId>
             <version>1.4.01</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.github.javen205</groupId>
+            <artifactId>IJPay-AliPay</artifactId>
+            <version>${ijapy.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
index f650c28..cac3318 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -17,6 +17,7 @@
         registration.excludePathPatterns("/api/video/**");
         registration.excludePathPatterns("/api/member/vipCostInfo");
         registration.excludePathPatterns("/api/member/appVersion");
+        registration.excludePathPatterns("/api/pay/aliCallBack");
 
         InterceptorRegistration registration1 = registry.addInterceptor(new VideoInterceptor());
         registration1.addPathPatterns("/api/video/**");
diff --git a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java
index 91dad5c..ba9fec8 100644
--- a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java
@@ -69,4 +69,6 @@
     public static final Integer FLAG_INT_Y = 1;
     public static final Integer FLAG_INT_N = 2;
 
+    public static final String DIC_VIP_COST = "VIP_COST";
+
 }
diff --git a/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java b/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
new file mode 100644
index 0000000..2f28b00
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
@@ -0,0 +1,39 @@
+package cc.mrbird.febs.common.utils;
+
+import cn.hutool.core.util.StrUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+/**
+ * @author wzy
+ * @date 2021-09-22
+ **/
+public class MallUtils {
+
+    public static String getRandomNum(int length) {
+        String str = "0123456789";
+        Random random = new Random();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length; ++i) {
+            int number = random.nextInt(str.length());
+            sb.append(str.charAt(number));
+        }
+
+        return sb.toString();
+    }
+
+    public static String getOrderNum(String prefix) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
+        String dd=df.format(new Date());
+        if (StrUtil.isNotBlank(prefix)) {
+            return prefix+dd+getRandomNum(5);
+        }
+        return dd+getRandomNum(5);
+    }
+
+    public static String getOrderNum() {
+        return getOrderNum(null);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java b/src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java
new file mode 100644
index 0000000..b9c4826
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java
@@ -0,0 +1,42 @@
+package cc.mrbird.febs.pay.configure;
+
+import cc.mrbird.febs.pay.properties.AliPayProperties;
+import com.ijpay.alipay.AliPayApiConfig;
+import com.ijpay.alipay.AliPayApiConfigKit;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@Configuration
+public class AliPayConfigure {
+
+    @Autowired
+    private AliPayProperties aliPayProperties;
+
+    @Bean
+    public AliPayApiConfig aliPayConfig() {
+        AliPayApiConfig aliPayApiConfig;
+        try {
+            aliPayApiConfig = AliPayApiConfigKit.getApiConfig(aliPayProperties.getAppId());
+        } catch (Exception e) {
+            aliPayApiConfig = AliPayApiConfig.builder()
+                    .setAppId(aliPayProperties.getAppId())
+                    .setAliPayPublicKey(aliPayProperties.getPublicKey())
+                    .setCharset("UTF-8")
+                    .setPrivateKey(aliPayProperties.getPrivateKey())
+                    .setServiceUrl(aliPayProperties.getDomain())
+                    .setSignType("RSA2")
+                    // 普通公钥方式
+                    .build();
+
+        }
+        AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
+        return aliPayApiConfig;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
new file mode 100644
index 0000000..c907b36
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
@@ -0,0 +1,58 @@
+package cc.mrbird.febs.pay.controller;
+
+import cc.mrbird.febs.pay.properties.AliPayProperties;
+import cc.mrbird.febs.pay.service.IPayService;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.internal.util.AlipaySignature;
+import com.ijpay.alipay.AliPayApi;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@RestController
+@RequestMapping(value = "/api/pay")
+public class PayCallBackController {
+
+    @Autowired
+    private IPayService payService;
+
+    @Resource
+    private AliPayProperties aliPayProperties;
+
+    @RequestMapping("/aliCallBack")
+    public String aliPayCallBack(HttpServletRequest request){
+        log.info("进入支付宝回调");
+        Map<String, String> params = AliPayApi.toMap(request);
+
+        boolean verifyResult = false;
+        try {
+            verifyResult = AlipaySignature.verifyV1(params, aliPayProperties.getPublicKey(), "UTF-8", "RSA2");
+        } catch (AlipayApiException e) {
+            log.info("=验证失败=:{}", params);
+            return "failure";
+        }
+
+        if (verifyResult) {
+            if ("TRADE_SUCCESS".equals(params.get("trade_status")) || "TRADE_FINISHED".equals(params.get("trade_status"))) {
+                payService.aliCallback(params);
+                return "success";
+            } else {
+                log.info("支付失败:{}", params);
+                return "failure";
+            }
+        } else {
+            log.info("验证失败:{}", params);
+            return "failure";
+        }
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java b/src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java
new file mode 100644
index 0000000..b15ef73
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.pay.model;
+
+import lombok.Data;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Data
+public class AliPayPassbackModel {
+
+    private Long orderId;
+
+    private Long memberId;
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java b/src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java
new file mode 100644
index 0000000..0a78846
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.pay.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "pay.ali")
+public class AliPayProperties {
+
+    private String appId;
+
+    private String publicKey;
+
+    private String privateKey;
+
+    private String noticeUrl;
+
+    private String domain;
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/IPayService.java b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
new file mode 100644
index 0000000..fa2eb47
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
@@ -0,0 +1,16 @@
+package cc.mrbird.febs.pay.service;
+
+import cc.mrbird.febs.video.dto.VipBuyDto;
+
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+public interface IPayService {
+
+    String aliPay(VipBuyDto vipBuyDto);
+
+    void aliCallback(Map<String, String> params);
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
new file mode 100644
index 0000000..b87a934
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
@@ -0,0 +1,121 @@
+package cc.mrbird.febs.pay.service.impl;
+
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.common.utils.MallUtils;
+import cc.mrbird.febs.pay.model.AliPayPassbackModel;
+import cc.mrbird.febs.pay.properties.AliPayProperties;
+import cc.mrbird.febs.pay.service.IPayService;
+import cc.mrbird.febs.video.dto.VipBuyDto;
+import cc.mrbird.febs.video.entity.DataDictionaryCustom;
+import cc.mrbird.febs.video.entity.VideoMemberEntity;
+import cc.mrbird.febs.video.entity.VideoVipOrderInfoEntity;
+import cc.mrbird.febs.video.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.video.mapper.VideoMemberMapper;
+import cc.mrbird.febs.video.mapper.VideoVipOrderInfoMapper;
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.ijpay.alipay.AliPayApi;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+@Slf4j
+@Service
+public class PayServiceImpl implements IPayService {
+
+    @Resource
+    private AliPayProperties aliPayProperties;
+    @Resource
+    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
+
+    @Resource
+    private VideoVipOrderInfoMapper videoVipOrderInfoMapper;
+
+    @Resource
+    private VideoMemberMapper videoMemberMapper;
+
+    @Value("${spring.profiles.active}")
+    private String active;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String aliPay(VipBuyDto vipBuyDto) {
+        VideoMemberEntity loginUser = LoginUserUtil.getLoginUser();
+
+        DataDictionaryCustom data = dataDictionaryCustomMapper.selectDataByTypeAndCode(AppContants.DIC_VIP_COST, vipBuyDto.getType());
+        if (data == null) {
+            throw new FebsException("参数错误");
+        }
+
+        VideoVipOrderInfoEntity vipOrderInfo = new VideoVipOrderInfoEntity();
+        vipOrderInfo.setOrderNo(MallUtils.getOrderNum());
+        vipOrderInfo.setPayType(VideoVipOrderInfoEntity.PAY_TYPE_ALIPAY);
+        vipOrderInfo.setStatus(VideoVipOrderInfoEntity.PAY_STATUS_WAIT);
+        vipOrderInfo.setMemberId(loginUser.getId());
+        vipOrderInfo.setGoodsType(vipBuyDto.getType());
+        vipOrderInfo.setAmount(new BigDecimal(data.getValue()));
+        videoVipOrderInfoMapper.insert(vipOrderInfo);
+
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setSubject("会员支付");
+        model.setBody(data.getDescription());
+        model.setOutTradeNo(vipOrderInfo.getOrderNo());
+        model.setTimeoutExpress("15m");
+
+        if ("dev".equals(active) || "test".equals(active)) {
+            model.setTotalAmount("0.01");
+        } else {
+            model.setTotalAmount(vipOrderInfo.getAmount().toString());
+        }
+
+        AliPayPassbackModel passbackModel = new AliPayPassbackModel();
+        passbackModel.setOrderId(vipOrderInfo.getId());
+        passbackModel.setMemberId(vipOrderInfo.getMemberId());
+        model.setPassbackParams(JSONObject.toJSONString(passbackModel));
+
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        AlipayTradeAppPayResponse resp = null;
+        try {
+            resp = AliPayApi.appPayToResponse(model, aliPayProperties.getNoticeUrl());
+        } catch (AlipayApiException e) {
+            log.error("支付宝支付异常", e);
+            throw new FebsException("支付宝支付异常");
+        }
+        return resp.getBody();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void aliCallback(Map<String, String> params) {
+        String modelStr = params.get("passback_params");
+
+        AliPayPassbackModel passback = JSONObject.parseObject(modelStr, AliPayPassbackModel.class);
+
+        VideoVipOrderInfoEntity orderInfo = videoVipOrderInfoMapper.selectById(passback.getOrderId());
+        if (orderInfo.getPayType() != 1) {
+            return;
+        }
+
+        VideoMemberEntity member = videoMemberMapper.selectById(orderInfo.getMemberId());
+
+        orderInfo.setStatus(VideoVipOrderInfoEntity.PAY_STATUS_PAY);
+        orderInfo.setPayTime(new Date());
+        orderInfo.setPayTraderNo(params.get("trade_no"));
+        videoVipOrderInfoMapper.updateById(orderInfo);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/video/dto/VipBuyDto.java b/src/main/java/cc/mrbird/febs/video/dto/VipBuyDto.java
new file mode 100644
index 0000000..5f5dd3b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/dto/VipBuyDto.java
@@ -0,0 +1,17 @@
+package cc.mrbird.febs.video.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author wzy
+ * @date 2021-12-17
+ **/
+@Data
+@ApiModel(value = "VipBuyDto", description = "会员购买")
+public class VipBuyDto {
+
+    @ApiModelProperty(value = "购买会员类型 MONTH/PERIOD/YEAR", example = "YEAR")
+    private String type;
+}
diff --git a/src/main/java/cc/mrbird/febs/video/entity/VideoVipOrderInfoEntity.java b/src/main/java/cc/mrbird/febs/video/entity/VideoVipOrderInfoEntity.java
new file mode 100644
index 0000000..70806c7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/entity/VideoVipOrderInfoEntity.java
@@ -0,0 +1,64 @@
+package cc.mrbird.febs.video.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2021-12-17
+ **/
+@Data
+@TableName("video_vip_order_info")
+public class VideoVipOrderInfoEntity extends BaseEntity {
+
+    public static final Integer PAY_TYPE_ALIPAY = 1;
+    public static final Integer PAY_TYPE_USDT = 2;
+
+    public static final Integer PAY_STATUS_WAIT = 1;
+    public static final Integer PAY_STATUS_PAY = 2;
+    public static final Integer PAY_STATUS_CANCEL = 2;
+
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+
+    /**
+     * 支付交易编号
+     */
+    private String payTraderNo;
+
+    /**
+     * 类型;1/支付宝 2/USDT
+     */
+    private Integer payType;
+
+    /**
+     * 用户ID
+     */
+    private Long memberId;
+
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 商品类型;MONTH/PERIOD/YEAR
+     */
+    private String goodsType;
+
+    /**
+     * 状态;1/代支付 2/已支付 3/已取消
+     */
+    private Integer status;
+
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+}
diff --git a/src/main/java/cc/mrbird/febs/video/mapper/DataDictionaryCustomMapper.java b/src/main/java/cc/mrbird/febs/video/mapper/DataDictionaryCustomMapper.java
index 0f3280e..a432d69 100644
--- a/src/main/java/cc/mrbird/febs/video/mapper/DataDictionaryCustomMapper.java
+++ b/src/main/java/cc/mrbird/febs/video/mapper/DataDictionaryCustomMapper.java
@@ -11,4 +11,5 @@
 
     List<ApiVipCostVo> selectApiVipCostByType(@Param("type") String type);
 
+    DataDictionaryCustom selectDataByTypeAndCode(@Param("type") String type, @Param("code") String code);
 }
diff --git a/src/main/java/cc/mrbird/febs/video/mapper/VideoVipOrderInfoMapper.java b/src/main/java/cc/mrbird/febs/video/mapper/VideoVipOrderInfoMapper.java
new file mode 100644
index 0000000..8896899
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/mapper/VideoVipOrderInfoMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.video.mapper;
+
+import cc.mrbird.febs.video.entity.VideoVipOrderInfoEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface VideoVipOrderInfoMapper extends BaseMapper<VideoVipOrderInfoEntity> {
+}
diff --git a/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java
index bf845cd..ae25c29 100644
--- a/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java
@@ -169,13 +169,13 @@
         videoInfoVo.setCollectCnt(data.getCollectCnt());
         videoInfoVo.setStarCnt(data.getStarCnt());
 
-        VideoMemberEntity loginUser = LoginUserUtil.getLoginUser();
-        if (loginUser == null) {
-            videoInfoVo.setNotLogin(AppContants.FLAG_INT_N);
-            return videoInfoVo;
-        }
-
         if (AppContants.FLAG_INT_N.equals(videoInfoEntity.getIsFree())) {
+            VideoMemberEntity loginUser = LoginUserUtil.getLoginUser();
+            if (loginUser == null) {
+                videoInfoVo.setNotLogin(AppContants.FLAG_INT_N);
+                return videoInfoVo;
+            }
+
             VideoMemberEntity member = this.videoMemberMapper.selectById(loginUser.getId());
             if (AppContants.FLAG_INT_N.equals(member.getIsVip())) {
                 videoInfoVo.setNotVip(AppContants.FLAG_INT_N);
diff --git a/src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java b/src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java
index abc1f92..baf9087 100644
--- a/src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java
@@ -32,6 +32,9 @@
     @ApiModelProperty(value = "当前播放视频时长")
     private String timeLength;
 
+    @ApiModelProperty(value = "是否免费 1/免费 2/会员")
+    private Integer isFree;
+
     @ApiModelProperty(value = "当前播放itemid")
     private Long itemId;
 
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 879b66b..b312062 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -51,4 +51,15 @@
 system:
   images:
     path: /home/javaweb/webresource/video/
-    url: http://120.27.238.55:8000/video/
\ No newline at end of file
+    url: http://120.27.238.55:8000/video/
+
+pay:
+  ali:
+    appId: 2016120704000539
+    # 支付宝公钥
+    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobfti31eIy4U59JUrL+eMosuY97jk444eFyMeoxkG1ljJ3GytPV7YlLL6TVgvON6eR0eFvWKK4MoTEW0TkpxgmuurkpTSXDB0bNiuYJQyiju4Bikt83dQo64YKYDSwBNA9hFPHFM1mhWpJM/3mYjbbLT9AoL8q+n1fBxFtcAMmxXBqZiECT8qzuTV3VfTufXsNhY9LJXcDkAr98GZDEbH+Zhr5die2Rzpvj9o8aSs6J0IU+PJpU+SPZEjpITAPtLauKEV2MFGUaxnli1PgJexW8OW9smCDZPhIce6vYYwn0wQKtnFla0zWPe2r85egggE0y9SJs5zQX5F3OlJzLS/wIDAQAB
+    # 支付宝私钥
+    privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCht+2LfV4jLhTn0lSsv54yiy5j3uOTjjh4XIx6jGQbWWMncbK09XtiUsvpNWC843p5HR4W9YorgyhMRbROSnGCa66uSlNJcMHRs2K5glDKKO7gGKS3zd1CjrhgpgNLAE0D2EU8cUzWaFakkz/eZiNtstP0Cgvyr6fV8HEW1wAybFcGpmIQJPyrO5NXdV9O59ew2Fj0sldwOQCv3wZkMRsf5mGvl2J7ZHOm+P2jxpKzonQhT48mlT5I9kSOkhMA+0tq4oRXYwUZRrGeWLU+Al7Fbw5b2yYINk+Ehx7q9hjCfTBAq2cWVrTNY97avzl6CCATTL1ImznNBfkXc6UnMtL/AgMBAAECggEAXLwJBr0sV0YcjNcK4Ui8YcV4I6Lzo3ChpzuC/t80pI48kqjbTnOafkZ2UdPfFlHnsD3nPEkvI0aBvEMYYvDDaINxVtaeLfXv3t1cFn7I7zRLzsuy4Qe3AmyvBBUOvFp+z16cTU23Pxfz30nlDRZK6KPscPu14EOkHcVUREGkBkU6Gqft38Vd21ClRmh76oWsYCGzJkx547blVMAWJw+fGgHerrdwaSOlvD8Tj20dnCU7ifvUNQiWsdn6wOdUz24o4oB8kSBmZbOYCviljvqeHo2SZlIuneiXwz9TanOvlIaGkVeHnJvNd3S6FRXTmcTZQpW9RtDBZF0o1Oh+W44Q6QKBgQDbVwsD3GdFFlYWUMvtTGUcHqtzrvWDln6Lh0vtEmQIA28aDBre2URRYm+AhqfsjiAz1WwVVVeBjbSk7ZJv0kWWvJiA8/2XyZhHdDidWvhndQJD5HLK9IqPNDd6WA9cW/SQs2ehtqUVM55IzsYZK2Tbnb9UYuIHTHiMExL/jOGq0wKBgQC8v2rPC02+qVJyx82Gq6CD57EuirKTA1ZUFQIBRbfccqMoYaJogREUjlUNN5mZAuQ6yLqOHi79v6G/7NegP4WavIRJ/W9jqjLXP1AJ/jeo9IGu96HCsV2+M/5DRD/zrZakQMJPZYrgZOqjtL1qLcKdpuXumT0VAyy41yoU0jvDpQKBgQCvyABR5c71dUMkuzfTQ0g80u+A1JR6Ep/z3kghBH4aVfYyH8VhFypDNuo5TLFDSVvRbpciObTZZOGC08ppx1Bxz09A+Ukg3jUl/qRop0EwWHuqQWkl8fkhby2O5Qfacu97D+xbk26VoTqXCu+DuF0qDDALxvtx8f0h9R9iolswdQKBgE5+sLWwNsHe+vnfHBswjw2sMmRvq/o1vhYzsmTDEMauKipmCDu7yVWqJ7bac5dNu4qy5dqqtNI0etktbzMml7KVSdLXghaJtqELpIazYYRzQud39p7YUmsChnCFFq+JdoeSovyP9ySA84/nX4qjwzb7LM6AjgWKD3RDjy2fjNk9AoGBANEJdXJhwon+cMfPT9XfCVee0Cr//91WzfGYnVpevRuYp/q29rcZ0mZiXPfvge0vogZEFHIzsQfjtW84W4H81aSbFj9lncIzRl4O8yFGsr1Y9wkewmQqylM+A/I4eu9UcpK/hJX5G07EnCuZCabj12CGnA3uA9Icgg28jbg2BCR6
+    # 回调地址
+    noticeUrl: http://120.27.238.55:8801/api/pay/aliCallBack
+    domain: https://openapi.alipay.com/gateway.do
\ No newline at end of file
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 04d0df9..fbd6ee6 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -46,4 +46,15 @@
         # 连接池最大阻塞等待时间(使用负值表示没有限制)
         max-wait: 10000
     # 连接超时时间(毫秒)
-    timeout: 5000
\ No newline at end of file
+    timeout: 5000
+
+pay:
+  ali:
+    appId: 2016120704000539
+    # 支付宝公钥
+    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobfti31eIy4U59JUrL+eMosuY97jk444eFyMeoxkG1ljJ3GytPV7YlLL6TVgvON6eR0eFvWKK4MoTEW0TkpxgmuurkpTSXDB0bNiuYJQyiju4Bikt83dQo64YKYDSwBNA9hFPHFM1mhWpJM/3mYjbbLT9AoL8q+n1fBxFtcAMmxXBqZiECT8qzuTV3VfTufXsNhY9LJXcDkAr98GZDEbH+Zhr5die2Rzpvj9o8aSs6J0IU+PJpU+SPZEjpITAPtLauKEV2MFGUaxnli1PgJexW8OW9smCDZPhIce6vYYwn0wQKtnFla0zWPe2r85egggE0y9SJs5zQX5F3OlJzLS/wIDAQAB
+    # 支付宝私钥
+    privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCht+2LfV4jLhTn0lSsv54yiy5j3uOTjjh4XIx6jGQbWWMncbK09XtiUsvpNWC843p5HR4W9YorgyhMRbROSnGCa66uSlNJcMHRs2K5glDKKO7gGKS3zd1CjrhgpgNLAE0D2EU8cUzWaFakkz/eZiNtstP0Cgvyr6fV8HEW1wAybFcGpmIQJPyrO5NXdV9O59ew2Fj0sldwOQCv3wZkMRsf5mGvl2J7ZHOm+P2jxpKzonQhT48mlT5I9kSOkhMA+0tq4oRXYwUZRrGeWLU+Al7Fbw5b2yYINk+Ehx7q9hjCfTBAq2cWVrTNY97avzl6CCATTL1ImznNBfkXc6UnMtL/AgMBAAECggEAXLwJBr0sV0YcjNcK4Ui8YcV4I6Lzo3ChpzuC/t80pI48kqjbTnOafkZ2UdPfFlHnsD3nPEkvI0aBvEMYYvDDaINxVtaeLfXv3t1cFn7I7zRLzsuy4Qe3AmyvBBUOvFp+z16cTU23Pxfz30nlDRZK6KPscPu14EOkHcVUREGkBkU6Gqft38Vd21ClRmh76oWsYCGzJkx547blVMAWJw+fGgHerrdwaSOlvD8Tj20dnCU7ifvUNQiWsdn6wOdUz24o4oB8kSBmZbOYCviljvqeHo2SZlIuneiXwz9TanOvlIaGkVeHnJvNd3S6FRXTmcTZQpW9RtDBZF0o1Oh+W44Q6QKBgQDbVwsD3GdFFlYWUMvtTGUcHqtzrvWDln6Lh0vtEmQIA28aDBre2URRYm+AhqfsjiAz1WwVVVeBjbSk7ZJv0kWWvJiA8/2XyZhHdDidWvhndQJD5HLK9IqPNDd6WA9cW/SQs2ehtqUVM55IzsYZK2Tbnb9UYuIHTHiMExL/jOGq0wKBgQC8v2rPC02+qVJyx82Gq6CD57EuirKTA1ZUFQIBRbfccqMoYaJogREUjlUNN5mZAuQ6yLqOHi79v6G/7NegP4WavIRJ/W9jqjLXP1AJ/jeo9IGu96HCsV2+M/5DRD/zrZakQMJPZYrgZOqjtL1qLcKdpuXumT0VAyy41yoU0jvDpQKBgQCvyABR5c71dUMkuzfTQ0g80u+A1JR6Ep/z3kghBH4aVfYyH8VhFypDNuo5TLFDSVvRbpciObTZZOGC08ppx1Bxz09A+Ukg3jUl/qRop0EwWHuqQWkl8fkhby2O5Qfacu97D+xbk26VoTqXCu+DuF0qDDALxvtx8f0h9R9iolswdQKBgE5+sLWwNsHe+vnfHBswjw2sMmRvq/o1vhYzsmTDEMauKipmCDu7yVWqJ7bac5dNu4qy5dqqtNI0etktbzMml7KVSdLXghaJtqELpIazYYRzQud39p7YUmsChnCFFq+JdoeSovyP9ySA84/nX4qjwzb7LM6AjgWKD3RDjy2fjNk9AoGBANEJdXJhwon+cMfPT9XfCVee0Cr//91WzfGYnVpevRuYp/q29rcZ0mZiXPfvge0vogZEFHIzsQfjtW84W4H81aSbFj9lncIzRl4O8yFGsr1Y9wkewmQqylM+A/I4eu9UcpK/hJX5G07EnCuZCabj12CGnA3uA9Icgg28jbg2BCR6
+    # 回调地址
+    noticeUrl: http://120.27.238.55:8801/api/pay/aliCallBack
+    domain: https://openapi.alipay.com/gateway.do
\ No newline at end of file
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 56b6daa..5bd8702 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -51,4 +51,15 @@
 system:
   images:
     path: /home/javaweb/webresource/video/
-    url: http://120.27.238.55:8000/video/
\ No newline at end of file
+    url: http://120.27.238.55:8000/video/
+
+pay:
+  ali:
+    appId: 2016120704000539
+    # 支付宝公钥
+    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobfti31eIy4U59JUrL+eMosuY97jk444eFyMeoxkG1ljJ3GytPV7YlLL6TVgvON6eR0eFvWKK4MoTEW0TkpxgmuurkpTSXDB0bNiuYJQyiju4Bikt83dQo64YKYDSwBNA9hFPHFM1mhWpJM/3mYjbbLT9AoL8q+n1fBxFtcAMmxXBqZiECT8qzuTV3VfTufXsNhY9LJXcDkAr98GZDEbH+Zhr5die2Rzpvj9o8aSs6J0IU+PJpU+SPZEjpITAPtLauKEV2MFGUaxnli1PgJexW8OW9smCDZPhIce6vYYwn0wQKtnFla0zWPe2r85egggE0y9SJs5zQX5F3OlJzLS/wIDAQAB
+    # 支付宝私钥
+    privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCht+2LfV4jLhTn0lSsv54yiy5j3uOTjjh4XIx6jGQbWWMncbK09XtiUsvpNWC843p5HR4W9YorgyhMRbROSnGCa66uSlNJcMHRs2K5glDKKO7gGKS3zd1CjrhgpgNLAE0D2EU8cUzWaFakkz/eZiNtstP0Cgvyr6fV8HEW1wAybFcGpmIQJPyrO5NXdV9O59ew2Fj0sldwOQCv3wZkMRsf5mGvl2J7ZHOm+P2jxpKzonQhT48mlT5I9kSOkhMA+0tq4oRXYwUZRrGeWLU+Al7Fbw5b2yYINk+Ehx7q9hjCfTBAq2cWVrTNY97avzl6CCATTL1ImznNBfkXc6UnMtL/AgMBAAECggEAXLwJBr0sV0YcjNcK4Ui8YcV4I6Lzo3ChpzuC/t80pI48kqjbTnOafkZ2UdPfFlHnsD3nPEkvI0aBvEMYYvDDaINxVtaeLfXv3t1cFn7I7zRLzsuy4Qe3AmyvBBUOvFp+z16cTU23Pxfz30nlDRZK6KPscPu14EOkHcVUREGkBkU6Gqft38Vd21ClRmh76oWsYCGzJkx547blVMAWJw+fGgHerrdwaSOlvD8Tj20dnCU7ifvUNQiWsdn6wOdUz24o4oB8kSBmZbOYCviljvqeHo2SZlIuneiXwz9TanOvlIaGkVeHnJvNd3S6FRXTmcTZQpW9RtDBZF0o1Oh+W44Q6QKBgQDbVwsD3GdFFlYWUMvtTGUcHqtzrvWDln6Lh0vtEmQIA28aDBre2URRYm+AhqfsjiAz1WwVVVeBjbSk7ZJv0kWWvJiA8/2XyZhHdDidWvhndQJD5HLK9IqPNDd6WA9cW/SQs2ehtqUVM55IzsYZK2Tbnb9UYuIHTHiMExL/jOGq0wKBgQC8v2rPC02+qVJyx82Gq6CD57EuirKTA1ZUFQIBRbfccqMoYaJogREUjlUNN5mZAuQ6yLqOHi79v6G/7NegP4WavIRJ/W9jqjLXP1AJ/jeo9IGu96HCsV2+M/5DRD/zrZakQMJPZYrgZOqjtL1qLcKdpuXumT0VAyy41yoU0jvDpQKBgQCvyABR5c71dUMkuzfTQ0g80u+A1JR6Ep/z3kghBH4aVfYyH8VhFypDNuo5TLFDSVvRbpciObTZZOGC08ppx1Bxz09A+Ukg3jUl/qRop0EwWHuqQWkl8fkhby2O5Qfacu97D+xbk26VoTqXCu+DuF0qDDALxvtx8f0h9R9iolswdQKBgE5+sLWwNsHe+vnfHBswjw2sMmRvq/o1vhYzsmTDEMauKipmCDu7yVWqJ7bac5dNu4qy5dqqtNI0etktbzMml7KVSdLXghaJtqELpIazYYRzQud39p7YUmsChnCFFq+JdoeSovyP9ySA84/nX4qjwzb7LM6AjgWKD3RDjy2fjNk9AoGBANEJdXJhwon+cMfPT9XfCVee0Cr//91WzfGYnVpevRuYp/q29rcZ0mZiXPfvge0vogZEFHIzsQfjtW84W4H81aSbFj9lncIzRl4O8yFGsr1Y9wkewmQqylM+A/I4eu9UcpK/hJX5G07EnCuZCabj12CGnA3uA9Icgg28jbg2BCR6
+    # 回调地址
+    noticeUrl: http://120.27.238.55:8801/api/pay/aliCallBack
+    domain: https://openapi.alipay.com/gateway.do
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml b/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml
index dfc1568..8a5a123 100644
--- a/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml
+++ b/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml
@@ -11,4 +11,8 @@
         where a.type = #{type}
     </select>
 
+    <select id="selectDataByTypeAndCode" resultType="cc.mrbird.febs.video.entity.DataDictionaryCustom">
+        select * from data_dictionary_custom
+        where type=#{type} and code=#{code}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/video/VideoVipOrderInfoMapper.xml b/src/main/resources/mapper/video/VideoVipOrderInfoMapper.xml
new file mode 100644
index 0000000..1f17403
--- /dev/null
+++ b/src/main/resources/mapper/video/VideoVipOrderInfoMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.video.mapper.VideoVipOrderInfoMapper">
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.1