Merge branch 'master' of gitee.com:super-shopkeeper/chaozhanggui

This commit is contained in:
zhujunshuai 2023-04-04 11:11:09 +08:00
commit 7de9df5f08
31 changed files with 253 additions and 80 deletions

View File

@ -7,6 +7,7 @@ import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultCode; import cn.pluss.platform.api.ResultCode;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.constants.ProjectConstant; import cn.pluss.platform.constants.ProjectConstant;
import cn.pluss.platform.deviceStock.DeviceStockService;
import cn.pluss.platform.dto.*; import cn.pluss.platform.dto.*;
import cn.pluss.platform.entity.*; import cn.pluss.platform.entity.*;
import cn.pluss.platform.exception.MsgException; import cn.pluss.platform.exception.MsgException;
@ -25,6 +26,7 @@ import cn.pluss.platform.sxf.pay.SxfPayService;
import cn.pluss.platform.user.impl.GeneralPushUtil; import cn.pluss.platform.user.impl.GeneralPushUtil;
import cn.pluss.platform.userApp.UserAppService; import cn.pluss.platform.userApp.UserAppService;
import cn.pluss.platform.util.StringUtil; import cn.pluss.platform.util.StringUtil;
import cn.pluss.platform.util.TokenUtil;
import cn.pluss.platform.vo.MemberScanVO; import cn.pluss.platform.vo.MemberScanVO;
import cn.pluss.platform.vo.MerchantOrderVO; import cn.pluss.platform.vo.MerchantOrderVO;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -68,6 +70,8 @@ public class MerchantOrderController {
private final SxfPayService sxfPayService; private final SxfPayService sxfPayService;
private final RyxPayService ryxPayService; private final RyxPayService ryxPayService;
private final MerchantChannelStatusMapper merchantChannelStatusMapper; private final MerchantChannelStatusMapper merchantChannelStatusMapper;
@Autowired
private DeviceStockService deviceStockService;
@Setter(onMethod_ = {@Lazy, @Autowired}) @Setter(onMethod_ = {@Lazy, @Autowired})
private IdCardService idCardService; private IdCardService idCardService;
@ -424,6 +428,36 @@ public class MerchantOrderController {
return ResultGenerator.genFailResult(e.getMessage()); return ResultGenerator.genFailResult(e.getMessage());
} }
} }
/**
* 博实结pos机反扫支付
* @param merchantOrderDTO
* @return
*/
@PostMapping("/posScanPay")
public Result<Object> posScanPay(@RequestBody MerChantOrderDTO merchantOrderDTO) {
//首先验签
Map<String, String> token = TokenUtil.getToken(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId());
boolean sign = token.get("TOKEN").equals(merchantOrderDTO.getToken());
System.out.println(token);
MsgException.check(!sign,"签名错误");
//通过后查询商户信息
DeviceStock deviceStock = deviceStockService.checkBind(merchantOrderDTO.getSn());
MerchantBaseInfo merchantBaseInfoById = merchantBaseInfoService.getMerchantBaseInfoById(Integer.valueOf(deviceStock.getActMercId()));
MsgException.checkNull(merchantBaseInfoById, "找不到商户");
merchantOrderDTO.setMerchantCode(merchantBaseInfoById.getMerchantCode());
//校验金额
if (!StringUtil.isMoney(String.valueOf(merchantOrderDTO.getConsumeFee()))){
MsgException.throwException("金额异常");
}
//进行支付操作
try {
return merchantOrderService.toActivePay(merchantOrderDTO);
} catch (Exception e){
e.printStackTrace();
return ResultGenerator.genFailResult(e.getMessage());
}
}
/** /**
* 主扫会员支付 * 主扫会员支付

View File

@ -5,6 +5,7 @@ import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.entity.MerchantCashPayCode; import cn.pluss.platform.entity.MerchantCashPayCode;
import cn.pluss.platform.entity.MerchantCashPlace; import cn.pluss.platform.entity.MerchantCashPlace;
import cn.pluss.platform.entity.MerchantCashPlaceStaff; import cn.pluss.platform.entity.MerchantCashPlaceStaff;
import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.merchant.MerchantCashPlaceService; import cn.pluss.platform.merchant.MerchantCashPlaceService;
import cn.pluss.platform.merchant.MerchantCashPlaceStaffService; import cn.pluss.platform.merchant.MerchantCashPlaceStaffService;
import cn.pluss.platform.vo.MerchantCashPlaceStaffVO; import cn.pluss.platform.vo.MerchantCashPlaceStaffVO;
@ -33,6 +34,9 @@ public class MerchantCashPlaceController {
@PostMapping @PostMapping
public Result<Object> add(@RequestBody MerchantCashPlace merchantCashPlace) { public Result<Object> add(@RequestBody MerchantCashPlace merchantCashPlace) {
//判定字符位数
size(merchantCashPlace.getAddress());
size(merchantCashPlace.getName());
cashPlaceService.saveOrUpdate(merchantCashPlace); cashPlaceService.saveOrUpdate(merchantCashPlace);
return ResultGenerator.genSuccessResult("保存成功", merchantCashPlace); return ResultGenerator.genSuccessResult("保存成功", merchantCashPlace);
} }
@ -101,4 +105,9 @@ public class MerchantCashPlaceController {
Page<MerchantCashPlaceStaffVO> pageData = cashPlaceStaffService.getRecord(page, condition, orderItem); Page<MerchantCashPlaceStaffVO> pageData = cashPlaceStaffService.getRecord(page, condition, orderItem);
return ResultGenerator.genSuccessResult(pageData); return ResultGenerator.genSuccessResult(pageData);
} }
private void size(String character){
if (character.length() >= 50){
throw new MsgException("输入内容过长");
}
}
} }

View File

@ -55,6 +55,7 @@ public class TokenRegistryInterceptor extends HandlerInterceptorAdapter {
limitUri.add("/api/callback/"); limitUri.add("/api/callback/");
limitUri.add("/api/open/login"); limitUri.add("/api/open/login");
limitUri.add("/api/index.html"); limitUri.add("/api/index.html");
limitUri.add("/api/merchantOrder/posScanPay");
boolean passFlag = limitUri.stream().anyMatch(s -> s.equals(requestUri) || requestUri.startsWith(s)); boolean passFlag = limitUri.stream().anyMatch(s -> s.equals(requestUri) || requestUri.startsWith(s));
if (passFlag) { if (passFlag) {
return true; return true;

View File

@ -25,6 +25,8 @@ public class TokenUtil {
private static final String USER_CODE = "ZF544"; private static final String USER_CODE = "ZF544";
//APPSECRET //APPSECRET
private static final String APP_SECRET = "2022bsjZF544GAH"; private static final String APP_SECRET = "2022bsjZF544GAH";
//sn
private static final String SN = "BSJQG01YJ0001";
/** /**
* 获取TOKEN值 * 获取TOKEN值
@ -32,7 +34,7 @@ public class TokenUtil {
* @param requestId 请求ID自定义 * @param requestId 请求ID自定义
* @return * @return
*/ */
private static Map<String, String> getToken(String timestamp, String requestId) { public static Map<String, String> getToken(String timestamp, String requestId) {
String token = ""; String token = "";
String encode = ""; String encode = "";
SortedMap<String, Object> map = new TreeMap(); SortedMap<String, Object> map = new TreeMap();
@ -51,8 +53,17 @@ public class TokenUtil {
Map<String, String> finalMap = new HashMap<>(); Map<String, String> finalMap = new HashMap<>();
finalMap.put("ENCODE",encode); finalMap.put("ENCODE",encode);
System.out.println(token + APP_SECRET); System.out.println(token + APP_SECRET);
finalMap.put("TOKEN", MD5Util.md5(token + APP_SECRET)); finalMap.put("TOKEN", MD5Util.md5(token + APP_SECRET).toUpperCase());
return finalMap; return finalMap;
} }
public static void main(String[] args) {
String s = String.valueOf(System.currentTimeMillis());
System.out.println(s);
String s1 = UUID.randomUUID().toString();
System.out.println(s1);
Map<String, String> token = getToken(s, s1);
System.out.println(token);
}
} }

View File

@ -24,15 +24,15 @@ ys:
## 进件URL前缀v2 ## 进件URL前缀v2
auditDomainV2: https://ouser.ysepay.com:6443/ auditDomainV2: https://ouser.ysepay.com:6443/
## 机构号ID ## 机构号ID
src: src: 3520000052
## 代理商编号 ## 代理商编号
agentNoV2: agentNoV2: 801521000002UUS
## 进件私钥v2 ## 进件私钥v2
priKeyV2: priKeyV2: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT/PW5hpPAtgKXd9BvhtpfXhzbK6U9UURKhBgFIkQ+oIJQNfbB/F2jdVK9ke3IYi0/TXHMnY63x43qxciLeAOt+LxdhHn6ZImV4MsRkPjF/zLsaJrPOPWbc2m4T1yvinfzkrxhZaWn1dj4+IdyO3tA/juXCjydQqKR2kSqJlo6gdT9N3RIJ+ETda2UUahZyYXBfjyxFQEaOXthm6krZH1zBHs510Og6bQJQHjMmTskkslWvj38qPDfsuC4tq0Hgbu3LcyiX9vGYzQoGOaGhDEiNPObdDlOuh5gn0slRmg+PxAgMBAAECggEAJRvrCBRki50C5HD6Kmtp/M/vVYwYYhcAum2ViO9qk2ILNJ+CYpsCvASEVvzuBtm2L8xq3Vw2C1AubXGC8KSsa33o/EG4qIM1REnP+a8VKbr6dlOIuoMFyNMI+QpDX7mAafnxmRqgXuGAJDmupYFsFaU/mRHRxhKoZDsd2FA5HEbuDI9SJp86keE72NHsxyqfDIZyIk3Z8k7HZY2wg3FW+YaOKQBHVA9JYvhfZMeaQ1ymrA0IAqWpUqjLkqAa2Qa6xUsbj+QhvrkBCE48i8duamXKDSOaLfkqTb8IyxOM9eTsFwLVGEuZQrkhrLxdrg5aBPvu81pIJME6SgrquJJ84QKBgQD/MAFLiWU0wDJ4Hqf2jKa5vgrBmCqOsANBc079s8gDXM4zbsG/TjMHPDmiOGZxtDG8937twjYzRv9XpnqyITMArlhWWMhTOJ3r3CTVr/OISgeZKPGjfp+MbeDsOK4OggTVKZmNLx3nKiuc94IlTDOcz5qArVBTxKadWg56f1UGswKBgQD28G+haXxneMhRZozoHPjcfdgtDoZJaVa8XTXw8nvQala5ioU9yesbIAdtD/VR/eWwuMtO4rK1IFxtNZQ/MtSXwqlnKLf1xDJQPuj3kY5mC7H7sn4HGeFDP50VFnPgIaUnB5VwgyYFm8l19AW06OBjlnoBv0dnl1s5u+DgpzQcywKBgQCfeWSVzBtPR/1CTAYzcdqPoVAfg/S0jxK5yFHJAp0wXMMQKVszLq99CgoKcqyyyiV7LkBIXWJ50RipsgRjZZP2DP5vl7Q5LdyjFUR/tiG/PmRZNtkrj2ot3Ez/0rwTnPVgMUsgjB1n5Va0FYljvadTi/nGCIl2kCJ/m1QJAaIlOQKBgGV8TwRxS9ViiEEb+lDyhzxm488wpvPIvQLQ8/hAT65J5bZ/PV81etA9C5BA/Ltjs2A7siKLfJJ/6DxhxrlqdICiWeixjVkN9vePw0LrqTA7IjylELJuamuu2yntflXgvfUaYspIu/mWGufFEAtXodCL6TyKlhf21mEV28e4L+ydAoGAItgCUGbot95QNT1z+9QFN+18AvMnWCNvqanrC4qsk0phjYX9FFwfSCqWVeVm0Q0+2tUrRNcUEcbmlbQToBZq/hSu0nPcZIPvnNxLfW/NY7eVCXIcI5eNPjUIgbRCVMc6w5ukYMxPidOBuRXIt1iq2+iV20/FMbA58sY7AgOiaMw=
## 进件公钥v2 ## 进件公钥v2
pubKeyV2: pubKeyV2: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7SPkmIUf2auwkgbVchMyfeCDgICuA1GKrSwRbDI24UMVhzDgcIxCUmFG5/DfcPJz0d3oV9Ggkd4/7NmteRvmNnOOGNOnmR6AGEKafDpL1mAdpndmpkAZ0f6OVo3Py5JDg2wt8d+u3dF0AFWwd2rrrqscWvxJVB55DnuZfXl2CyQIDAQAB
## 加密密钥 ## 加密密钥
encryptPwd: encryptPwd: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT
oldPayV2: oldPayV2:
## 交易发起方编号 收银呗(武汉)科技有限公司 ## 交易发起方编号 收银呗(武汉)科技有限公司
srcMerchantNo: srcMerchantNo:

View File

@ -9,7 +9,7 @@
</insert> </insert>
<insert id="saveDeviceMerchantBuyDetailBatch"> <insert id="saveDeviceMerchantBuyDetailBatch">
insert into tb_pluss_device_merchant_buy_detail(orderNo,soleCode) VALUES insert into tb_pluss_device_merchant_buy_detail(orderNo,soleCode) VALUES
<foreach collection="list" item="item" index="index" separator=","> <foreach collection="list" item="item" index="index" separator=",">
(#{orderNo},#{soleCode} ) (#{orderNo},#{soleCode} )
</foreach> </foreach>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -11,7 +11,7 @@
<meta name="keywords" content=""> <meta name="keywords" content="">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>武汉融商创银科技有限公司</title> <title>陕西超掌柜科技有限公司</title>
<script type="text/javascript"> <script type="text/javascript">
require("js/jquery.min.js"); require("js/jquery.min.js");
@ -36,7 +36,7 @@
<div class="layui-layout layui-layout-admin"> <div class="layui-layout layui-layout-admin">
<div class="layui-header"> <div class="layui-header">
<div class="layui-logo"> <div class="layui-logo">
收银呗管理系统 快银系统
</div> </div>
<ul class="layui-nav layui-layout-right"> <ul class="layui-nav layui-layout-right">
<li style="float: left"> <li style="float: left">

View File

@ -12,7 +12,7 @@
<meta name="keywords" content=""> <meta name="keywords" content="">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>武汉融商创银科技有限公司</title> <title>陕西超掌柜科技有限公司</title>
<script type="text/javascript"> <script type="text/javascript">
require("js/main/main.js"); require("js/main/main.js");
@ -119,7 +119,7 @@
<div class="layui-side layui-side-menu"> <div class="layui-side layui-side-menu">
<div class="layui-side-scroll"> <div class="layui-side-scroll">
<div class="layui-logo" lay-href="home/console.html"> <div class="layui-logo" lay-href="home/console.html">
<span>收银呗管理平台</span> <span>快银管理平台</span>
</div> </div>
<div class="layui-side layui-bg-black"> <div class="layui-side layui-bg-black">

View File

@ -49,7 +49,7 @@
</div> </div>
<!-- BEGIN LOGO --> <!-- BEGIN LOGO -->
<div class="logo"> <div class="logo">
<div>收银呗管理平台</div> <div>快银平台</div>
</div> </div>
<!-- END LOGO --> <!-- END LOGO -->
<!-- BEGIN LOGIN --> <!-- BEGIN LOGIN -->
@ -93,7 +93,7 @@
<!-- END LOGIN --> <!-- END LOGIN -->
<div class="copyright"> 2019-2020 © <div class="copyright"> 2019-2020 ©
<a href="javascript:void(0);" target="_blank" class="dlblock"> 武汉融商创银科技有限公司</a> - All Rights Reserved. <a href="javascript:void(0);" target="_blank" class="dlblock"> 陕西超掌柜科技有限公司</a> - All Rights Reserved.
</div> </div>
<script> <script>

View File

@ -98,7 +98,7 @@
<!-- END LOGIN --> <!-- END LOGIN -->
<div class="copyright"> 2019-2020 © <div class="copyright"> 2019-2020 ©
<a href="javascript:void(0);" target="_blank" class="dlblock"> 武汉融商创银科技有限公司</a> - All Rights Reserved. </div> <a href="javascript:void(0);" target="_blank" class="dlblock"> 陕西超掌柜科技有限公司</a> - All Rights Reserved. </div>
<div class="swiper-container" style="position:fixed;top:0;left:0;right:0;bottom:0;z-index:-1;"> <div class="swiper-container" style="position:fixed;top:0;left:0;right:0;bottom:0;z-index:-1;">
<div class="swiper-wrapper"> <div class="swiper-wrapper">

View File

@ -98,7 +98,7 @@
<!-- END LOGIN --> <!-- END LOGIN -->
<div class="copyright"> 2019-2020 © <div class="copyright"> 2019-2020 ©
<a href="javascript:void(0);" target="_blank" class="dlblock"> 武汉融商创银科技有限公司</a> - All Rights Reserved. </div> <a href="javascript:void(0);" target="_blank" class="dlblock"> 陕西超掌柜科技有限公司</a> - All Rights Reserved. </div>
<div class="swiper-container" style="position:fixed;top:0;left:0;right:0;bottom:0;z-index:-1;"> <div class="swiper-container" style="position:fixed;top:0;left:0;right:0;bottom:0;z-index:-1;">
<div class="swiper-wrapper"> <div class="swiper-wrapper">

View File

@ -56,6 +56,26 @@ public class MerChantOrderDTO {
* @date: 2021/12/22 16:01 * @date: 2021/12/22 16:01
*/ */
private String deviceNo; private String deviceNo;
/**
* timestamp时间戳pos机
*/
private String timestamp;
/**
* 唯一识别码(pos机)
*/
private String appId;
/**
* 签名pos
*/
private String token;
/**
* 请求标识用于唯一标识当前请求(pos,uuid)
*/
private String requestId;
/**
* 设备号
*/
private String sn;
/** /**
* @description: * @description:

View File

@ -285,12 +285,16 @@ public class AliyunServiceImpl implements AliyunService {
if ("403".equals(verifyBankElementResponse.getBody().getCode())){ if ("403".equals(verifyBankElementResponse.getBody().getCode())){
throw new MsgException("24小时内重复查询相同信息超过10次已锁定请在12小时后重试。"); throw new MsgException("24小时内重复查询相同信息超过10次已锁定请在12小时后重试。");
} }
if ("428".equals(verifyBankElementResponse.getBody().getCode())){
throw new MsgException("请正确输入相关信息");
}
if (!"200".equals(verifyBankElementResponse.getBody().getResultObject().getSubCode())) { if (!"200".equals(verifyBankElementResponse.getBody().getResultObject().getSubCode())) {
if ("403".equals(verifyBankElementResponse.getBody().getResultObject().getSubCode())) { if ("403".equals(verifyBankElementResponse.getBody().getResultObject().getSubCode())) {
throw new MsgException("银行卡认证接口已欠费,请联系平台"); throw new MsgException("银行卡认证接口已欠费,请联系平台");
}else if ("201".equals(verifyBankElementResponse.getBody().getResultObject().getSubCode())){ }else if ("201".equals(verifyBankElementResponse.getBody().getResultObject().getSubCode())){
throw new MsgException("用户的身份信息不匹配"); throw new MsgException("用户的身份信息不匹配");
} else { }else {
throw new MsgException("银行卡认证失败"); throw new MsgException("银行卡认证失败");
} }
} }

View File

@ -99,4 +99,6 @@ public interface DeviceStockService extends IService<DeviceStock> {
* @param dto * @param dto
*/ */
void bindDevcieV2(DeviceStockDTO dto); void bindDevcieV2(DeviceStockDTO dto);
DeviceStock checkBind(String sn);
} }

View File

@ -391,6 +391,14 @@ public class DeviceStockServiceImpl extends ServiceImpl<DeviceStockMapper, Devic
deviceOperateInfoService.save(operateInfo); deviceOperateInfoService.save(operateInfo);
} }
@Override
public DeviceStock checkBind(String sn) {
MsgException.checkBlank(sn, "缺失设备SN号");
DeviceStock deviceBySnNo = baseMapper.getDeviceBySnNo(sn);
MsgException.checkBlank(deviceBySnNo.getActMercId(),"未绑定扫码pos");
return deviceBySnNo;
}
@Override @Override
public <E extends IPage<DeviceStock>> E page(E page, Wrapper<DeviceStock> queryWrapper) { public <E extends IPage<DeviceStock>> E page(E page, Wrapper<DeviceStock> queryWrapper) {
DeviceStock deviceStock = queryWrapper.getEntity(); DeviceStock deviceStock = queryWrapper.getEntity();

View File

@ -46,6 +46,12 @@ public interface MerchantBaseInfoService extends IService<MerchantBaseInfo> {
MerchantBaseInfo queryMerchantBaseInfo(MerchantBaseInfo merchantBaseInfo); MerchantBaseInfo queryMerchantBaseInfo(MerchantBaseInfo merchantBaseInfo);
/**根据id查找
* @param id
* @return
*/
MerchantBaseInfo getMerchantBaseInfoById(Integer id);
List<MerchantBaseInfo> queryMerchantBaseInfoList(MerchantBaseInfo merchantBaseInfo); List<MerchantBaseInfo> queryMerchantBaseInfoList(MerchantBaseInfo merchantBaseInfo);
void saveMerchantBaseInfo(MerchantBaseInfo merchantBaseInfo); void saveMerchantBaseInfo(MerchantBaseInfo merchantBaseInfo);

View File

@ -438,6 +438,12 @@ public class MerchantBaseInfoServiceImpl extends ServiceImpl<MerchantBaseInfoMap
return baseMapper.queryMerchantBaseInfo(merchantBaseInfo); return baseMapper.queryMerchantBaseInfo(merchantBaseInfo);
} }
@Override
public MerchantBaseInfo getMerchantBaseInfoById(Integer id) {
LambdaQueryWrapper<MerchantBaseInfo> qWrapper = new LambdaQueryWrapper<MerchantBaseInfo>().eq(MerchantBaseInfo::getId, id);
return baseMapper.selectOne(qWrapper);
}
@Override @Override
public List<MerchantBaseInfo> queryMerchantBaseInfoList(MerchantBaseInfo merchantBaseInfo) { public List<MerchantBaseInfo> queryMerchantBaseInfoList(MerchantBaseInfo merchantBaseInfo) {
return baseMapper.queryMerchantBaseInfoList(merchantBaseInfo); return baseMapper.queryMerchantBaseInfoList(merchantBaseInfo);

View File

@ -83,7 +83,7 @@ public class MerchantStaffConnServiceImpl extends ServiceImpl<MerchantStaffConnM
if (loginName.contains("@")) { if (loginName.contains("@")) {
throw new MsgException("员工账号请不要带@"); throw new MsgException("员工账号请不要带@");
} }
staffDTO.setLoginName(loginName + "@chaozg"); staffDTO.setLoginName(loginName + "@kuaiyin");
UserInfo existUserInfo = new UserInfo().setLoginName(staffDTO.getLoginName()); UserInfo existUserInfo = new UserInfo().setLoginName(staffDTO.getLoginName());
existUserInfo = userInfoService.getOne(new QueryWrapper<>(existUserInfo)); existUserInfo = userInfoService.getOne(new QueryWrapper<>(existUserInfo));
if (existUserInfo != null) { if (existUserInfo != null) {

View File

@ -7,6 +7,7 @@ import cn.pluss.platform.api.Result;
import cn.pluss.platform.api.ResultGenerator; import cn.pluss.platform.api.ResultGenerator;
import cn.pluss.platform.channel.BaseMerchantAuditService; import cn.pluss.platform.channel.BaseMerchantAuditService;
import cn.pluss.platform.channel.MerchantAuditService; import cn.pluss.platform.channel.MerchantAuditService;
import cn.pluss.platform.channel.ys.YSAuditServiceV3;
import cn.pluss.platform.common.CommonRemarkService; import cn.pluss.platform.common.CommonRemarkService;
import cn.pluss.platform.common.RiskBlacklistService; import cn.pluss.platform.common.RiskBlacklistService;
import cn.pluss.platform.converter.Converter; import cn.pluss.platform.converter.Converter;
@ -172,6 +173,8 @@ public class UserAppServiceImpl extends ServiceImpl<UserAppMapper, UserApp> impl
@Autowired @Autowired
private UserRoleMapper userRoleMapper; private UserRoleMapper userRoleMapper;
@Autowired
private YSAuditServiceV3 ysAuditServiceV3;
@Override @Override
@ -794,7 +797,8 @@ public class UserAppServiceImpl extends ServiceImpl<UserAppMapper, UserApp> impl
break; break;
case "4": case "4":
// 银盛 // 银盛
ysAuditServiceV2.merchantAudit(userId, false); //ysAuditServiceV2.merchantAudit(userId, false);
ysAuditServiceV3.merchantAuditV3(userId, false);
break; break;
default: default:
MsgException.throwException("未知的进件通道"); MsgException.throwException("未知的进件通道");

View File

@ -253,7 +253,7 @@ public class YsAuditServiceImpl extends AbstractYsResultService {
param.put(YsConstant.CONTACTS_NAME, account.getIdcard().getCertName()); param.put(YsConstant.CONTACTS_NAME, account.getIdcard().getCertName());
UserInfo ui = uiService.getById(userId); UserInfo ui = uiService.getById(userId);
param.put(YsConstant.CONTACTS_PHONE, ui.getPhone().substring(0, 11)); param.put(YsConstant.CONTACTS_PHONE, ui.getPhone().substring(0, 11));
param.put(YsConstant.CONTACTS_EMAIL, "18062761507@163.com"); param.put(YsConstant.CONTACTS_EMAIL, "chaozhanggui2023@163.com");
param.put(YsConstant.WECHAT_SIGN_RATE, "0.38"); param.put(YsConstant.WECHAT_SIGN_RATE, "0.38");
param.put(YsConstant.WECHAT_SIGN_MIN, "1"); param.put(YsConstant.WECHAT_SIGN_MIN, "1");
param.put(YsConstant.ALIPAY_SIGN_RATE, "0.38"); param.put(YsConstant.ALIPAY_SIGN_RATE, "0.38");
@ -318,7 +318,7 @@ public class YsAuditServiceImpl extends AbstractYsResultService {
} else { } else {
param.put(YsConstant.BALANCE_ACC_TYPE, "11"); param.put(YsConstant.BALANCE_ACC_TYPE, "11");
} }
param.put(YsConstant.EXPANDING_MANAGER, "收银"); param.put(YsConstant.EXPANDING_MANAGER, "快银收银");
// 这里在进件之前再加一次校验 // 这里在进件之前再加一次校验
preCheck(userId); preCheck(userId);

View File

@ -41,7 +41,7 @@ public class YsConfigV3 {
public static final String BIZ_SUCCESS = "0000"; public static final String BIZ_SUCCESS = "0000";
public static final String AUDIT_NOTIFY_URL = "https://www.shouyinbei.net/api/auditCallback/ysV3"; public static final String AUDIT_NOTIFY_URL = "https://ky.sxczgkj.cn/api/auditCallback/ysV3";
public static final String AUDIT_SIGN_NOTIFY_URL = "https://www.shouyinbei.net/api/auditCallback/ysSignV3"; public static final String AUDIT_SIGN_NOTIFY_URL = "https://www.shouyinbei.net/api/auditCallback/ysSignV3";

View File

@ -12,6 +12,9 @@ import java.util.List;
@Getter @Getter
@Setter @Setter
public class CrpInfo { public class CrpInfo {
/**
* 法人证件号
*/
private String crpCertNo; private String crpCertNo;
/** /**
@ -33,11 +36,17 @@ public class CrpInfo {
* 法人国籍,法人国籍(默认中国(249)) * 法人国籍,法人国籍(默认中国(249))
*/ */
private String crpNati; private String crpNati;
/**
* 法人姓名
*/
private String crpNm; private String crpNm;
/**
* 法人手机号
*/
private String crpPhone; private String crpPhone;
/**
* crpAddr 法人地址
*/
private String crpAddr; private String crpAddr;
/** /**

View File

@ -10,15 +10,17 @@ import lombok.Setter;
@Setter @Setter
public class CustInfo { public class CustInfo {
/** /**
* 代理商编号,默认同发起方代理商编号 * 代理商编号,默认同发起方代理商编号不是必填
*/ */
private String agtMercId; private String agtMercId;
/** /**
* 商户名称 * 商户名称必填
*/ */
private String mercName; private String mercName;
/**
* 商户简称,默认为商户名称若商户名称长度超过20,商户简称必传
*/
private String mercShortName; private String mercShortName;
/** /**
@ -40,14 +42,18 @@ public class CustInfo {
* 联系人电话, 默认同法人电话号码 * 联系人电话, 默认同法人电话号码
*/ */
private String contactMan; private String contactMan;
/**
* 客户经理
*/
private String cusMgrNm; private String cusMgrNm;
/** /**
* 是否开通营销,Y开通N不开通,默认不开通 * 是否开通营销,Y开通N不开通,默认不开通
*/ */
private String isOpenMarket; private String isOpenMarket;
/**
* 异步通知地址,银盛通过商户提供的地址下发通知商户可根据异步通知业务参数bizContent中的notifyType确定通知类型具体通知内容场景以及接口要求详见如下
*/
private String notifyUrl; private String notifyUrl;
private String remark; private String remark;

View File

@ -7,6 +7,7 @@ import cn.pluss.platform.jft.JftAuditService;
import cn.pluss.platform.jft.JftBankCardService; import cn.pluss.platform.jft.JftBankCardService;
import cn.pluss.platform.jft.JftMercBaseInfoService; import cn.pluss.platform.jft.JftMercBaseInfoService;
import cn.pluss.platform.jft.JftMerchantRateService; import cn.pluss.platform.jft.JftMerchantRateService;
import cn.pluss.platform.mapper.AccountMapper;
import cn.pluss.platform.mapper.BankCodeYsMapper; import cn.pluss.platform.mapper.BankCodeYsMapper;
import cn.pluss.platform.mapper.JftMercPaymentChannelMapper; import cn.pluss.platform.mapper.JftMercPaymentChannelMapper;
import cn.pluss.platform.mcc.MccInfoSortService; import cn.pluss.platform.mcc.MccInfoSortService;
@ -14,6 +15,7 @@ import cn.pluss.platform.mcc.MccInfoYsService;
import cn.pluss.platform.mcc.MccReflectService; import cn.pluss.platform.mcc.MccReflectService;
import cn.pluss.platform.merchant.AccountService; import cn.pluss.platform.merchant.AccountService;
import cn.pluss.platform.merchant.JftMercPaymentChannelService; import cn.pluss.platform.merchant.JftMercPaymentChannelService;
import cn.pluss.platform.merchant.MerchantBaseInfoService;
import cn.pluss.platform.notice.NoticeService; import cn.pluss.platform.notice.NoticeService;
import cn.pluss.platform.region.RegionReflectService; import cn.pluss.platform.region.RegionReflectService;
import cn.pluss.platform.ryx.RyxConstants; import cn.pluss.platform.ryx.RyxConstants;
@ -34,6 +36,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpEntity; import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
@ -122,6 +125,10 @@ public class YsAuditServiceImpl extends AbstractYsResultService {
@Autowired @Autowired
private TransactionTemplate transactionTemplate; private TransactionTemplate transactionTemplate;
@Autowired @Lazy
private MerchantBaseInfoService mbiService;
@Resource
private AccountMapper accountMapper;
@Override @Override
@ -169,37 +176,83 @@ public class YsAuditServiceImpl extends AbstractYsResultService {
} }
// public void preCheck(String userId) {
// LambdaQueryWrapper<JftMercPaymentChannel> qWrapper2 = Wrappers.lambdaQuery();
// qWrapper2.eq(JftMercPaymentChannel::getUserId, userId);
//
// final JftMercPaymentChannel one = mpcService.getOne(qWrapper2);
// if (one != null) {
// switch (one.getStatus()) {
// case MerchantChannelStatus.AUDIT_STATUS_SUCCESS:
// throw new MsgException("功能已开通,请勿重复操作");
// case MerchantChannelStatus.AUDIT_STATUS_EXAMINING:
// throw new MsgException("功能开通审核中,请耐心等待审核结果");
// case MerchantChannelStatus.AUDIT_STATUS_REJECT:
// mpcService.removeById(one.getId());
// default:
// break;
// }
// }
//
// final IdCard certIdCard = idCardService.getCertIdCard(userId);
// if (certIdCard == null) {
// throw new MsgException("实名身份证不能空");
// }
//
// UserInfo ui = uiService.getById(userId);
// if (StringUtils.isEmpty(ui.getChannelCode())) {
// // 开放接口注册的用户不受限制
// final Integer count = jpcMapper.selectCountByCertNo(certIdCard.getCertNo());
//
// if (count > 1) {
// throw new MsgException("同一实名信息只能开通一次该功能");
// }
// }
// }
public void preCheck(String userId) { public void preCheck(String userId) {
LambdaQueryWrapper<JftMercPaymentChannel> qWrapper2 = Wrappers.lambdaQuery(); MerchantBaseInfo mbi = mbiService.getMerchantBaseInfoByUserId(userId);
qWrapper2.eq(JftMercPaymentChannel::getUserId, userId); LambdaQueryWrapper<MerchantChannelStatus> qWrapper = Wrappers.lambdaQuery();
qWrapper.eq(MerchantChannelStatus::getMerchantCode, mbi.getMerchantCode());
qWrapper.eq(MerchantChannelStatus::getVirChannelFlag, Account.CHANNEL_TYPE_D1);
MerchantChannelStatus existD1 = mcsService.getOne(qWrapper);
final JftMercPaymentChannel one = mpcService.getOne(qWrapper2); if (existD1 != null && !MerchantChannelStatus.AUDIT_STATUS_SUCCESS.equals(existD1.getStatus()) && !MerchantChannelStatus.AUDIT_STATUS_SIGNED.equals(existD1.getStatus()) && !MerchantChannelStatus.AUDIT_STATUS_WAITING_SIGN.equals(existD1.getStatus())) {
if (one != null) { throw new MsgException("当前D1通道存在未进件完成的的进件数据不允许进件银盛");
switch (one.getStatus()) { }
case MerchantChannelStatus.AUDIT_STATUS_SUCCESS:
throw new MsgException("功能已开通,请勿重复操作"); if ("1".equals(mbi.getMerchantType())) {
case MerchantChannelStatus.AUDIT_STATUS_EXAMINING: int ysCount = accountMapper.selectYSAuditSmallCount(mbi.getUserId());
throw new MsgException("功能开通审核中,请耐心等待审核结果"); if (ysCount >= 2) {
case MerchantChannelStatus.AUDIT_STATUS_REJECT: MsgException.throwException("非营业执照商户同一结算人仅可申请两次实时到账");
mpcService.removeById(one.getId());
default:
break;
} }
} }
final IdCard certIdCard = idCardService.getCertIdCard(userId); qWrapper.clear();
if (certIdCard == null) { qWrapper.eq(MerchantChannelStatus::getMerchantCode, mbi.getMerchantCode());
throw new MsgException("实名身份证不能空"); qWrapper.eq(MerchantChannelStatus::getVirChannelFlag, "D0");
MerchantChannelStatus existD0 = mcsService.getOne(qWrapper);
if (existD0 == null) {
qWrapper.clear();
qWrapper.eq(MerchantChannelStatus::getMerchantCode, mbi.getMerchantCode());
qWrapper.isNull(MerchantChannelStatus::getChannel);
existD0 = mcsService.getOne(qWrapper);
} }
UserInfo ui = uiService.getById(userId); if (existD0 != null) {
if (StringUtils.isEmpty(ui.getChannelCode())) { existD0 = mcsService.getByIdLock(existD0.getId());
// 开放接口注册的用户不受限制
final Integer count = jpcMapper.selectCountByCertNo(certIdCard.getCertNo());
if (count > 1) { if (existD0.getStatus().equals(MerchantChannelStatus.AUDIT_STATUS_REJECT)) {
throw new MsgException("同一实名信息只能开通一次该功能"); return;
} }
if (existD0.getStatus().equals(MerchantChannelStatus.AUDIT_STATUS_EXAMINING) && existD0.getThirdStatus().equals(MerchantChannelStatus.AUDIT_THIRD_STATUS_AUDITING)) {
throw new MsgException("当前商户已经在后台审核中");
}
// 此处先将进件状态锁住
existD0.setChannel(4);
mcsService.saveOrUpdate(existD0);
} }
} }

View File

@ -269,7 +269,7 @@
<img src="https://www.shouyinbei.net/resources/images/logo.png"/> <img src="https://www.shouyinbei.net/resources/images/logo.png"/>
</div> </div>
<div class="abl-text"> <div class="abl-text">
绑定您的收银呗账户 绑定您的快银账户
</div> </div>
</div> </div>
<div class="account-binding-form"> <div class="account-binding-form">

View File

@ -154,7 +154,7 @@
<div class="account-logo"> <div class="account-logo">
<img src="https://www.shouyinbei.net/resources/images/logo.png" alt=""> <img src="https://www.shouyinbei.net/resources/images/logo.png" alt="">
</div> </div>
<div class="account-title">收款就用收银呗</div> <div class="account-title">收款就用快银</div>
<div class="account-con-list"> <div class="account-con-list">
<div class="account-list" th:each="user:${list}"> <div class="account-list" th:each="user:${list}">
<div class="account-name" th:text="${user.alias}"></div> <div class="account-name" th:text="${user.alias}"></div>

View File

@ -60,11 +60,11 @@
.pay{ .pay{
color:#ffffff; color:#ffffff;
font-size:120%; font-size:120%;
background-color:#df6051; background-color:#2F87FD;
} }
.pay:active{ .pay:active{
/*background-color: #df6051;*/ /*background-color: #df6051;*/
background-color: rgba(223,96,81,0.7); background-color: #2267c3;
} }
.shouyin{ .shouyin{
text-align: center; text-align: center;
@ -118,13 +118,13 @@
width: 2px; width: 2px;
height: 1.875rem; height: 1.875rem;
margin-top: -6px; margin-top: -6px;
background: #df6051; background: #2F87FD;
vertical-align: middle; vertical-align: middle;
animation: gb 1.3s infinite; animation: gb 1.3s infinite;
} }
.money-input { .money-input {
font-weight: bold; font-weight: bold;
color: #df6051; color:#2F87FD;
} }
@keyframes gb { @keyframes gb {
from { from {
@ -187,7 +187,7 @@
height: 1.8rem; height: 1.8rem;
border-radius: 20px; border-radius: 20px;
border: none; border: none;
background-color: #df6051; background-color: #2F87FD;
color: #fff; color: #fff;
} }
.remark-text{ .remark-text{
@ -244,7 +244,7 @@
</div> </div>
<div class="payinfo" id="payinfo"> <div class="payinfo" id="payinfo">
<div class="shouyin" onclick="showInput()"> <div class="shouyin" onclick="showInput()">
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
</div> </div>
<table cellspacing="0" cellpadding="0" id="table1"> <table cellspacing="0" cellpadding="0" id="table1">
<tr> <tr>

View File

@ -61,9 +61,9 @@
<body style="height: auto;"> <body style="height: auto;">
<div id="app" class=""> <div id="app" class="">
<div id="adminRewardIntro"> <div id="adminRewardIntro">
<p>1.新用户是指首次注册收银呗的用户;</p> <p>1.新用户是指首次注册快银的用户;</p>
<p>2.每日获得的分润次日即可在账户中提现;</p> <p>2.每日获得的分润次日即可在账户中提现;</p>
<p>3.由于不可抗力(包括但不限于服务器意外关机、网络意外中断、收银呗平台受到恶意攻击及磁盘意外损坏)而导致交易数据丢失的情况不计算奖励金额;</p> <p>3.由于不可抗力(包括但不限于服务器意外关机、网络意外中断、快银平台受到恶意攻击及磁盘意外损坏)而导致交易数据丢失的情况不计算奖励金额;</p>
<p>5.活动暂停或取消前发生的交易金额仍按照规则比例计算并结算奖励金,活动暂停或取消后发生的交易金额不再计算奖励金。但如果活动由于监管等原因被强制暂停,奖励金将停止发放。</p> <p>5.活动暂停或取消前发生的交易金额仍按照规则比例计算并结算奖励金,活动暂停或取消后发生的交易金额不再计算奖励金。但如果活动由于监管等原因被强制暂停,奖励金将停止发放。</p>
<p><b>奖励详情</b></p> <p><b>奖励详情</b></p>
<p>1.用户A通过本活动邀请好友B开通收银呗业务B邀请好友C开通收银呗业务等。</p> <p>1.用户A通过本活动邀请好友B开通收银呗业务B邀请好友C开通收银呗业务等。</p>

View File

@ -61,13 +61,13 @@
<body style="height: auto;"> <body style="height: auto;">
<div id="app" class=""> <div id="app" class="">
<div id="adminRules"> <div id="adminRules">
<h2>收银呗用户邀请活动规则</h2> <h2>快银用户邀请活动规则</h2>
<p>一、参与方式</p> <p>一、参与方式</p>
<p>收银呗用户在知悉并确认接受本邀请规则的情况下,自愿参与本活动。</p> <p>快银用户在知悉并确认接受本邀请规则的情况下,自愿参与本活动。</p>
<h3>用户邀请的好友经审核通过开通收银呗业务(“开通”指经收银呗平台合作收单机构复审通过且实现收款功能),该用户即可获得相应的邀请奖励。</h3> <h3>用户邀请的好友经审核通过开通快银业务(“开通”指经快银平台合作收单机构复审通过且实现收款功能),该用户即可获得相应的邀请奖励。</h3>
<p>二、邀请奖励规则</p> <p>二、邀请奖励规则</p>
<p>(一)奖励详情</p> <p>(一)奖励详情</p>
<p>1.用户A通过本活动邀请好友B开通收银呗业务B邀请好友C开通收银呗业务等。 </p> <p>1.用户A通过本活动邀请好友B开通快银业务B邀请好友C开通快银业务等。 </p>
<p>2.净收款交易金额(收款金额-退款金额)。 </p> <p>2.净收款交易金额(收款金额-退款金额)。 </p>
<p>3.A可以通过邀请好友升级</p> <p>3.A可以通过邀请好友升级</p>
<p class="indent">1) V1等级注册即为V1</p> <p class="indent">1) V1等级注册即为V1</p>
@ -84,8 +84,8 @@
<p>3.团队奖励</p> <p>3.团队奖励</p>
<p class="indent">1)A可获得B团队的净收款交易金额的费率差分润</p> <p class="indent">1)A可获得B团队的净收款交易金额的费率差分润</p>
<p>例如:</p> <p>例如:</p>
<p class="indent">1) A邀请${oneLevel}个好友开通收银呗A商户交易费率降至${oneRate}%每交易1万省8元</p> <p class="indent">1) A邀请${oneLevel}个好友开通快银A商户交易费率降至${oneRate}%每交易1万省8元</p>
<p class="indent">2) A邀请${twoLevel}个好友开通收银呗A商户交易费率降至${twoRate}%每交易1万省13元</p> <p class="indent">2) A邀请${twoLevel}个好友开通快银A商户交易费率降至${twoRate}%每交易1万省13元</p>
<p class="indent">3) A=V1B每月净收款交易金额100万元A每月奖励分润为100万*0.06%=600元</p> <p class="indent">3) A=V1B每月净收款交易金额100万元A每月奖励分润为100万*0.06%=600元</p>
<p class="indent">4) A=V2B每月净收款交易金额100万元A每月奖励分润为100万*0.08%=800元</p> <p class="indent">4) A=V2B每月净收款交易金额100万元A每月奖励分润为100万*0.08%=800元</p>
<p class="indent">5) A=V3B每月净收款交易金额100万元A每月奖励分润为100万*0.1%=1000元</p> <p class="indent">5) A=V3B每月净收款交易金额100万元A每月奖励分润为100万*0.1%=1000元</p>
@ -94,21 +94,21 @@
<p>三、活动时间</p> <p>三、活动时间</p>
<p>${actStartDate}-${actEndDate}</p> <p>${actStartDate}-${actEndDate}</p>
<p>四、活动须知</p> <p>四、活动须知</p>
<p>1. 该活动为持续性活动,如用户已在某一期活动中邀请一位及以上好友成功开通收银呗业务,则在后续各期活动中将累计。</p> <p>1. 该活动为持续性活动,如用户已在某一期活动中邀请一位及以上好友成功开通快银业务,则在后续各期活动中将累计。</p>
<p>2. 由于不可抗力(包括但不限于服务器意外关机、网络意外中断、收银呗平台受到恶意攻击及磁盘意外损坏)而导致交易数据丢失的情况不计算奖励金额。</p> <p>2. 由于不可抗力(包括但不限于服务器意外关机、网络意外中断、快银平台受到恶意攻击及磁盘意外损坏)而导致交易数据丢失的情况不计算奖励金额。</p>
<p>3. 因业务发展需要,武汉融商创银科技有限公司有权对奖励金额的计算公式及奖励金额的分润比例进行调整或对影响奖励金额计算的事项进行变动,并将在收银呗平台以公告形式公布,用户应实时关注收银呗平台公告内容。</p> <p>3. 因业务发展需要,陕西超掌柜科技有限公司有权对奖励金额的计算公式及奖励金额的分润比例进行调整或对影响奖励金额计算的事项进行变动,并将在快银平台以公告形式公布,用户应实时关注快银平台公告内容。</p>
<p>五、奖励金额支付</p> <p>五、奖励金额支付</p>
<p>1. 自用省钱完成任务,次日自动修改费率。</p> <p>1. 自用省钱完成任务,次日自动修改费率。</p>
<p>2. 推广赚钱和团队奖励,用户可在账户中直接提现。</p> <p>2. 推广赚钱和团队奖励,用户可在账户中直接提现。</p>
<p>3. 用户知悉并同意上述结算规则,用户知悉武汉融商创银科技有限公司有权调整奖励金额的结算日期、支付方式等结算规则及标准并在收银呗系统上予以公布,若用户继续参与本活动,则视为用户接受新的奖励金额结算规则及标准。新的奖励金额结算规则及标准自公布之日起生效适用。</p> <p>3. 用户知悉并同意上述结算规则,用户知悉陕西超掌柜科技有限公司有权调整奖励金额的结算日期、支付方式等结算规则及标准并在快银系统上予以公布,若用户继续参与本活动,则视为用户接受新的奖励金额结算规则及标准。新的奖励金额结算规则及标准自公布之日起生效适用。</p>
<p>六、其他说明</p> <p>六、其他说明</p>
<p>1. 用户承诺具备参与本活动所需的能力。</p> <p>1. 用户承诺具备参与本活动所需的能力。</p>
<p>2. 用户参与本活动不构成与收银呗平台主体公司形成任何目的的合伙、合资、雇佣或代理关系,用户亦不可冒用前述主体名义从事任何活动,否则用户应就其行为承担一切经济及法律责任。</p> <p>2. 用户参与本活动不构成与快银平台主体公司形成任何目的的合伙、合资、雇佣或代理关系,用户亦不可冒用前述主体名义从事任何活动,否则用户应就其行为承担一切经济及法律责任。</p>
<p>3. 用户承诺其推广行为严格遵守法律法规且不侵犯他人合法权益,如实准确地根据收银呗业务描述进行推荐,否则武汉融商创银科技有限公司将取消用户参与活动及领取奖励的资格,并由用户应自行承担其行为造成的一切后果及责任。</p> <p>3. 用户承诺其推广行为严格遵守法律法规且不侵犯他人合法权益,如实准确地根据快银业务描述进行推荐,否则陕西超掌柜科技有限公司将取消用户参与活动及领取奖励的资格,并由用户应自行承担其行为造成的一切后果及责任。</p>
<p>4. 如用户存在违规作弊行为(包括但不限于恶意套取资金、机器作弊、虚假申请等违反诚实信用原则行为),武汉融商创银科技有限公司有权取消其参与活动和领取奖励的资格,必要时追究其法律责任。</p> <p>4. 如用户存在违规作弊行为(包括但不限于恶意套取资金、机器作弊、虚假申请等违反诚实信用原则行为),陕西超掌柜科技有限公司有权取消其参与活动和领取奖励的资格,必要时追究其法律责任。</p>
<p>5. 本活动自规则公告日正式开展以3个月为周期逐期开展。如遇不可抗力或特定情况包括但不限于自然灾害、政府机关指令、网络攻击等武汉融商创银科技有限公司有权暂停或取消本活动;活动暂停或取消前发生的交易金额仍按照规则比例计算并结算奖励,活动暂停或取消后发生的交易金额不再计算奖励。但如果活动由于监管等原因被强制暂停,奖励将停止发放。</p> <p>5. 本活动自规则公告日正式开展以3个月为周期逐期开展。如遇不可抗力或特定情况包括但不限于自然灾害、政府机关指令、网络攻击等陕西超掌柜科技有限公司有权暂停或取消本活动;活动暂停或取消前发生的交易金额仍按照规则比例计算并结算奖励,活动暂停或取消后发生的交易金额不再计算奖励。但如果活动由于监管等原因被强制暂停,奖励将停止发放。</p>
<p>6. 活动期间,活动规则可能发生调整,以收银呗页面显示的活动规则为准。</p> <p>6. 活动期间,活动规则可能发生调整,以快银页面显示的活动规则为准。</p>
<p>7. 如遇本活动相关的任何问题,可通过收银呗“联系客服”选项或拨打客服电话400-675-2070进行咨询或投诉。本活动与Apple Inc.无关。</p> <p>7. 如遇本活动相关的任何问题,可通过快银“联系客服”选项或拨打客服电话400-675-2070进行咨询或投诉。本活动与Apple Inc.无关。</p>
</div> </div>
</div> </div>
<div class="toast-wrapper" style="display: none;"> <div class="toast-wrapper" style="display: none;">

View File

@ -116,7 +116,7 @@
<div><span style="color: #FD7564"> >>> </span>1.积分是什么<span style="color: #FD7564"> <<< </span></div> <div><span style="color: #FD7564"> >>> </span>1.积分是什么<span style="color: #FD7564"> <<< </span></div>
</div> </div>
<div class="desc"> <div class="desc">
积分是商户参与收银呗活动所获得的奖励,可以兑换商品或参与其他活动。 积分是商户参与快银活动所获得的奖励,可以兑换商品或参与其他活动。
订单交易所获得的积分,在交易订单满一个月后方可使用,防止违规获取积分(如恶意退款、套现、虚假订单、刷单等) 订单交易所获得的积分,在交易订单满一个月后方可使用,防止违规获取积分(如恶意退款、套现、虚假订单、刷单等)
违规商户扣除所有奖励,永久关闭积分活动权限。 违规商户扣除所有奖励,永久关闭积分活动权限。
</div> </div>
@ -131,7 +131,7 @@
兑换商品 兑换商品
</div> </div>
<div style="margin-top: .122rem;line-height: 0.6rem;"> <div style="margin-top: .122rem;line-height: 0.6rem;">
积分可以在<span style="color: orangered">"商户活动-积分&lt;兑换商品&gt;</span>页页面进行商品兑换,兑换商品后,将会扣除等额积分,详细兑换规则可以联系收银呗客服。 积分可以在<span style="color: orangered">"商户活动-积分&lt;兑换商品&gt;</span>页页面进行商品兑换,兑换商品后,将会扣除等额积分,详细兑换规则可以联系快银客服。
</div> </div>
</div> </div>
</div> </div>