Helius
2021-12-17 b723d7f8769dd33816013eddfb888e8fcf1210da
add alipay
10 files modified
11 files added
479 ■■■■■ changed files
pom.xml 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/utils/AppContants.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/utils/MallUtils.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java 42 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java 58 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java 26 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/service/IPayService.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java 121 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/dto/VipBuyDto.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/entity/VideoVipOrderInfoEntity.java 64 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/mapper/DataDictionaryCustomMapper.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/mapper/VideoVipOrderInfoMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java 12 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java 3 ●●●●● patch | view | raw | blame | history
src/main/resources/application-dev.yml 13 ●●●●● patch | view | raw | blame | history
src/main/resources/application-prod.yml 13 ●●●●● patch | view | raw | blame | history
src/main/resources/application-test.yml 13 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/video/VideoVipOrderInfoMapper.xml 5 ●●●●● patch | view | raw | blame | history
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>
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/**");
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";
}
src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
New file
@@ -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);
    }
}
src/main/java/cc/mrbird/febs/pay/configure/AliPayConfigure.java
New file
@@ -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;
    }
}
src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
New file
@@ -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";
        }
    }
}
src/main/java/cc/mrbird/febs/pay/model/AliPayPassbackModel.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/pay/properties/AliPayProperties.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/pay/service/IPayService.java
New file
@@ -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);
}
src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
New file
@@ -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);
    }
}
src/main/java/cc/mrbird/febs/video/dto/VipBuyDto.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/video/entity/VideoVipOrderInfoEntity.java
New file
@@ -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;
}
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);
}
src/main/java/cc/mrbird/febs/video/mapper/VideoVipOrderInfoMapper.java
New file
@@ -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> {
}
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);
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;
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/
    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
src/main/resources/application-prod.yml
@@ -46,4 +46,15 @@
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 10000
    # 连接超时时间(毫秒)
    timeout: 5000
    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
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/
    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
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>
src/main/resources/mapper/video/VideoVipOrderInfoMapper.xml
New file
@@ -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>