记得上下班打卡 | git大法好,push需谨慎

Commit d87d000c authored by 张国柄's avatar 张国柄

fix:购买会员唤醒支付参数校验;

parent 7ef01cd7
......@@ -17,7 +17,7 @@ public class AdamMemberOrderCodeParam implements Serializable {
@Min(2)
@Max(3)
private Integer mode;
@ApiModelProperty(position = 11, required = true, value = "兑换码", example = "0")
@ApiModelProperty(position = 11, required = true, value = "兑换码")
@NotBlank
private String memberCode;
@ApiModelProperty(position = 12, required = true, value = "生日", example = "2021-05-27")
......@@ -25,9 +25,8 @@ public class AdamMemberOrderCodeParam implements Serializable {
private String birthday;
@ApiModelProperty(position = 12, value = "支付终端[app,wap,js,applet]", example = "js")
private String deviceFrom;
@ApiModelProperty(position = 13, required = false, value = "姓名")
@ApiModelProperty(position = 13, required = false, value = "姓名[未实名时必传]")
private String name;
@ApiModelProperty(position = 14, required = false, value = "身份证件号")
@ApiModelProperty(position = 14, required = false, value = "身份证件号[未实名时必传]")
private String idCard;
}
......@@ -13,23 +13,23 @@ import java.math.BigDecimal;
@Data
public class AdamMemberOrderParam implements Serializable {
private static final long serialVersionUID = -2605176979349053352L;
@ApiModelProperty(position = 10, required = true, value = "会员ID[50]")
@ApiModelProperty(position = 10, required = true, value = "会员ID[50]", example = "1")
@NotBlank
private String memberId;
@ApiModelProperty(position = 11, required = true, value = "购买方式:0-购买会员,1-购买会员码", allowableValues = "0,1")
@ApiModelProperty(position = 11, required = true, value = "会员价格ID", example = "101")
@NotBlank
private String memberPriceId;
@ApiModelProperty(position = 12, required = true, value = "购买方式:0-购买会员,1-购买会员码", allowableValues = "0,1")
@NotNull
@Min(0)
@Max(1)
private Integer mode;
@ApiModelProperty(position = 12, required = true, value = "应付金额", example = "0.01")
@ApiModelProperty(position = 13, required = true, value = "应付金额", example = "0.01")
@DecimalMin("0.01")
private BigDecimal price;
@ApiModelProperty(position = 13, required = true, value = "实付金额", example = "0.01")
@ApiModelProperty(position = 14, required = true, value = "实付金额", example = "0.01")
@DecimalMin("0.01")
private BigDecimal pricePaid;
@ApiModelProperty(position = 14, required = true, value = "会员价格ID")
@NotBlank
private String memberPriceId;
@ApiModelProperty(position = 15, required = true, value = "用户生日", example = "2021-05-27")
@Pattern(regexp = LnsRegex.Valid.DATETIME_YMD, message = "生日格式有误")
private String birthday;
......@@ -39,18 +39,16 @@ public class AdamMemberOrderParam implements Serializable {
@ApiModelProperty(position = 17, required = true, value = "支付方式", allowableValues = "alipay,wepay")
@NotBlank
private String payType;
@ApiModelProperty(position = 18, required = false, value = "苹果支付使用")
@ApiModelProperty(position = 18, required = false, value = "App内Apple支付必传")
private String productId;
@ApiModelProperty(position = 19, required = false, value = "姓名", example = "王武")
private String name;
@ApiModelProperty(position = 20, required = false, value = "身份证件号", example = "111111111111111111")
private String idCard;
@ApiModelProperty(position = 21, required = false, value = "微信支付使用")
private String authCode;
@ApiModelProperty(position = 22, required = false, value = "微信支付使用")
@ApiModelProperty(position = 19, required = false, value = "微信内网页及小程序支付必传")
private String openId;
@ApiModelProperty(position = 23, required = true, value = "未支付/取消支付跳转URL")
@ApiModelProperty(position = 23, required = false, value = "取消支付,点击取消支付宝回调地址")
private String showUrl;
@ApiModelProperty(position = 24, required = true, value = "支付成功跳转URL")
@ApiModelProperty(position = 24, required = false, value = "支付成功,点击完成支付宝回调地址")
private String returnUrl;
@ApiModelProperty(position = 19, required = false, value = "姓名[未实名时必传]", example = "王武")
private String name;
@ApiModelProperty(position = 20, required = false, value = "身份证件号[未实名时必传]", example = "111111111111111111")
private String idCard;
}
......@@ -18,7 +18,7 @@ public class AdamMemberPriceParam implements Serializable {
private static final long serialVersionUID = -6432796310264973696L;
@ApiModelProperty(position = 1, value = "会员价格ID")
private String memberPriceId;
@ApiModelProperty(position = 2, value = "会员类型ID")
@ApiModelProperty(position = 2, value = "会员类型ID", example = "1")
@NotBlank
private String memberId;
@ApiModelProperty(position = 3, value = "状态:0-不可用,1-上线中,2-已下线", allowableValues = "0,1,2")
......
......@@ -41,15 +41,11 @@ public class AdamMemberOrderController {
@Autowired
Environment env;
@Autowired
IAdamMemberOrderService adamMemberOrderService;
@Autowired
IAdamMemberPriceAdminService adamMemberPriceService;
IAdamRdmService adamRdmService;
@Autowired
IAdamRealNameService adamRealNameService;
IAdamMemberOrderService adamMemberOrderService;
@Autowired
IAdamUserService adamUserService;
@Autowired
IAdamRdmService adamRdmService;
@ApiOperationSupport(order = 0)
@ApiOperation(value = "购买会员预览")
......@@ -134,7 +130,7 @@ public class AdamMemberOrderController {
log.debug("member/order/exchange:param:{}", JsonUtils.toJson(param));
String currentUid = CurrentUtil.getCurrentUid();
if (null != adamRdmService.getUserMemberVoByUid(currentUid)) {// 仅限从未购买过会员的用户使用
return ResponseDto.failure(ErrorMapping.get("10204"));
return ResponseDto.failure(ErrorMapping.get("10200"));
}
// TODO: 2021/6/9 判断黑名单,待定(暂不做)
......@@ -181,6 +177,7 @@ public class AdamMemberOrderController {
}
if (memberOrderInfo.getMode() <= 1) {
try {
// 支付中心返回说明:已支付订单status==1,未支付订单status==0
String rst = HttpUtil.get(env.getProperty("liquidnet.url-pay.check") + "?code=" + memberOrderInfo.getPayNo(), null);
JsonNode rstJNode = JsonUtils.fromJson(rst, JsonNode.class);
......
......@@ -21,7 +21,6 @@ import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -36,6 +35,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -47,19 +47,13 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
@Autowired
Environment env;
@Autowired
IAdamRdmService adamRdmService;
@Autowired
IAdamUserMemberService adamUserMemberService;
@Autowired
IAdamMemberPriceAdminService adamMemberPriceService;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
MongoConverter mongoConverter;
@Autowired
RabbitTemplate rabbitTemplate;
@Autowired
IAdamMemberService adamMemberService;
IAdamRdmService adamRdmService;
@Autowired
IAdamUserMemberService adamUserMemberService;
@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
......@@ -74,9 +68,57 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
}
String createdAt = DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss);
String orderNo = IDGenerator.nextSnowId().toString().concat("V");
String clientIp = CurrentUtil.getCliIpAddr();
// 调取对应支付接口
LinkedMultiValueMap<String, String> payParam = new LinkedMultiValueMap<>();
payParam.add("type", "VIP");// TICKET,PRODUCT,COST,MBEANS,LIVE,VIDEO,VIP,CLUB
payParam.add("price", String.valueOf(memberPriceVo.getPrice()));
payParam.add("name", memberVo.getName());
payParam.add("detail", "正在现场:购买会员".concat(param.getMode() == 0 ? "" : "码"));
payParam.add("order_code", orderNo);
payParam.add("client_ip", clientIp);
payParam.add("notify_url", env.getProperty("liquidnet.url-pay.callback"));
String payUri = "/" + param.getDeviceFrom() + "/" + param.getPayType();
switch (payUri) {// applet/wepay | js/wepay | wap/alipay | wap/wepay | app/iappay | app/wepay
/**
* auth_code open_id为空时必传 微信网页静默获取,可用于后台请求获取openid
* open_id auth_code为空时必传 微信网页静默获取auth_code,然后请求后台获取openid
* 建议传open_id
*/
case "/applet/wepay":
case "/js/wepay":
if (StringUtils.isEmpty(param.getOpenId())) {
return ResponseDto.failure(ErrorMapping.get("10204"));
}
payParam.add("open_id", param.getOpenId());
break;
case "/wap/alipay":
if (StringUtils.isEmpty(param.getShowUrl()) || StringUtils.isEmpty(param.getReturnUrl())) {
return ResponseDto.failure(ErrorMapping.get("10205"));
}
// 取消支付,点击取消支付宝回调地址
payParam.add("show_url", param.getShowUrl());
// 支付成功,点击完成支付宝回调地址
payParam.add("return_url", param.getReturnUrl());
break;
case "/app/iappay":
if (StringUtils.isEmpty(param.getOpenId())) {
return ResponseDto.failure(ErrorMapping.get("10206"));
}
// iOS App唯一标识,目前为:com.zhengzai.zhengzai-tv
payParam.add("bundle_id", "com.zhengzai.zhengzai-tv");
// iTunes上架的商品唯一标识
payParam.add("product_id", param.getProductId());
break;
}
payParam.add("create_date", createdAt);
payParam.add("expire_time", "5");// 过期时间,单位分钟,默认5
// 生成订单信息
AdamMemberOrderVo memberOrderVo = new AdamMemberOrderVo();
String orderNo = IDGenerator.nextSnowId().toString().concat("V");
memberOrderVo.setOrderNo(orderNo);
memberOrderVo.setMemberId(param.getMemberId());
memberOrderVo.setDays(memberPriceVo.getDays());
......@@ -90,7 +132,7 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
memberOrderVo.setState(0);// 0-待支付
memberOrderVo.setUid(CurrentUtil.getCurrentUid());
memberOrderVo.setPrice(param.getPrice());
memberOrderVo.setClientIp(CurrentUtil.getCliIpAddr());
memberOrderVo.setClientIp(clientIp);
memberOrderVo.setVersion(CurrentUtil.getCliVersion());
memberOrderVo.setSource(CurrentUtil.getCliSource());
......@@ -98,31 +140,13 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
log.warn("###购买会员创建订单失败[memberOrderVo:{}]", JsonUtils.toJson(memberOrderVo));
return ResponseDto.failure(ErrorMapping.get("10210"));
}
// 调取对应支付接口
LinkedMultiValueMap<String, String> payParam = new LinkedMultiValueMap<>();
payParam.add("type", "VIP");// VIP,CLUB
payParam.add("price", String.valueOf(memberPriceVo.getPrice()));
payParam.add("name", memberOrderVo.getMemberName());
payParam.add("order_code", memberOrderVo.getOrderNo());
payParam.add("client_ip", memberOrderVo.getClientIp());
payParam.add("notify_url", env.getProperty("liquidnet.url-pay.callback"));
payParam.add("create_date", createdAt);
payParam.add("expire_time", "5");
payParam.add("detail", "正在现场:购买会员".concat(param.getMode() == 0 ? "" : "码"));
if (StringUtils.isNotBlank(param.getAuthCode())) {
payParam.add("auth_code", param.getAuthCode());
}
if (StringUtils.isNotBlank(param.getOpenId())) {
payParam.add("open_id", param.getOpenId());
}
if (StringUtils.isNotBlank(param.getProductId())) {
payParam.add("product_id", param.getProductId());
}
AdamMemberOrderResult result = AdamMemberOrderResult.getNew();
try {
Map payResult = this.callPayServer(param.getDeviceFrom(), param.getPayType(), payParam);
String url = env.getProperty("liquidnet.url-pay.pay") + payUri;
log.debug("HttpUtil.resquest.url:{},param:{}", url, JsonUtils.toJson(payParam));
String json = HttpUtil.post(url, payParam);
log.debug("HttpUtil.response.body:{}", json);
Map payResult = JsonUtils.fromJson(json, Map.class);
result.setCode((String) payResult.get("code"));
result.setPayData(payResult.get("pay_data"));
......@@ -141,21 +165,6 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
return ResponseDto.success(result);
}
/**
* 调用支付中心接口,获取支付信息
*
* @param payType 支付类型
* @param payParam 支付参数
* @return Map
*/
private Map callPayServer(String deviceFrom, String payType, LinkedMultiValueMap<String, String> payParam) {
String url = env.getProperty("liquidnet.url-pay.pay") + "/" + deviceFrom + "/" + payType;
log.debug("HttpUtil.resquest.url:{},param:{}", url, JsonUtils.toJson(payParam));
String json = HttpUtil.post(url, payParam);
log.debug("HttpUtil.response.body:{}", json);
return JsonUtils.fromJson(json, Map.class);
}
@Override
public ResponseDto<Object> paymentNotifyCallBack(AdamMemberOrderCallbackParam parameter) {
AdamMemberOrderVo handleMemberOrderVo = adamRdmService.getShotMemberOrderVoByOrderNo(parameter.getOrderCode());
......@@ -286,10 +295,10 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
public ResponseDto<AdamMemberOrderResult> exchangeMemberCode(AdamMemberOrderCodeParam param) {
AdamMemberCodeVo memberCodeVo = adamRdmService.getMemberCodeVoByCode(param.getMemberCode());
if (null == memberCodeVo) {
return ResponseDto.failure(ErrorMapping.get("10206"));
return ResponseDto.failure(ErrorMapping.get("10207"));
}
if (memberCodeVo.getState() != 0) {
return ResponseDto.failure(ErrorMapping.get(memberCodeVo.getState() == 1 ? "10207" : "10208"));
return ResponseDto.failure(ErrorMapping.get(memberCodeVo.getState() == 1 ? "10208" : "10209"));
}
AdamMemberPriceVo memberPriceVo = adamRdmService.getMemberPriceVoByPriceId(memberCodeVo.getMemberId(), memberCodeVo.getMemberPriceId());
if (null == memberPriceVo) {
......
......@@ -24,16 +24,16 @@
10106=收获地址不存在
10200=仅限从未购买过会员的用户使用
10201=会员卡信息有误,请核实
10202=会员卡价格有误,请核实
10203=支付信息有误,请联系客服
10204=仅限从未购买过会员的用户使用
10205=
10206=兑换码不存在,请核实
10207=兑换码已使用,请核实
10208=兑换码不可用,请核实
10209=
10204=微信支付OPENID必传
10205=支付宝支付回调URL必传
10206=苹果支付商品标识必传
10207=兑换码不存在,请核实
10208=兑换码已使用,请核实
10209=兑换码不可用,请核实
10210=创建订单失败,请联系客服
10211=订单不存在
10212=订单状态查询失败
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment