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
@@ -14,9 +14,11 @@ InterceptorRegistration registration = registry.addInterceptor(new LoginInterceptor()); registration.addPathPatterns("/api/**"); registration.excludePathPatterns("/api/login/**"); registration.excludePathPatterns("/api/common/**"); 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/PayController.java
New file @@ -0,0 +1,71 @@ package cc.mrbird.febs.pay.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.pay.properties.AliPayProperties; import cc.mrbird.febs.pay.service.IPayService; import cc.mrbird.febs.video.dto.VipBuyDto; import com.alipay.api.AlipayApiException; import com.alipay.api.internal.util.AlipaySignature; import com.ijpay.alipay.AliPayApi; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; 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") @Api(value = "PayController", tags = "支付") public class PayController { @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"; } } @ApiOperation(value = "支付宝支付") @PostMapping(value = "/pay") public FebsResponse pay(@RequestBody VipBuyDto vipBuyDto) { return new FebsResponse().success().data(payService.aliPay(vipBuyDto)); } } 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/controller/ApiDataDictionaryController.java
New file @@ -0,0 +1,44 @@ package cc.mrbird.febs.video.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.video.conversion.DataDicConversion; import cc.mrbird.febs.video.entity.DataDictionaryCustom; import cc.mrbird.febs.video.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.video.vo.DataDicVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author wzy * @date 2021-12-17 **/ @Slf4j @RestController @RequestMapping(value = "/api/common/") @RequiredArgsConstructor @Api(value = "ApiDataDictionaryController", tags = "字典类") public class ApiDataDictionaryController { private final DataDictionaryCustomMapper dataDictionaryCustomMapper; @ApiOperation(value = "根据type获取字典值", notes = "根据type获取字典值") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = DataDicVo.class) }) @GetMapping(value = "/findDataByDicType") public FebsResponse findDataByDicType(@RequestParam("type") String type) { List<DataDictionaryCustom> dataDic = dataDictionaryCustomMapper.selectByType(type); return new FebsResponse().success().data(DataDicConversion.INSTANCE.entitiesToVos(dataDic)); } } src/main/java/cc/mrbird/febs/video/conversion/DataDicConversion.java
New file @@ -0,0 +1,21 @@ package cc.mrbird.febs.video.conversion; import cc.mrbird.febs.video.entity.DataDictionaryCustom; import cc.mrbird.febs.video.vo.DataDicVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; /** * @author wzy * @date 2021-12-17 **/ @Mapper public abstract class DataDicConversion { public static final DataDicConversion INSTANCE = Mappers.getMapper(DataDicConversion.class); public abstract DataDicVo entityToVo(DataDictionaryCustom dataDictionaryCustom); public abstract List<DataDicVo> entitiesToVos(List<DataDictionaryCustom> list); } 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,7 @@ List<ApiVipCostVo> selectApiVipCostByType(@Param("type") String type); DataDictionaryCustom selectDataByTypeAndCode(@Param("type") String type, @Param("code") String code); List<DataDictionaryCustom> selectByType(@Param("type") String type); } 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
@@ -176,13 +176,13 @@ videoInfoVo.setCollectCnt(data.getCollectCnt()); videoInfoVo.setStarCnt(data.getStarCnt()); if (AppContants.FLAG_INT_N.equals(videoInfoEntity.getIsFree())) { VideoMemberEntity loginUser = LoginUserUtil.getLoginUser(); if (loginUser == null) { videoInfoVo.setNotLogin(AppContants.FLAG_INT_N); return videoInfoVo; } if (AppContants.FLAG_INT_N.equals(videoInfoEntity.getIsFree())) { 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/DataDicVo.java
New file @@ -0,0 +1,26 @@ package cc.mrbird.febs.video.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author wzy * @date 2021-12-17 **/ @Data @ApiModel(value = "DataDicVo", description = "字典值返回参数类") public class DataDicVo { @ApiModelProperty(value = "字典类型") private String type; @ApiModelProperty(value = "字典编码") private String code; @ApiModelProperty(value ="值") private String value; @ApiModelProperty(value = "描述") private String description; } src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java
@@ -32,6 +32,12 @@ @ApiModelProperty(value = "当前播放视频时长") private String timeLength; @ApiModelProperty(value = "是否免费 1/免费 2/会员") private Integer isFree; @ApiModelProperty(value = "是否点赞 1/是 2/否") private Integer isLike; @ApiModelProperty(value = "当前播放itemid") private Long itemId; src/main/resources/application-dev.yml
@@ -52,3 +52,14 @@ images: path: /home/javaweb/webresource/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
@@ -47,3 +47,14 @@ max-wait: 10000 # 连接超时时间(毫秒) 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
@@ -52,3 +52,14 @@ images: path: /home/javaweb/webresource/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,13 @@ 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> <select id="selectByType" resultType="cc.mrbird.febs.video.entity.DataDictionaryCustom"> select * from data_dictionary_custom where type=#{type} </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>