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 ff51eb2..41ae9a2 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 @@ -200,7 +200,6 @@ public class AliPayService extends BasePayService { bizContent.put("total_amount", Util.conversionAmount(order.getPrice()).toString()); switch ((AliTransactionType) order.getTransactionType()) { case PAGE: - case DIRECT: bizContent.put(PASSBACK_PARAMS, order.getAddition()); bizContent.put(PRODUCT_CODE, "FAST_INSTANT_TRADE_PAY"); orderInfo.put(RETURN_URL, payConfigStorage.getReturnUrl()); @@ -272,6 +271,16 @@ public class AliPayService extends BasePayService { return PayOutMessage.TEXT().content("success").build(); } + @Override + public String toPay(PayOrder order) { + if (null == order.getTransactionType()) { + order.setTransactionType(AliTransactionType.PAGE); + } else if (order.getTransactionType() != AliTransactionType.PAGE && order.getTransactionType() != AliTransactionType.WAP) { + throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType())); + } + return super.toPay(order); + } + /** * @param orderInfo 发起支付的订单信息 * @param method 请求方式 "post" "get", @@ -301,6 +310,7 @@ public class AliPayService extends BasePayService { */ @Override public String getQrPay(PayOrder order){ + order.setTransactionType(AliTransactionType.SWEEPPAY); Map orderInfo = orderInfo(order); //预订单 JSONObject result = getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(orderInfo), null, JSONObject.class); @@ -320,6 +330,12 @@ public class AliPayService extends BasePayService { */ @Override public Map microPay(PayOrder order) { + if (null == order.getTransactionType()){ + order.setTransactionType(AliTransactionType.BAR_CODE); + }else if (order.getTransactionType() != AliTransactionType.BAR_CODE && order.getTransactionType() != AliTransactionType.WAVE_CODE && order.getTransactionType() != AliTransactionType.SECURITY_CODE){ + throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType())); + } + Map orderInfo = orderInfo(order); //预订单 JSONObject result = getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(orderInfo), null, JSONObject.class); diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java index b97e5ef..bb722de 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java @@ -18,12 +18,7 @@ import com.egzosn.pay.common.bean.TransactionType; * date 2016/10/19 22:58 */ public enum AliTransactionType implements TransactionType { - /** - * 即时到帐 - * 过时的名称,请换至 {@link #PAGE} - */ - @Deprecated - DIRECT("alipay.trade.page.pay"), + /** * 网页支付 */ 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 fdbfde6..3b06ce2 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 @@ -9,6 +9,8 @@ import com.egzosn.pay.common.util.DateUtils; import com.egzosn.pay.common.util.Util; import com.egzosn.pay.common.util.sign.SignUtils; import com.egzosn.pay.common.util.str.StringUtils; +import com.egzosn.pay.fuiou.bean.FuiouTransactionType; + import java.awt.image.BufferedImage; import java.io.InputStream; import java.math.BigDecimal; @@ -134,7 +136,7 @@ public class FuiouPayService extends BasePayService { */ @Override public boolean verifySource(String orderId) { - LinkedHashMap params = new LinkedHashMap<>(); + LinkedHashMap params = new LinkedHashMap(3); params.put("mchnt_cd", payConfigStorage.getPid()); params.put("order_id", orderId); params.put("md5", createSign(SignUtils.parameters2MD5Str(params, "|"), payConfigStorage.getInputCharset())); @@ -153,6 +155,10 @@ public class FuiouPayService extends BasePayService { */ @Override public Map orderInfo(PayOrder order) { + if (null == order.getTransactionType()){ + order.setTransactionType(FuiouTransactionType.B2C); + } + Map parameters = getOrderInfo(order); String sign = createSign(SignUtils.parameters2MD5Str(parameters, "|"), payConfigStorage.getInputCharset()); parameters.put("md5", sign); @@ -165,6 +171,7 @@ public class FuiouPayService extends BasePayService { * @return 返回支付请求参数集合 */ private Map getOrderInfo(PayOrder order) { + LinkedHashMap parameters = new LinkedHashMap(); //商户代码 parameters.put("mchnt_cd", payConfigStorage.getPid()); diff --git a/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java b/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java index 4d61b73..76afaba 100644 --- a/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java +++ b/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java @@ -263,6 +263,8 @@ public class PayoneerPayService extends BasePayService im */ @Override public Map microPay(PayOrder order) { + order.setTransactionType(PayoneerTransactionType.CHARGE); + HttpStringEntity entity = new HttpStringEntity(JSON.toJSONString(orderInfo(order)), ContentType.APPLICATION_JSON); //设置 base atuh entity.setHeaders(authHeader()); diff --git a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java index b94f887..e522814 100644 --- a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java +++ b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java @@ -146,6 +146,10 @@ public class PayPalPayService extends BasePayService{ */ @Override public Map orderInfo(PayOrder order) { + if (null == order.getTransactionType()){ + order.setTransactionType(PayPalTransactionType.sale); + } + Amount amount = new Amount(); if (null == order.getCurType()){ order.setCurType(DefaultCurType.USD); diff --git a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java index 90aaad6..93792d3 100644 --- a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java +++ b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java @@ -379,6 +379,18 @@ public class UnionPayService extends BasePayService { return null; } + @Override + public String toPay(PayOrder order) { + + if (null == order.getTransactionType()){ + order.setTransactionType(UnionTransactionType.WEB); + }else if (UnionTransactionType.WEB != order.getTransactionType() && UnionTransactionType.WAP != order.getTransactionType() && UnionTransactionType.B2B != order.getTransactionType()){ + throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType())); + } + + return super.toPay(order); + } + /** * 获取输出二维码,用户返回给支付端, * @@ -387,6 +399,7 @@ public class UnionPayService extends BasePayService { */ @Override public String getQrPay(PayOrder order) { + order.setTransactionType(UnionTransactionType.APPLY_QR_CODE); Map params = orderInfo(order); String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class); Map response = UriVariables.getParametersToMap(responseStr); @@ -411,6 +424,7 @@ public class UnionPayService extends BasePayService { */ @Override public Map microPay(PayOrder order) { + order.setTransactionType(UnionTransactionType.CONSUME); Map params = orderInfo(order); String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class); return UriVariables.getParametersToMap(responseStr); 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 2d7775f..b108c5b 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 @@ -336,6 +336,7 @@ public class WxYouDianPayService extends BasePayService microPay(PayOrder order) { + order.setTransactionType(YoudianTransactionType.MICROPAY); JSONObject orderInfo = orderInfo(order); return orderInfo; } 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 5027d82..0940488 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 @@ -31,7 +31,7 @@ import static com.egzosn.pay.wx.bean.WxTransferType.*; * 微信支付服务 * * @author egan - *
+ * 
  *                 email egzosn@gmail.com
  *                 date 2016-5-18 14:09:01
  *                 
@@ -95,6 +95,7 @@ public class WxPayService extends BasePayService { this.payConfigStorage = payConfigStorage; return this; } + /** * 根据交易类型获取url * @@ -222,7 +223,7 @@ public class WxPayService extends BasePayService { parameters.put("time_expire", DateUtils.formatDate(order.getExpirationTime(), DateUtils.YYYYMMDDHHMMSS)); } ((WxTransactionType) order.getTransactionType()).setAttribute(parameters, order); - parameters = preOrderHandler(parameters, order); + parameters = preOrderHandler(parameters, order); setSign(parameters); String requestXML = XML.getMap2Xml(parameters); @@ -275,7 +276,7 @@ public class WxPayService extends BasePayService { params.put("noncestr", result.get(NONCE_STR)); params.put("package", "Sign=WXPay"); } - params = preOrderHandler(params, order); + params = preOrderHandler(params, order); String paySign = createSign(SignUtils.parameterText(params), payConfigStorage.getInputCharset()); params.put(SIGN, paySign); return params; @@ -291,11 +292,12 @@ public class WxPayService extends BasePayService { * @return 请求参数 */ private Map setSign(Map parameters) { - String signType = payConfigStorage.getSignType(); - if (HMACSHA256.equals(signType)) { - signType = HMAC_SHA256; + + String signTypeStr = payConfigStorage.getSignType(); + if (HMACSHA256.equals(signTypeStr)) { + signTypeStr = SignUtils.HMACSHA256.getName(); } - parameters.put("sign_type", signType); + parameters.put("sign_type", signTypeStr); String sign = createSign(SignUtils.parameterText(parameters, "&", SIGN, "appId"), payConfigStorage.getInputCharset()); parameters.put(SIGN, sign); return parameters; @@ -338,21 +340,22 @@ public class WxPayService extends BasePayService { return createSign(content, characterEncoding, payConfigStorage.isTest()); } + /** * 签名 * * @param content 需要签名的内容 不包含key * @param characterEncoding 字符编码 - * @param test 是否为沙箱环境 + * @param test 是否为沙箱环境 * @return 签名结果 */ public String createSign(String content, String characterEncoding, boolean test) { - SignUtils signUtils = SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase()); + SignType signType = SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase()); String keyPrivate = payConfigStorage.getKeyPrivate(); - if (test){ + if (test) { keyPrivate = getKeyPrivate(); } - return signUtils.createSign(content + "&key=" + (signUtils == SignUtils.MD5 ? "" : keyPrivate), keyPrivate, characterEncoding).toUpperCase(); + return signType.createSign(content + "&key=" + (signType == SignUtils.MD5 ? "" : keyPrivate), keyPrivate, characterEncoding).toUpperCase(); } /** @@ -426,14 +429,16 @@ public class WxPayService extends BasePayService { * @return 返回二维码信息,,支付时需要的 */ @Override - public String getQrPay(PayOrder order){ + public String getQrPay(PayOrder order) { + order.setTransactionType(WxTransactionType.NATIVE); Map orderInfo = orderInfo(order); //获取对应的支付账户操作工具(可根据账户id) if (!SUCCESS.equals(orderInfo.get(RESULT_CODE))) { - throw new PayErrorException(new WxPayError((String)orderInfo.get("err_code"), orderInfo.toString())); + throw new PayErrorException(new WxPayError((String) orderInfo.get("err_code"), orderInfo.toString())); } return (String) orderInfo.get("code_url"); } + /** * 刷卡付,pos主动扫码付款 * @@ -442,7 +447,12 @@ public class WxPayService extends BasePayService { */ @Override public Map microPay(PayOrder order) { + if (null == order.getTransactionType()) { + order.setTransactionType(WxTransactionType.MICROPAY); + } else if (WxTransactionType.MICROPAY != order.getTransactionType() && WxTransactionType.FACEPAY != order.getTransactionType()) { + throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType())); + } return orderInfo(order); } @@ -527,7 +537,7 @@ public class WxPayService extends BasePayService { parameters.put("total_fee", Util.conversionCentAmount(refundOrder.getTotalAmount())); parameters.put("refund_fee", Util.conversionCentAmount(refundOrder.getRefundAmount())); parameters.put("op_user_id", payConfigStorage.getPid()); - setParameters(parameters, "notify_url", payConfigStorage.getNotifyUrl()); + setParameters(parameters, "notify_url", payConfigStorage.getNotifyUrl()); //设置签名 setSign(parameters); @@ -563,7 +573,7 @@ public class WxPayService extends BasePayService { setParameters(parameters, "out_refund_no", refundOrder.getRefundNo()); //设置签名 setSign(parameters); - return requestTemplate.postForObject(getReqUrl( WxTransactionType.REFUNDQUERY), XML.getMap2Xml(parameters) , JSONObject.class); + return requestTemplate.postForObject(getReqUrl(WxTransactionType.REFUNDQUERY), XML.getMap2Xml(parameters), JSONObject.class); } @@ -633,7 +643,7 @@ public class WxPayService extends BasePayService { } //设置签名 setSign(parameters); - return requestTemplate.postForObject(getReqUrl(transactionType), XML.getMap2Xml(parameters) , JSONObject.class); + return requestTemplate.postForObject(getReqUrl(transactionType), XML.getMap2Xml(parameters), JSONObject.class); } /** @@ -642,13 +652,13 @@ public class WxPayService extends BasePayService { * @param order 转账订单 *
      *
-     *              注意事项:
-     *              ◆ 当返回错误码为“SYSTEMERROR”时,请不要更换商户订单号,一定要使用原商户订单号重试,否则可能造成重复支付等资金风险。
-     *              ◆ XML具有可扩展性,因此返回参数可能会有新增,而且顺序可能不完全遵循此文档规范,如果在解析回包的时候发生错误,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新回包字段,会更新到此API文档中。
-     *              ◆ 因为错误代码字段err_code的值后续可能会增加,所以商户如果遇到回包返回新的错误码,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新的错误码,会更新到此API文档中。
-     *              ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
+     *                           注意事项:
+     *                           ◆ 当返回错误码为“SYSTEMERROR”时,请不要更换商户订单号,一定要使用原商户订单号重试,否则可能造成重复支付等资金风险。
+     *                           ◆ XML具有可扩展性,因此返回参数可能会有新增,而且顺序可能不完全遵循此文档规范,如果在解析回包的时候发生错误,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新回包字段,会更新到此API文档中。
+     *                           ◆ 因为错误代码字段err_code的值后续可能会增加,所以商户如果遇到回包返回新的错误码,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新的错误码,会更新到此API文档中。
+     *                           ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
      *
-     *              
+ *
* @return 对应的转账结果 */ @Override @@ -672,7 +682,7 @@ public class WxPayService extends BasePayService { } parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset())); - return getHttpRequestTemplate().postForObject(getReqUrl(order.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class); + return getHttpRequestTemplate().postForObject(getReqUrl(order.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class); } /** @@ -740,11 +750,11 @@ public class WxPayService extends BasePayService { throw new PayErrorException(new WxPayError(FAILURE, "微信转账类型 #transferQuery(String outNo, String wxTransferType) 必填,详情com.egzosn.pay.wx.bean.WxTransferType")); } //如果类型为余额方式 - if (TRANSFERS.getType().equals(wxTransferType) || GETTRANSFERINFO.getType().equals(wxTransferType)){ - return getHttpRequestTemplate().postForObject(getReqUrl(GETTRANSFERINFO), XML.getMap2Xml(parameters), JSONObject.class); + if (TRANSFERS.getType().equals(wxTransferType) || GETTRANSFERINFO.getType().equals(wxTransferType)) { + return getHttpRequestTemplate().postForObject(getReqUrl(GETTRANSFERINFO), XML.getMap2Xml(parameters), JSONObject.class); } //默认查询银行卡的记录 - return getHttpRequestTemplate().postForObject(getReqUrl(QUERY_BANK), XML.getMap2Xml(parameters), JSONObject.class); + return getHttpRequestTemplate().postForObject(getReqUrl(QUERY_BANK), XML.getMap2Xml(parameters), JSONObject.class); }