Browse Source

调整平安接口

yujia 8 years ago
parent
commit
2c37c123e0

+ 56 - 12
src/main/java/com/uas/platform/b2c/fa/payment/controller/PingAnController.java → src/main/java/com/uas/platform/b2c/fa/payment/controller/BankReceiptsController.java

@@ -2,8 +2,9 @@ package com.uas.platform.b2c.fa.payment.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
-import com.uas.platform.b2c.fa.payment.facade.PingAnFacade;
+import com.uas.platform.b2c.fa.payment.service.BankReceiptsService;
 import com.uas.platform.core.logging.BufferedLoggerManager;
+import org.apache.http.HttpStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -11,23 +12,24 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
- * 平安接口的控制器
+ * 银行收单接口
  *
  * @author yuj 2017-12-20 18:05
  */
 @RestController
-@RequestMapping(value = "/pingAn")
-public class PingAnController {
+@RequestMapping(value = "/bankReceipts")
+public class BankReceiptsController {
 
     private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
-    private final PingAnFacade pingAnFacade;
+    private final BankReceiptsService bankReceiptsService;
 
     @Autowired
-    public PingAnController(PingAnFacade pingAnFacade) {
-        this.pingAnFacade = pingAnFacade;
+    public BankReceiptsController(BankReceiptsService bankReceiptsService) {
+        this.bankReceiptsService = bankReceiptsService;
     }
 
     /**
@@ -38,7 +40,7 @@ public class PingAnController {
      */
     @RequestMapping(value = "/unionPay/pay/bindCard", method = RequestMethod.GET)
     public String bindCard(HttpServletRequest request, Boolean isPersonal) {
-        String str = pingAnFacade.bindCard(request, isPersonal);
+        String str = bankReceiptsService.bindCard(request, isPersonal);
         logger.log("平安支付控制器", "支付绑卡", "支付时的绑卡");
         return str;
     }
@@ -52,7 +54,7 @@ public class PingAnController {
      */
     @RequestMapping(value = "/unionPay/bindCard/query", method = RequestMethod.GET)
     public String queryBindCard(Boolean isPersonal) {
-        String resultStr = pingAnFacade.queryBindCard(isPersonal);
+        String resultStr = bankReceiptsService.queryBindCard(isPersonal);
         logger.log("平安支付控制器", "跨行支付绑卡", "查询绑卡信息");
         return resultStr;
     }
@@ -69,7 +71,7 @@ public class PingAnController {
      */
     @RequestMapping(value = "/unionPay/sms", method = RequestMethod.POST)
     public String khPaySMS(Boolean isPersonal, @RequestBody JSONObject json) {
-        String khPaySMS = pingAnFacade.khPaySMS(json, isPersonal);
+        String khPaySMS = bankReceiptsService.khPaySMS(json, isPersonal);
         logger.log("平安支付控制器", "跨行支付绑卡", "快捷支付发送短信");
         return json.toString();
     }
@@ -92,8 +94,50 @@ public class PingAnController {
      */
     @RequestMapping(value = "/unionPay/pay", method = RequestMethod.POST)
     public String khPay(Boolean isPersonal, @RequestBody JSONObject json) {
-        pingAnFacade.khPay(json, isPersonal);
+        String pay = bankReceiptsService.khPay(json, isPersonal);
         logger.log("平安支付控制器", "跨行支付绑卡", "快捷支付支付接口");
-        return null;
+        return pay;
+    }
+
+    /**
+     * 网关支付接口
+     *
+     * @param object
+     * @param isPersonal  是否是个人
+     * @return
+     */
+    @RequestMapping(value = "/EBank/pay", method = RequestMethod.POST)
+    public String eBankPay(Boolean isPersonal, @RequestBody JSONObject object) {
+        return bankReceiptsService.eBankPay(object, isPersonal);
+    }
+
+
+    @RequestMapping(value = "/test/eBank", method = RequestMethod.POST)
+    public HttpServletResponse testPay(HttpServletRequest request, HttpServletResponse response) {
+        response.setStatus(HttpStatus.SC_OK);
+        return response;
+    }
+
+
+    /**
+     * 微信预支付的接口
+     *
+     * @param json  传入的支付信息
+     * @return String
+     */
+    @RequestMapping(value = "/weChat/prePay", method = RequestMethod.POST)
+    public String weChatPrePay(@RequestBody JSONObject json) {
+        return bankReceiptsService.weChatPrePay(json);
+    }
+
+    /**
+     *
+     * 微信支付的接口
+     * @param json  传入的数据
+     * @return String
+     */
+    @RequestMapping(value = "/weChat/pay", method = RequestMethod.POST)
+    public String weChatPay(@RequestBody JSONObject json) {
+        return bankReceiptsService.weChatPay(json);
     }
 }

+ 57 - 0
src/main/java/com/uas/platform/b2c/fa/payment/controller/PingAnAccountController.java

@@ -0,0 +1,57 @@
+package com.uas.platform.b2c.fa.payment.controller;
+
+import com.uas.platform.b2c.fa.payment.service.PingAnAccountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 平安账户的接口
+ *
+ * @author yuj 2018-01-06 22:07
+ */
+@RestController
+@RequestMapping(value = "/PingAn")
+public class PingAnAccountController {
+
+    private final PingAnAccountService pingAnAccountService;
+
+    @Autowired
+    public PingAnAccountController(PingAnAccountService pingAnAccountService) {
+        this.pingAnAccountService = pingAnAccountService;
+    }
+
+    /**
+     * 开户功能
+     *
+     * @param isPersonal 是否是个人
+     * @return
+     */
+    @RequestMapping(value = "/open", method = RequestMethod.POST)
+    public String openAccount(Boolean isPersonal) {
+        return pingAnAccountService.openAccount(isPersonal);
+    }
+
+    /**
+     * 获取资金汇总账户的信息
+     *
+     * @return
+     */
+    @RequestMapping(value = "/base/account")
+    public String getBaseAccountInfo() {
+        return pingAnAccountService.getBaseAccountInfo();
+    }
+
+    /**
+     * 获取子账户信息
+     *
+     * @return
+     */
+    @RequestMapping(value = "/subAccountInfo", method = RequestMethod.GET)
+    public String getSubAccountInfo(Boolean isPersonal)  {
+        pingAnAccountService.getSubAccountInfo(isPersonal);
+        return "ok";
+    }
+
+}

+ 76 - 0
src/main/java/com/uas/platform/b2c/fa/payment/service/BankReceiptsService.java

@@ -0,0 +1,76 @@
+package com.uas.platform.b2c.fa.payment.service;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 平安的facade层
+ *
+ * Created by yujia on 2017/12/20.
+ */
+public interface BankReceiptsService {
+
+    /**
+     * 绑卡动作
+     *
+     * @param request 请求
+     * @param isPersonal 是否是个人账户
+     */
+    String bindCard(HttpServletRequest request, Boolean isPersonal);
+
+    /**
+     * 查询跨行绑卡的信息
+     *
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    String queryBindCard(Boolean isPersonal);
+
+    /**
+     * 银联快捷支付 获取短信验证码的信息
+     *
+     * @param json 传入的支付信息
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    String khPaySMS(JSONObject json, Boolean isPersonal);
+
+    /**
+     * 传入的数据
+     *
+     * @param json json 交易的信息
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    String khPay(JSONObject json, Boolean isPersonal);
+
+
+    /**
+     * 网关支付接口
+     *
+     * @param json 传入的数据
+     * @param isPersonal 是否是个人
+     * @return
+     */
+    String eBankPay(JSONObject json, Boolean isPersonal);
+
+
+    /**
+     * 微信预支付的接口
+     *
+     * @param json  传入的支付信息
+     * @return String
+     */
+    String weChatPrePay(JSONObject json);
+
+
+    /**
+     *
+     * 微信支付的接口
+     * @param json  传入的数据
+     * @return String
+     */
+    String weChatPay(@RequestBody JSONObject json);
+}

+ 31 - 0
src/main/java/com/uas/platform/b2c/fa/payment/service/PingAnAccountService.java

@@ -0,0 +1,31 @@
+package com.uas.platform.b2c.fa.payment.service;
+
+/**
+ * 平安账户的接口
+ *
+ * Created by yujia on 2018/1/6.
+ */
+public interface PingAnAccountService {
+
+    /**
+     * 开户的
+     * @param isPersonal
+     * @return
+     */
+    String openAccount(Boolean isPersonal);
+
+
+    /**
+     * 获取资金汇总账户的信息
+     *
+     * @return
+     */
+    String getBaseAccountInfo();
+
+    /**
+     * 获取子账户信息
+     *
+     * @return
+     */
+    String getSubAccountInfo(Boolean isPersonal);
+}

+ 228 - 0
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankReceiptsServiceImpl.java

@@ -0,0 +1,228 @@
+package com.uas.platform.b2c.fa.payment.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.fa.payment.constant.B2CField;
+import com.uas.platform.b2c.fa.payment.constant.PingAnField;
+import com.uas.platform.b2c.fa.payment.constant.StringConstant;
+import com.uas.platform.b2c.fa.payment.service.BankReceiptsService;
+import com.uas.platform.b2c.fa.payment.support.UserInfoSupport;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 平安service 的impl
+ *
+ * @author yuj 2017-12-20 20:32
+ */
+@Service
+public class BankReceiptsServiceImpl implements BankReceiptsService {
+
+    private final RestTemplate restTemplate;
+
+    private final UserInfoSupport userInfoSupport;
+
+    @Autowired
+    public BankReceiptsServiceImpl(RestTemplate restTemplate, UserInfoSupport userInfoSupport) {
+        this.restTemplate = restTemplate;
+        this.userInfoSupport = userInfoSupport;
+    }
+
+    /**
+     * 绑卡的动作
+     *
+     * @param request    请求
+     * @param isPersonal 是否是个人账户
+     */
+    @Override
+    public String bindCard(HttpServletRequest request, Boolean isPersonal) {
+        Map<String, String> map = userInfoSupport.getUserInfoMap(isPersonal);
+        map.put(B2CField.USERUU, "1000103422");
+        map.put(B2CField.ENUU, "1000103423");
+        map.put(B2CField.DISSOCIATIVE, Boolean.FALSE.toString());
+        map.put(B2CField.ISPERSONAL, Boolean.TRUE.toString());
+        String httpEntity = restTemplate.postForObject("http://192.168.253.119:20280/UnionPay/bindCard", map, String.class);
+        return httpEntity;
+    }
+
+    /**
+     * 查询跨行绑卡的信息
+     *
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    @Override
+    public String queryBindCard(Boolean isPersonal) {
+        Map<String, String> map = userInfoSupport.getUserInfoMap(isPersonal);
+        String resultStr = restTemplate.postForObject("http://192.168.253.119:20280/UnionPay/bindCard/query", map, String.class);
+        return resultStr;
+    }
+
+
+    /**
+     * 银联快捷支付 获取短信验证码的信息
+     *
+     * @param json 传入的支付信息
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    @Override
+    public String khPaySMS(JSONObject json, Boolean isPersonal) {
+        HashMap<String, String> map = new HashMap<>();
+        if ((json == null) || json.size() == 0) {
+            map.put(PingAnField.AMOUNT, "10");
+            map.put(PingAnField.CURRENCY, "RMB");
+            map.put(PingAnField.OBJECTNAME, "test");
+            map.put(PingAnField.OPENID, "20003111462017122041072723");
+        } else {
+            String amount = json.getString(PingAnField.AMOUNT);
+            if (StringUtils.isEmpty(amount)) {
+                throw new IllegalArgumentException("传入的金额合计为空");
+            }
+            map.put(PingAnField.AMOUNT, amount);
+
+            String currency = json.getString(PingAnField.CURRENCY);
+            if (StringUtils.isEmpty(currency)) {
+                currency = StringConstant.RMB_String;
+            }
+            map.put(PingAnField.CURRENCY, currency);
+
+            String objectName = json.getString(PingAnField.OBJECTNAME);
+            map.put(PingAnField.OBJECTNAME, objectName == null ? "" : objectName);
+            //绑卡之后,会从银联返回一个OpenId;
+            map.put(PingAnField.OPENID, "20003111462017122041072723");
+        }
+        isPersonal = true;
+        Map<String, String> infoMap = userInfoSupport.getUserInfoMap(isPersonal);
+        infoMap.putAll(map);
+        String resultStr = restTemplate.postForObject("http://192.168.253.119:20280/UnionPay/sms", infoMap, String.class);
+        System.out.println(resultStr);
+        return resultStr;
+    }
+
+    /**
+     * 传入的数据
+     *
+     * @param json       json 交易的信息
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    @Override
+    public String khPay(JSONObject json, Boolean isPersonal) {
+        HashMap<String, String> map = new HashMap<>();
+        Map<String, String> infoMap = userInfoSupport.getUserInfoMap(isPersonal);
+        if ((json != null) && (json.size() != 0)) {
+            String orderid = json.getString(PingAnField.ORDERID);
+            if (StringUtils.isEmpty(orderid)) {
+                throw new IllegalArgumentException("传入的支付流水号为空");
+            }
+            map.put(PingAnField.ORDERID, orderid);
+            String payDate = json.getString(PingAnField.PAYDATE);
+            if (StringUtils.isEmpty(payDate)) {
+                throw new IllegalArgumentException("传入的支付时间为空");
+            }
+            map.put(PingAnField.PAYDATE, payDate);
+
+            String amout = json.getString(PingAnField.AMOUNT);
+            if (StringUtils.isEmpty(amout)) {
+                throw new IllegalArgumentException("传入的支付金额为空");
+            }
+            map.put(PingAnField.AMOUNT, amout);
+
+            String objName = json.getString(PingAnField.OBJECTNAME);
+            if (StringUtils.isEmpty(objName)) {
+                objName = StringConstant.EMPTY_STRING;
+            }
+            map.put(PingAnField.OBJECTNAME, objName);
+
+            String verifyCode = json.getString(PingAnField.VERIFYCODE);
+            if (StringUtils.isEmpty(verifyCode)) {
+                throw new IllegalArgumentException("传入的动态验证码为空");
+            }
+            map.put(PingAnField.VERIFYCODE, verifyCode);
+        } else {
+            map.putAll(infoMap);
+            map.put(PingAnField.ORDERID, "200031114620180109UHTX1CS0");
+            map.put(PingAnField.CURRENCY, "RMB");
+            map.put("amount", "10.00");
+            map.put("paydate", "20180109112109");
+            map.put("customerId", "19901120");
+            map.put("verifyCode", "111111");
+            map.put("issInsCode", "HXB");
+            map.put("objectName", "付款");
+            map.put("OpenId", "20003111462017122041072723");
+            map.put("payCardType", "01");
+        }
+
+        String resultStr = restTemplate.postForObject("http://192.168.253.119:20280/UnionPay/pay", map, String.class);
+        System.out.println(resultStr);
+        /*
+             *    orderId 支付的流水号必须和发送短信的接口一致
+     *    paydate 支付的时间,必须与获取短信的时间一致
+                *    opendid 银行卡的开户行id 在查询的时候就会把信息带过去
+     *    currency 币种 RMB
+                *    amount 金额 12整数,2小数
+                *    objectName 订单款项描述
+                *    verifyCode 短信验证码
+                *    payCardType 支付卡类型,01:借记卡,02:信用卡
+                *    issInsCode  发卡机构代码 查询绑卡信息时返回结果之后,会查询我们建的表信息,返回前端会带着个信息
+                *    */
+
+        return resultStr;
+    }
+
+    /**
+     * 网关支付接口
+     *
+     * @param json
+     * @return
+     */
+    @Override
+    public String eBankPay(JSONObject json, Boolean isPersonal) {
+        HashMap<String, String> map = new HashMap<>();
+        Map<String, String> infoMap = userInfoSupport.getUserInfoMap(isPersonal);
+        if (json == null || json.size() == 0) {
+            map.putAll(infoMap);
+            map.put("currency", "RMB");
+            map.put("amount", "11.00");
+            map.put("objectName", "测试");
+//            map.put("payType", "02");
+//            map.put("issInsCode", "CZSB");
+//            map.put("payCardType", "01");
+            map.put("payType", "01");
+            map.put("issInsCode", "PSBC");
+        } else {
+            //TODO
+        }
+        String loadHtml = restTemplate.postForObject("http://192.168.253.119:20280/eBank/pay", map, String.class);
+        return loadHtml;
+    }
+
+    /**
+     * 微信预支付的接口
+     *
+     * @param json 传入的支付信息
+     * @return String
+     */
+    @Override
+    public String weChatPrePay(JSONObject json) {
+        return null;
+    }
+
+    /**
+     * 微信支付的接口
+     *
+     * @param json 传入的数据
+     * @return String
+     */
+    @Override
+    public String weChatPay(@RequestBody JSONObject json) {
+        return null;
+    }
+}

+ 64 - 0
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/PingAnAccountServiceImpl.java

@@ -0,0 +1,64 @@
+package com.uas.platform.b2c.fa.payment.service.impl;
+
+import com.uas.platform.b2c.fa.payment.service.PingAnAccountService;
+import com.uas.platform.b2c.fa.payment.support.UserInfoSupport;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+
+/**
+ * 平安账户的实现方法
+ *
+ * @author yuj 2018-01-06 22:15
+ */
+@Service
+public class PingAnAccountServiceImpl implements PingAnAccountService {
+
+    private final UserInfoSupport userInfoSupport;
+
+    private final RestTemplate restTemplate;
+
+    @Autowired
+    public PingAnAccountServiceImpl(UserInfoSupport userInfoSupport, RestTemplate restTemplate) {
+        this.userInfoSupport = userInfoSupport;
+        this.restTemplate = restTemplate;
+    }
+
+    /**
+     * 开户的
+     *
+     * @param isPersonal
+     * @return
+     */
+    @Override
+    public String openAccount(Boolean isPersonal) {
+        Map<String, String> userInfoMap = userInfoSupport.getUserInfoMap(isPersonal);
+        String resultStr = restTemplate.postForObject("http://192.168.253.119:20280/pingan/account/openAccount", userInfoMap, String.class);
+        return resultStr;
+    }
+
+    /**
+     * 获取资金汇总账户的信息
+     *
+     * @return
+     */
+    @Override
+    public String getBaseAccountInfo() {
+        String resultStr = restTemplate.postForObject("http://192.168.253.119:20280/pingan/base/account", null, String.class);
+        return resultStr;
+    }
+
+    /**
+     * 获取子账户信息
+     *
+     * @return
+     */
+    @Override
+    public String getSubAccountInfo(Boolean isPersonal) {
+        Map<String, String> infoMap = userInfoSupport.getUserInfoMap(isPersonal);
+        String resultStr = restTemplate.postForObject("http://192.168.253.119:20280/pingan/base/account", null, String.class);
+        return resultStr;
+    }
+}

+ 46 - 0
src/main/java/com/uas/platform/b2c/fa/payment/support/UserInfoSupport.java

@@ -0,0 +1,46 @@
+package com.uas.platform.b2c.fa.payment.support;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.fa.payment.constant.B2CField;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *  获取用户信息的辅助类
+ *
+ * @author yuj 2018-01-06 22:45
+ */
+@Service
+public class UserInfoSupport {
+
+    /**
+     * 组装个人的信息
+     *
+     * @param isPersonal 是否是个人信息
+     * @return Map<String, String>
+     */
+    public Map<String, String> getUserInfoMap(Boolean isPersonal) {
+        HashMap<String, String> map = new HashMap<>();
+        User user = SystemSession.getUser();
+        isPersonal = true;
+        if (isPersonal) {
+            map.put(B2CField.USERUU, String.valueOf(user.getUserUU()));
+            if (user.getEnterprise() != null) {
+                map.put(B2CField.ENUU, String.valueOf(user.getEnterprise().getUu()));
+                map.put(B2CField.DISSOCIATIVE, Boolean.FALSE.toString());
+            } else {
+                map.put(B2CField.DISSOCIATIVE, Boolean.TRUE.toString());
+            }
+            map.put(B2CField.ISPERSONAL, Boolean.TRUE.toString());
+        } else {
+            map.put(B2CField.ENUU, user.getEnterprise().getUu().toString());
+            map.put(B2CField.DISSOCIATIVE, Boolean.FALSE.toString());
+            map.put(B2CField.ISPERSONAL, Boolean.FALSE.toString());
+        }
+
+        return map;
+    }
+}