Просмотр исходного кода

Merge remote-tracking branch 'origin/feature-pinganpay-yuj-20171108' into feature-pinganpay-yuj-20171108

yangc 8 лет назад
Родитель
Сommit
5a86b165fc

+ 10 - 0
pom.xml

@@ -464,6 +464,16 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.5.2</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpasyncclient</artifactId>
+			<version>4.1.2</version>
+		</dependency>
 	</dependencies>
 	<build>
 		<finalName>platform-b2c</finalName>

+ 29 - 0
src/main/java/com/uas/platform/b2c/fa/payment/constant/B2CField.java

@@ -0,0 +1,29 @@
+package com.uas.platform.b2c.fa.payment.constant;
+
+/**
+ * 商城的字段名
+ *
+ * @author yuj 2017-12-21 21:36
+ */
+public class B2CField {
+
+    /**
+     * 个人的uu
+     */
+    public static final String USERUU = "useruu";
+
+    /**
+     * 企业的uu
+     */
+    public static final String ENUU = "enuu";
+
+    /**
+     * 是否是个人账户 (个人账户,企业账户)
+     */
+    public static final String ISPERSONAL = "isPersonal";
+
+    /**
+     * 个人账户中 是否是游离的
+     */
+    public static final String DISSOCIATIVE = "dissociative";
+}

+ 69 - 0
src/main/java/com/uas/platform/b2c/fa/payment/constant/PingAnField.java

@@ -0,0 +1,69 @@
+package com.uas.platform.b2c.fa.payment.constant;
+
+/**
+ * 平安的支付字段
+ *
+ * @author yuj 2017-12-22 10:51
+ */
+public class PingAnField {
+
+    /**
+     * 商户订单数据组成的原始数据字符串
+     */
+    public static final String ORIG = "orig";
+
+    /**
+     * 原始数据字符串的签名
+     */
+    public static final String SIGN = "sign";
+
+    /**
+     * 前台地址
+     */
+    public static final String RETURNURL = "returnurl";
+
+    /**
+     * 后台地址
+     */
+    public static final String NOTIFYURL = "NOTIFYURL";
+
+    /**
+     * 提交动作链接
+     */
+    public static final String ACTIONURL = "actionUrl";
+
+    /**
+     * 订单的流水号
+     */
+    public static final String ORDERID = "orderId";
+
+    /**
+     * 开户行id
+     */
+    public static final String OPENID = "OpenId";
+
+    /**
+     * 支付时间
+     */
+    public static final String PAYDATE = "paydate";
+
+    /**
+     * 币别信息
+     */
+    public static final String CURRENCY = "currency";
+
+    /**
+     * 金额
+     */
+    public static final String AMOUNT = "amount";
+
+    /**
+     * objectName
+     */
+    public static final String OBJECTNAME = "objectName";
+
+    /**
+     * 验证码
+     */
+    public static final String VERIFYCODE = "verifyCode";
+}

+ 24 - 0
src/main/java/com/uas/platform/b2c/fa/payment/constant/StringConstant.java

@@ -0,0 +1,24 @@
+package com.uas.platform.b2c.fa.payment.constant;
+
+/**
+ * String 的常量
+ *
+ * @author yuj 2017-12-22 11:25
+ */
+public class StringConstant {
+
+    /**
+     * 编码格式
+     */
+    public static final String UTF_8 = "UTF-8";
+
+    /**
+     * 人民币
+     */
+    public static final String RMB_String = "RMB";
+
+    /**
+     * 空值
+     */
+    public static final String EMPTY_STRING = "";
+}

+ 143 - 0
src/main/java/com/uas/platform/b2c/fa/payment/controller/BankReceiptsController.java

@@ -0,0 +1,143 @@
+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.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;
+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 = "/bankReceipts")
+public class BankReceiptsController {
+
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    private final BankReceiptsService bankReceiptsService;
+
+    @Autowired
+    public BankReceiptsController(BankReceiptsService bankReceiptsService) {
+        this.bankReceiptsService = bankReceiptsService;
+    }
+
+    /**
+     * 支付时的绑卡动作
+     *
+     * @param request 请求
+     * @param isPersonal 是否是个人
+     */
+    @RequestMapping(value = "/unionPay/pay/bindCard", method = RequestMethod.GET)
+    public String bindCard(HttpServletRequest request, Boolean isPersonal) {
+        String str = bankReceiptsService.bindCard(request, isPersonal);
+        logger.log("平安支付控制器", "支付绑卡", "支付时的绑卡");
+        return str;
+    }
+
+
+    /**
+     *  请求个人快捷绑定的支付的银行卡信息
+     *
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    @RequestMapping(value = "/unionPay/bindCard/query", method = RequestMethod.GET)
+    public String queryBindCard(Boolean isPersonal) {
+        String resultStr = bankReceiptsService.queryBindCard(isPersonal);
+        logger.log("平安支付控制器", "跨行支付绑卡", "查询绑卡信息");
+        return resultStr;
+    }
+
+    /**
+     *
+     * @param json 传入的数据
+     *            currency 币别 RMB 3个字符
+     *            amount 金额 12整数,2位小数
+     *            objectName 订单款项描述 200 字符
+     *            openid openid跟customerid一直,绑卡时返回过来openid
+     *            remark 字段 描述  否
+     * @return
+     */
+    @RequestMapping(value = "/unionPay/sms", method = RequestMethod.POST)
+    public String khPaySMS(Boolean isPersonal, @RequestBody JSONObject json) {
+        String khPaySMS = bankReceiptsService.khPaySMS(json, isPersonal);
+        logger.log("平安支付控制器", "跨行支付绑卡", "快捷支付发送短信");
+        return json.toString();
+    }
+
+    /**
+     * 提交
+     *
+     * @param isPersonal 是否是个人
+     * @param json 提交的json 数据
+     *    orderId 支付的流水号必须和发送短信的接口一致
+     *    paydate 支付的时间,必须与获取短信的时间一致
+     *    opendid 银行卡的开户行id 在查询的时候就会把信息带过去
+     *    currency 币种 RMB
+     *    amount 金额 12整数,2小数
+     *    objectName 订单款项描述
+     *    verifyCode 短信验证码
+     *    payCardType 支付卡类型,01:借记卡,02:信用卡
+     *    issInsCode  发卡机构代码 查询绑卡信息时返回结果之后,会查询我们建的表信息,返回前端会带着个信息
+     * @return 返回String
+     */
+    @RequestMapping(value = "/unionPay/pay", method = RequestMethod.POST)
+    public String khPay(Boolean isPersonal, @RequestBody JSONObject json) {
+        String pay = bankReceiptsService.khPay(json, isPersonal);
+        logger.log("平安支付控制器", "跨行支付绑卡", "快捷支付支付接口");
+        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";
+    }
+
+}

+ 47 - 0
src/main/java/com/uas/platform/b2c/fa/payment/facade/PingAnFacade.java

@@ -0,0 +1,47 @@
+package com.uas.platform.b2c.fa.payment.facade;
+
+import com.alibaba.fastjson.JSONObject;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 平安的facade层
+ *
+ * Created by yujia on 2017/12/20.
+ */
+public interface PingAnFacade {
+
+    /**
+     * 绑卡动作
+     *
+     * @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);
+}

+ 193 - 0
src/main/java/com/uas/platform/b2c/fa/payment/facade/impl/PingAnFacadeImpl.java

@@ -0,0 +1,193 @@
+package com.uas.platform.b2c.fa.payment.facade.impl;
+
+import com.alibaba.fastjson.JSONObject;
+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 com.uas.platform.b2c.fa.payment.constant.PingAnField;
+import com.uas.platform.b2c.fa.payment.constant.StringConstant;
+import com.uas.platform.b2c.fa.payment.facade.PingAnFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 平安facade 的impl
+ *
+ * @author yuj 2017-12-20 20:32
+ */
+@Service
+public class PingAnFacadeImpl implements PingAnFacade {
+
+    private final RestTemplate restTemplate;
+
+    @Autowired
+    public PingAnFacadeImpl(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+
+    /**
+     * 绑卡的动作
+     *
+     * @param request    请求
+     * @param isPersonal 是否是个人账户
+     */
+    @Override
+    public String bindCard(HttpServletRequest request, Boolean isPersonal) {
+        Map<String, String> map = 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 = getUserInfoMap(isPersonal);
+        String resultStr = restTemplate.postForObject("http://192.168.253.119:20280/UnionPay/bindCard/query", map, String.class);
+        return resultStr;
+    }
+
+
+    /**
+     * 组装个人的信息
+     *
+     * @param isPersonal 是否是个人信息
+     * @return Map<String, String>
+     */
+    private 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;
+    }
+
+    /**
+     * 银联快捷支付 获取短信验证码的信息
+     *
+     * @param json 传入的支付信息
+     * @param isPersonal 是否是个人
+     * @return String
+     */
+    @Override
+    public String khPaySMS(JSONObject json, Boolean isPersonal) {
+        HashMap<String, String> map = new HashMap<>();
+        if (json == null) {
+            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 = 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<>();
+        if (json != null) {
+            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);
+        }
+        Map<String, String> infoMap = getUserInfoMap(isPersonal);
+        /*
+             *    orderId 支付的流水号必须和发送短信的接口一致
+     *    paydate 支付的时间,必须与获取短信的时间一致
+                *    opendid 银行卡的开户行id 在查询的时候就会把信息带过去
+     *    currency 币种 RMB
+                *    amount 金额 12整数,2小数
+                *    objectName 订单款项描述
+                *    verifyCode 短信验证码
+                *    payCardType 支付卡类型,01:借记卡,02:信用卡
+                *    issInsCode  发卡机构代码 查询绑卡信息时返回结果之后,会查询我们建的表信息,返回前端会带着个信息
+                *    */
+
+        map.put("paydate", "");
+        infoMap.putAll(map);
+        map.put("currency", "RMB");
+        map.put("amount", "");
+        return null;
+    }
+}

+ 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;
+    }
+}

+ 5 - 0
src/main/webapp/resources/js/usercenter/app.js

@@ -413,6 +413,11 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 			templateUrl : 'static/view/usercenter/forstore/buyer_down_payment.html',
 			controller : 'downPaymentCtrl',
 			controllerUrl : 'app/controllers/forstore/buyer_down_payment_ctrl'
+		})).state('paytest', angularAMD.route({
+			url: '/paytest',
+			templateUrl: 'static/view/usercenter/forstore/pay.html',
+			controller: 'payController',
+			controllerUrl: 'app/controllers/forstore/buyer_pay_ctrl'
 		}));
 	}]);
 

+ 6 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_pay_ctrl.js

@@ -0,0 +1,6 @@
+define(['app/app'], function (app) {
+    'use strict';
+    app.register.controller('payController', ['$scope', function ($scope) {
+        console.log('ok');
+    }]);
+});

+ 9 - 0
src/main/webapp/resources/view/usercenter/forstore/pay.html

@@ -0,0 +1,9 @@
+<div>
+    <form method="post" action= "https://my-uat1.orangebank.com.cn/khpayment/khPayment_PAY_API.do">
+        <input type="text" name="orig" value="">
+        <input type=text name= "sign" value="">
+        <input type=text name= "pageFlag" value="Y">
+        <input type=text name= "returnurl" value="xxxx3">
+        <input type=text name= "NOTIFYURL" value="xxxx4">
+    </form>
+</div>