xiongzhu il y a 4 ans
Parent
commit
5b91aefa9b

+ 1 - 1
src/main/java/com/izouma/nineth/service/AdapayService.java

@@ -79,7 +79,7 @@ public class AdapayService {
         return JSON.parseObject(json, Balance.class);
     }
 
-    public void checkSuccess(Map<String, Object> map) {
+    public static void checkSuccess(Map<String, Object> map) {
         if (!"succeeded".equals(MapUtils.getString(map, "status"))) {
             String errMsg = MapUtils.getString(map, "error_msg");
             String errCode = MapUtils.getString(map, "error_code");

+ 12 - 2
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -31,6 +31,7 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.EncoderException;
 import org.apache.commons.codec.net.URLCodec;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.event.EventListener;
 import org.springframework.core.env.Environment;
@@ -245,6 +246,11 @@ public class OrderService {
     }
 
     public Object payAdapay(Long id, String payChannel, String openId) throws BaseAdaPayException {
+        List<String> aliChannels = Arrays.asList("alipay", "alipay_qr", "alipay_wap");
+        List<String> wxChannels = Arrays.asList("wx_pub", "wx_lite");
+        if (!aliChannels.contains(payChannel) && !wxChannels.contains(payChannel)) {
+            throw new BusinessException("不支持此渠道");
+        }
         Order order = orderRepo.findByIdAndDelFalse(id).orElseThrow(new BusinessException("订单不存在"));
         Collection collection = collectionRepo.findById(order.getCollectionId())
                 .orElseThrow(new BusinessException("藏品不存在"));
@@ -288,7 +294,7 @@ public class OrderService {
             throw new BusinessException("分账出错");
         }
 
-        if ("wx_pub".equals(payChannel) || "wx_lite".equals(payChannel)) {
+        if (wxChannels.contains(payChannel)) {
             if (StringUtils.isBlank(openId)) {
                 throw new BusinessException("缺少openId");
             }
@@ -302,11 +308,15 @@ public class OrderService {
         }
 
         Map<String, Object> response = Payment.create(paymentParams);
+        AdapayService.checkSuccess(response);
+        if (aliChannels.contains(payChannel)) {
+            return MapUtils.getMap(response, "expend");
+        }
         return response;
     }
 
     public static BigDecimal divMoney(BigDecimal totalAmount, BigDecimal restAmount, List<Map<String, Object>> divMembers,
-                                String memberId, int ratio, boolean feeFlag) {
+                                      String memberId, int ratio, boolean feeFlag) {
         if (ratio == -1 || (ratio > 0 && ratio < 100)) {
             BigDecimal divAmount = ratio == -1 ? restAmount :
                     totalAmount.multiply(BigDecimal.valueOf(ratio))

+ 20 - 3
src/main/java/com/izouma/nineth/service/UserService.java

@@ -8,20 +8,20 @@ import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.Follow;
 import com.izouma.nineth.domain.IdentityAuth;
 import com.izouma.nineth.domain.User;
-import com.izouma.nineth.dto.PageQuery;
-import com.izouma.nineth.dto.UserDTO;
-import com.izouma.nineth.dto.UserRegister;
+import com.izouma.nineth.dto.*;
 import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.enums.AuthorityName;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.FollowRepo;
 import com.izouma.nineth.repo.IdentityAuthRepo;
+import com.izouma.nineth.repo.UserBankCardRepo;
 import com.izouma.nineth.repo.UserRepo;
 import com.izouma.nineth.security.Authority;
 import com.izouma.nineth.security.JwtTokenUtil;
 import com.izouma.nineth.security.JwtUserFactory;
 import com.izouma.nineth.service.sms.SmsService;
 import com.izouma.nineth.service.storage.StorageService;
+import com.izouma.nineth.utils.BankUtils;
 import com.izouma.nineth.utils.JpaUtils;
 import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.SecurityUtils;
@@ -63,6 +63,7 @@ public class UserService {
     private SysConfigService  sysConfigService;
     private CollectionService collectionService;
     private AdapayService     adapayService;
+    private UserBankCardRepo  userBankCardRepo;
 
     @CacheEvict(value = "user", key = "#user.username")
     public User update(User user) {
@@ -412,6 +413,13 @@ public class UserService {
         if (identityAuth.isOrg()) {
             //throw new BusinessException("企业认证用户请绑定对公账户");
         }
+        if (!StringUtils.isBlank(user.getSettleAccountId())) {
+            throw new BusinessException("此账号已绑定");
+        }
+        BankValidate bankValidate = BankUtils.validate(bankNo);
+        if (!bankValidate.isValidated()) {
+            throw new BusinessException("暂不支持此卡");
+        }
         if (StringUtils.isEmpty(user.getMemberId())) {
             user.setMemberId(adapayService.createMember(userId, user.getPhone(), identityAuth.getRealName(),
                     identityAuth.getIdNo()));
@@ -422,5 +430,14 @@ public class UserService {
                 identityAuth.getIdNo(), phone, bankNo);
         user.setSettleAccountId(accountId);
         userRepo.save(user);
+
+        userBankCardRepo.save(UserBankCard.builder()
+                .bank(bankValidate.getBank())
+                .bankName(bankValidate.getBankName())
+                .bankNo(bankNo)
+                .cardType(bankValidate.getCardType())
+                .cardTypeDesc(bankValidate.getCardTypeDesc())
+                .userId(userId)
+                .build());
     }
 }

+ 15 - 3
src/main/java/com/izouma/nineth/web/OrderPayController.java

@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
 import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.exception.WxPayException;
+import com.huifu.adapay.core.exception.BaseAdaPayException;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.service.AssetService;
 import com.izouma.nineth.service.GiftOrderService;
 import com.izouma.nineth.service.OrderService;
@@ -18,6 +20,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Arrays;
 import java.util.regex.Pattern;
 
 @Controller
@@ -82,6 +85,12 @@ public class OrderPayController {
         return "PayOrderPC";
     }
 
+    @RequestMapping(value = "/gift/weixin")
+    @ResponseBody
+    public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException {
+        return giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
+    }
+
     public void detectUA(String ua, Model model) {
         boolean weixin = Pattern.matches(".*(micromessenger).*", ua.toLowerCase());
         boolean ios = Pattern.matches(".*(ipad|iphone).*", ua.toLowerCase());
@@ -91,9 +100,12 @@ public class OrderPayController {
         model.addAttribute("android", android);
     }
 
-    @RequestMapping(value = "/gift/weixin")
+    @RequestMapping(value = "/adapay/alipay", method = RequestMethod.GET)
     @ResponseBody
-    public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException {
-        return giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
+    public Object payOrderAdapayAlipay(Long id, String channel) throws BaseAdaPayException {
+        if (!Arrays.asList("alipay", "alipay_qr", "alipay_wap").contains(channel)) {
+            throw new BusinessException("不支持此渠道");
+        }
+        return orderService.payAdapay(id, channel, null);
     }
 }

+ 1 - 1
src/test/java/com/izouma/nineth/service/AdapayServiceTest.java

@@ -34,7 +34,7 @@ public class AdapayServiceTest extends ApplicationTests {
 
         paymentParams.put("app_id", "app_f8760acc-f4d8-46f6-8f70-d80e36517075");
         paymentParams.put("order_no", "jsdk_payment" + System.currentTimeMillis());
-        paymentParams.put("pay_channel", "alipay_qr");
+        paymentParams.put("pay_channel", "wx_pub");
         paymentParams.put("pay_amt", "0.10");
         paymentParams.put("goods_title", "your goods title");
         paymentParams.put("goods_desc", "your goods desc");