From 904d7a6070a4f16e705e9c9ddec2c347226a09b9 Mon Sep 17 00:00:00 2001 From: cnzzs Date: Wed, 10 May 2017 23:26:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=B7=E5=8D=A1=E4=BB=98=EF=BC=8C=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E4=BB=98=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为兼容刷卡付等支付结果校验,修改校验接口入参 --- pay-java-ali/pom.xml | 2 +- .../com/egzosn/pay/ali/api/AliPayService.java | 29 +++++- .../pay/ali/before/api/AliPayService.java | 20 +++- pay-java-common/pom.xml | 2 +- .../com/egzosn/pay/common/api/PayService.java | 14 ++- .../egzosn/pay/common/bean/PayMessage.java | 21 ++-- pay-java-demo/pom.xml | 3 +- .../pay/demo/controller/PayController.java | 28 +++++- pay-java-fuiou/pom.xml | 2 +- .../egzosn/pay/fuiou/api/FuiouPayService.java | 24 +++-- pay-java-wx-youdian/pom.xml | 2 +- .../wx/youdian/api/WxYouDianPayService.java | 21 +++- pay-java-wx/pom.xml | 2 +- .../com/egzosn/pay/wx/api/WxPayService.java | 98 ++++++++++++------- .../egzosn/pay/wx/bean/WxTransactionType.java | 4 +- pom.xml | 4 +- 16 files changed, 196 insertions(+), 80 deletions(-) diff --git a/pay-java-ali/pom.xml b/pay-java-ali/pom.xml index 1c1ab58..ead19e0 100644 --- a/pay-java-ali/pom.xml +++ b/pay-java-ali/pom.xml @@ -5,7 +5,7 @@ pay-java-parent com.egzosn - 2.0.1 + 2.0.2-SNAPSHOT 4.0.0 pay-java-ali diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java index e7e9bdc..9e215ab 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java @@ -214,13 +214,13 @@ public class AliPayService extends BasePayService { private Map getOrderBefore(PayOrder order) { Map orderInfo = new TreeMap<>(); // 签约合作者身份ID - orderInfo.put("partner", payConfigStorage.getPartner()); + orderInfo.put("partner", payConfigStorage.getPid()); // 签约卖家支付宝账号 orderInfo.put("seller_id", payConfigStorage.getSeller()); // 商户网站唯一订单号 - orderInfo.put("out_trade_no", order.getTradeNo()); + orderInfo.put("out_trade_no", order.getOutTradeNo()); // 商品名称 orderInfo.put("subject", order.getSubject()); @@ -270,9 +270,9 @@ public class AliPayService extends BasePayService { * @return 获得回调的请求参数 */ @Override - public Map getParameter2Map(Map parameterMap, InputStream is) { + public Map getParameter2Map(Map parameterMap, InputStream is) { - Map params = new TreeMap(); + Map params = new TreeMap(); for (Iterator iter = parameterMap.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = parameterMap.get(name); @@ -365,6 +365,27 @@ public class AliPayService extends BasePayService { throw new PayErrorException(new PayException(response.getString("code"), response.getString("msg"), result.toJSONString())); } + + /** + * pos主动扫码付款(条码付) + * @param order 发起支付的订单信息 + * @return 支付结果 + */ + @Override + public Map microPay(PayOrder order) { + Map orderInfo = orderInfo(order); + +// Map content = new HashMap<>(1); +// content.put("biz_content", orderInfo.remove("biz_content")); + //预订单 + JSONObject result = getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(orderInfo), null, JSONObject.class); + JSONObject response = result.getJSONObject("alipay_trade_precreate_response"); + if ("10000".equals(response.getString("code"))){ + return response; + } + throw new PayErrorException(new PayException(response.getString("code"), response.getString("msg"), result.toJSONString())); + } + /** * 交易查询接口 * @param tradeNo 支付平台订单号 diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java index 41a8b17..cab9021 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java @@ -62,7 +62,7 @@ public class AliPayService extends BasePayService { * @return 签名校验 true通过 */ @Override - public boolean verify(Map params) { + public boolean verify(Map params) { if (params.get("sign") == null || params.get("notify_id") == null) { log.debug("支付宝支付异常:params:" + params); @@ -70,7 +70,7 @@ public class AliPayService extends BasePayService { } try { - return signVerify(params, params.get("sign")) && verifySource(params.get("notify_id")); + return signVerify(params, (String) params.get("sign")) && verifySource((String) params.get("notify_id")); } catch (PayErrorException e) { e.printStackTrace(); } @@ -95,7 +95,7 @@ public class AliPayService extends BasePayService { * @return 生成的签名结果 */ @Override - public boolean signVerify(Map params, String sign) { + public boolean signVerify(Map params, String sign) { return SignUtils.valueOf(payConfigStorage.getSignType()).verify(params, sign, payConfigStorage.getKeyPublic(), payConfigStorage.getInputCharset()); } @@ -215,9 +215,9 @@ public class AliPayService extends BasePayService { * @return 获得回调的请求参数 */ @Override - public Map getParameter2Map(Map parameterMap, InputStream is) { + public Map getParameter2Map(Map parameterMap, InputStream is) { - Map params = new TreeMap(); + Map params = new TreeMap(); for (Iterator iter = parameterMap.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = parameterMap.get(name); @@ -293,6 +293,16 @@ public class AliPayService extends BasePayService { throw new UnsupportedOperationException(); } + /** + * 刷卡付,pos主动扫码付款(条码付) + * @param order 发起支付的订单信息 + * @return 支付结果 + */ + @Override + public Map microPay(PayOrder order) { + throw new UnsupportedOperationException(); + } + /** * 交易查询接口 diff --git a/pay-java-common/pom.xml b/pay-java-common/pom.xml index 6998d36..860e096 100644 --- a/pay-java-common/pom.xml +++ b/pay-java-common/pom.xml @@ -5,7 +5,7 @@ pay-java-parent com.egzosn - 2.0.1 + 2.0.2-SNAPSHOT 4.0.0 jar diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java index 35dfed3..b237121 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java @@ -60,7 +60,7 @@ public interface PayService { * @param params 回调回来的参数集 * @return 签名校验 true通过 */ - boolean verify(Map params); + boolean verify(Map params); /** * 签名校验 @@ -69,7 +69,7 @@ public interface PayService { * @param sign 签名 * @return 签名校验 true通过 */ - boolean signVerify(Map params, String sign); + boolean signVerify(Map params, String sign); /** @@ -115,7 +115,7 @@ public interface PayService { * @param is 请求流 * @return 获得回调的请求参数 */ - Map getParameter2Map(Map parameterMap, InputStream is); + Map getParameter2Map(Map parameterMap, InputStream is); /** * 获取输出消息,用户返回给支付端 @@ -144,6 +144,14 @@ public interface PayService { */ BufferedImage genQrPay(PayOrder order); + /** + * 刷卡付,pos主动扫码付款(条码付) + * + * @param order 发起支付的订单信息 + * @return 返回支付结果 + */ + Map microPay(PayOrder order); + /** * 交易查询接口 * diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java index c6eceb1..8ae04f1 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java @@ -4,7 +4,6 @@ import java.io.Serializable; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Arrays; import java.util.Date; import java.util.Map; @@ -18,25 +17,25 @@ import java.util.Map; * */ public class PayMessage implements Serializable { - private Map payMessage = null; + private Map payMessage = null; private String msgType; private String payType; private String transactionType; private String fromPay; private String describe; - public PayMessage(Map payMessage) { + public PayMessage(Map payMessage) { this.payMessage = payMessage; } - public PayMessage(Map payMessage, String payType, String msgType) { + public PayMessage(Map payMessage, String payType, String msgType) { this(payMessage); this.payType = payType; this.msgType = msgType; } - public PayMessage(Map payMessage, String msgType, String payType, String transactionType) { + public PayMessage(Map payMessage, String msgType, String payType, String transactionType) { this.payMessage = payMessage; this.msgType = msgType; this.payType = payType; @@ -84,25 +83,25 @@ public class PayMessage implements Serializable { this.describe = describe; } public String getDiscount(){ - return payMessage.get("discount"); + return (String) payMessage.get("discount"); } public String getSubject(){ - return payMessage.get("subject"); + return (String) payMessage.get("subject"); } /////////微信与支付宝共用 public String getOutTradeNo(){ - return payMessage.get("out_trade_no"); + return (String) payMessage.get("out_trade_no"); } public String getSign(){ - return payMessage.get("sign"); + return (String) payMessage.get("sign"); } public Number getTotalFee(){ - String total_fee = payMessage.get("total_fee"); + String total_fee = (String) payMessage.get("total_fee"); if (null == total_fee || "".equals(total_fee)){ return 0; } if (isNumber(total_fee)){ BigDecimal totalFee = new BigDecimal(total_fee); @@ -138,7 +137,7 @@ public class PayMessage implements Serializable { return payMessage.toString(); } - public Map getPayMessage() { + public Map getPayMessage() { return payMessage; } diff --git a/pay-java-demo/pom.xml b/pay-java-demo/pom.xml index 5034217..32b2abe 100644 --- a/pay-java-demo/pom.xml +++ b/pay-java-demo/pom.xml @@ -5,7 +5,7 @@ pay-java-parent com.egzosn - 2.0.SNAPSHOT + 2.0.2-SNAPSHOT 4.0.0 war @@ -16,7 +16,6 @@ 4.3.4.RELEASE 4.10 4.3.6.Final - 2.0.SNAPSHOT diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java index d53562c..135ca56 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java @@ -84,6 +84,32 @@ public class PayController { } + /** + * 刷卡付,pos主动扫码付款(条码付) + * + * @return 支付结果 + */ + @RequestMapping(value = "microPay") + public Map microPay(Integer payId, String transactionType, BigDecimal price, String authCode) throws IOException { + //获取对应的支付账户操作工具(可根据账户id) + PayResponse payResponse = service.getPayResponse(payId); + + PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""), PayType.valueOf(payResponse.getStorage().getPayType()).getTransactionType(transactionType)); + //设置授权码,条码等 + order.setAuthCode(authCode); + //支付结果 + Map params = payResponse.getService().microPay(order); + PayConfigStorage storage = payResponse.getStorage(); + //校验 + if (payResponse.getService().verify(params)) { + PayMessage message = new PayMessage(params, storage.getPayType(), storage.getMsgType().name()); + //支付校验通过后的处理 + payResponse.getRouter().route(message); + } + //这里开发者自行处理 + return params; + } + /** * 获取二维码图像 * 二维码支付 @@ -132,7 +158,7 @@ public class PayController { PayResponse payResponse = service.getPayResponse(payId); PayConfigStorage storage = payResponse.getStorage(); //获取支付方返回的对应参数 - Map params = payResponse.getService().getParameter2Map(request.getParameterMap(), request.getInputStream()); + Map params = payResponse.getService().getParameter2Map(request.getParameterMap(), request.getInputStream()); if (null == params) { return payResponse.getService().getPayOutMessage("fail", "失败").toMessage(); } diff --git a/pay-java-fuiou/pom.xml b/pay-java-fuiou/pom.xml index ee437ea..771677f 100644 --- a/pay-java-fuiou/pom.xml +++ b/pay-java-fuiou/pom.xml @@ -5,7 +5,7 @@ pay-java-parent com.egzosn - 2.0.1 + 2.0.2-SNAPSHOT 4.0.0 pay-java-fuiou diff --git a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java index 6403930..e977604 100644 --- a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java +++ b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java @@ -70,14 +70,14 @@ public class FuiouPayService extends BasePayService { * @return 返回检验结果 0000 成功 其他失败 */ @Override - public boolean verify(Map params) { + public boolean verify(Map params) { if (!"0000".equals(params.get("order_pay_code"))) { log.debug(String.format("富友支付异常:order_pay_code=%s,错误原因=%s,参数集=%s", params.get("order_pay_code"), params.get("order_pay_error"), params)); return false; } try { //返回参数校验 和 重新请求订单检查数据是否合法 - return (signVerify(params, params.get("md5")) && verifySource(params.get("order_id"))); + return (signVerify(params, (String) params.get("md5")) && verifySource((String) params.get("order_id"))); } catch (PayErrorException e) { e.printStackTrace(); } @@ -92,7 +92,7 @@ public class FuiouPayService extends BasePayService { * @return 校验结果 */ @Override - public boolean signVerify (Map params, String responseSign ) { + public boolean signVerify (Map params, String responseSign) { LinkedHashSet keySet = new LinkedHashSet<>(); keySet.add("mchnt_cd");//商户代码 keySet.add("order_id");//商户订单号 @@ -105,7 +105,7 @@ public class FuiouPayService extends BasePayService { keySet.add("fy_ssn");//富友流水号 StringBuilder verifyMD5Str = new StringBuilder(); for (String keyStr : keySet) { - String keyValue = params.get(keyStr); + String keyValue = (String) params.get(keyStr); if (null == keyValue){ log.debug(String.format("富友支付返回结果校验:<参数:%s>不能为空,",keyStr)); } @@ -186,7 +186,7 @@ public class FuiouPayService extends BasePayService { * @return 返回参数集合 */ @Override - public Map getParameter2Map(Map parameterMap, InputStream is) { + public Map getParameter2Map(Map parameterMap, InputStream is) { return null; } @@ -216,13 +216,23 @@ public class FuiouPayService extends BasePayService { /** * 获取输出二维码,用户返回给支付端, - * + * 暂未实现或无此功能 * @param order 发起支付的订单信息 * @return 空 */ @Override public BufferedImage genQrPay (PayOrder order) { - return null; + throw new UnsupportedOperationException(); + } + + /** + * 暂未实现或无此功能 + * @param order 发起支付的订单信息 + * @return 不支持的操作异常 + */ + @Override + public Map microPay(PayOrder order) { + throw new UnsupportedOperationException(); } /** diff --git a/pay-java-wx-youdian/pom.xml b/pay-java-wx-youdian/pom.xml index b850ea7..cf7550c 100644 --- a/pay-java-wx-youdian/pom.xml +++ b/pay-java-wx-youdian/pom.xml @@ -5,7 +5,7 @@ pay-java-parent com.egzosn - 2.0.1 + 2.0.2-SNAPSHOT 4.0.0 pay-java-wx-youdian diff --git a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java index fc7167a..b1b9018 100644 --- a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java +++ b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java @@ -135,7 +135,7 @@ public class WxYouDianPayService extends BasePayService { * @return 签名校验 true通过 */ @Override - public boolean verify(Map params) { + public boolean verify(Map params) { if (!"SUCCESS".equals(params.get("return_code"))){ log.debug(String.format("友店微信支付异常:return_code=%s,参数集=%s", params.get("return_code"), params)); return false; @@ -143,7 +143,7 @@ public class WxYouDianPayService extends BasePayService { if(params.get("sign") == null) {log.debug("友店微信支付异常:签名为空!out_trade_no=" + params.get("out_trade_no"));} try { - return signVerify(params, params.get("sign")) && verifySource(params.get("out_trade_no")); + return signVerify(params, (String) params.get("sign")) && verifySource((String)params.get("out_trade_no")); } catch (PayErrorException e) { e.printStackTrace(); } @@ -158,7 +158,7 @@ public class WxYouDianPayService extends BasePayService { * @return 生成的签名结果 */ @Override - public boolean signVerify(Map params, String sign) { + public boolean signVerify(Map params, String sign) { return SignUtils.valueOf(payConfigStorage.getSignType()).verify(params, sign, "&key=" + payConfigStorage.getKeyPrivate(), payConfigStorage.getInputCharset()); } @@ -286,8 +286,8 @@ public class WxYouDianPayService extends BasePayService { * @return 获得回调的请求参数 */ @Override - public Map getParameter2Map(Map parameterMap, InputStream is) { - Map params = new TreeMap<>(); + public Map getParameter2Map(Map parameterMap, InputStream is) { + Map params = new TreeMap(); for (Iterator iter = parameterMap.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = parameterMap.get(name); @@ -340,12 +340,23 @@ public class WxYouDianPayService extends BasePayService { throw new UnsupportedOperationException(); } + @Override public BufferedImage genQrPay(PayOrder order) { JSONObject orderInfo = orderInfo(order); return MatrixToImageWriter.writeInfoToJpgBuff((String) orderInfo.get("code_url")); } + /** + * 暂未实现或无此功能 + * @param order 发起支付的订单信息 + * @return 返回支付结果 + */ + @Override + public Map microPay(PayOrder order) { + throw new UnsupportedOperationException(); + } + @Override public Map query(String tradeNo, String outTradeNo) { return null; diff --git a/pay-java-wx/pom.xml b/pay-java-wx/pom.xml index a779de5..35a6e55 100644 --- a/pay-java-wx/pom.xml +++ b/pay-java-wx/pom.xml @@ -5,7 +5,7 @@ pay-java-parent com.egzosn - 2.0.1 + 2.0.2-SNAPSHOT 4.0.0 pay-java-wx diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java index df059d9..bdaeebb 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java @@ -71,7 +71,7 @@ public class WxPayService extends BasePayService { * @return 签名校验 true通过 */ @Override - public boolean verify(Map params) { + public boolean verify(Map params) { if (!"SUCCESS".equals(params.get("return_code"))){ log.debug(String.format("微信支付异常:return_code=%s,参数集=%s", params.get("return_code"), params)); return false; @@ -83,7 +83,7 @@ public class WxPayService extends BasePayService { } try { - return signVerify(params, params.get("sign")) && verifySource(params.get("out_trade_no")); + return signVerify(params, (String) params.get("sign")) && verifySource((String)params.get("out_trade_no")); } catch (PayErrorException e) { e.printStackTrace(); } @@ -108,7 +108,7 @@ public class WxPayService extends BasePayService { * @param sign 比对的签名结果 * @return 生成的签名结果 */ - public boolean signVerify(Map params, String sign) { + public boolean signVerify(Map params, String sign) { return SignUtils.valueOf(payConfigStorage.getSignType()).verify(params, sign, "&key=" + payConfigStorage.getKeyPublic(), payConfigStorage.getInputCharset()); } @@ -120,7 +120,7 @@ public class WxPayService extends BasePayService { Map parameters = new TreeMap(); parameters.put("appid", payConfigStorage.getAppid()); - parameters.put("mch_id", payConfigStorage.getPartner()); + parameters.put("mch_id", payConfigStorage.getPid()); parameters.put("nonce_str", SignUtils.randomStr()); return parameters; @@ -128,6 +128,49 @@ public class WxPayService extends BasePayService { } + /** + * 微信统一下单接口 + * + * @param order 支付订单集 + * @return 下单结果 + */ + public JSONObject unifiedOrder(PayOrder order) { + + ////统一下单 + Map parameters = getPublicParameters(); + + parameters.put("body", order.getSubject());// 购买支付信息 + + //刷卡付 + if (WxTransactionType.MICROPAY == order.getTransactionType()) { + parameters.put("auth_code", order.getAuthCode()); + } else { + parameters.put("notify_url", payConfigStorage.getNotifyUrl()); + + } + + parameters.put("out_trade_no", order.getOutTradeNo());// 订单号 + parameters.put("spbill_create_ip", "192.168.1.150"); + parameters.put("total_fee", order.getPrice().multiply(new BigDecimal(100)).intValue());// 总金额单位为分 + parameters.put("trade_type", order.getTransactionType().getType()); + parameters.put("attach", order.getBody()); + if (WxTransactionType.NATIVE == order.getTransactionType()) { + parameters.put("product_id", order.getOutTradeNo()); + } + String sign = createSign(SignUtils.parameterText(parameters), payConfigStorage.getInputCharset()); + parameters.put("sign", sign); + + String requestXML = XML.getMap2Xml(parameters); + log.debug("requestXML:" + requestXML); + //调起支付的参数列表 + JSONObject result = requestTemplate.postForObject(getUrl(order.getTransactionType()), requestXML, JSONObject.class); + + if (!"SUCCESS".equals(result.get("return_code"))){ + throw new PayErrorException(new WxPayError(result.getString("return_code"), result.getString("return_msg"), result.toJSONString())); + } + return result; + } + /** * 返回创建的订单信息 @@ -140,33 +183,10 @@ public class WxPayService extends BasePayService { public Map orderInfo(PayOrder order) { ////统一下单 - Map parameters = getPublicParameters(); - /* parameters.put("appid", payConfigStorage.getAppid()); - parameters.put("mch_id", payConfigStorage.getPartner()); - parameters.put("nonce_str", SignUtils.randomStr());*/ - parameters.put("body", order.getSubject());// 购买支付信息 - parameters.put("notify_url", payConfigStorage.getNotifyUrl()); - parameters.put("out_trade_no", order.getOutTradeNo());// 订单号 - parameters.put("spbill_create_ip", "192.168.1.150"); - parameters.put("total_fee", order.getPrice().multiply(new BigDecimal(100)).intValue());// 总金额单位为分 - parameters.put("trade_type", order.getTransactionType().getType()); - parameters.put("attach", order.getBody()); - if (WxTransactionType.NATIVE == order.getTransactionType()){ - parameters.put("product_id", order.getOutTradeNo()); - } - String sign = createSign(SignUtils.parameterText(parameters), payConfigStorage.getInputCharset()); - parameters.put("sign", sign); + JSONObject result = unifiedOrder(order); - String requestXML = XML.getMap2Xml(parameters); - log.debug("requestXML:" + requestXML); - /////////APP端调起支付的参数列表 - JSONObject result = requestTemplate.postForObject(getUrl(order.getTransactionType()), requestXML, JSONObject.class); - - if (!"SUCCESS".equals(result.get("return_code"))){ - throw new PayErrorException(new WxPayError(result.getString("return_code"), result.getString("return_msg"), result.toJSONString())); - } - //如果是扫码支付无需处理,直接返回 - if (WxTransactionType.NATIVE == order.getTransactionType()){ + //如果是扫码支付或者刷卡付无需处理,直接返回 + if (WxTransactionType.NATIVE == order.getTransactionType() || WxTransactionType.MICROPAY == order.getTransactionType()) { return result; } @@ -221,8 +241,8 @@ public class WxPayService extends BasePayService { * @return 获得回调的请求参数 */ @Override - public Map getParameter2Map(Map parameterMap, InputStream is) { - TreeMap map = new TreeMap(); + public Map getParameter2Map(Map parameterMap, InputStream is) { + TreeMap map = new TreeMap(); try { return XML.inputStream2Map(is, map); } catch (IOException e) { @@ -259,7 +279,7 @@ public class WxPayService extends BasePayService { /** * 获取输出二维码,用户返回给支付端, - * + * 暂未实现或无此功能 * @param order 发起支付的订单信息 * @return 返回图片信息,支付时需要的 */ @@ -275,6 +295,18 @@ public class WxPayService extends BasePayService { return MatrixToImageWriter.writeInfoToJpgBuff((String) orderInfo.get("code_url")); } + /** + * 刷卡付,pos主动扫码付款 + * @param order 发起支付的订单信息 + * @return 返回支付结果 + */ + @Override + public Map microPay(PayOrder order) { + + return orderInfo(order); + } + + /** * 交易查询接口 * diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java index 21ce55d..ff9dc4e 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java @@ -11,13 +11,13 @@ import com.egzosn.pay.common.bean.TransactionType; */ public enum WxTransactionType implements TransactionType { //公众号支付 - JSAPI("pay/unifiedorder"),//暂未接触 + JSAPI("pay/unifiedorder"), //扫码付 NATIVE("pay/unifiedorder"), //移动支付 APP("pay/unifiedorder"), //刷卡付,暂未接触 - MICROPAY("pay/unifiedorder"), + MICROPAY("pay/micropay"), // TODO 2017/3/8 19:14 author: egan 交易辅助接口 //查询订单 QUERY("pay/orderquery"), diff --git a/pom.xml b/pom.xml index 9cb1fce..cc0dc71 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.egzosn pay-java-parent pom - 2.0.1 + 2.0.2-SNAPSHOT Pay Java - Parent Pay Java Parent @@ -50,7 +50,7 @@ 4.5.2 1.2.17 - 2.0.1 + 2.0.2-SNAPSHOT