|
|
@@ -17,6 +17,7 @@ import java.net.URI;
|
|
|
import java.net.URLDecoder;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
@@ -106,15 +107,14 @@ public class OmgPay {
|
|
|
verifyResponse(result, cfg, true);
|
|
|
} catch (RuntimeException e) {
|
|
|
String receivedCmv = result.get("CheckMacValue");
|
|
|
- String computedCmv;
|
|
|
- try {
|
|
|
- computedCmv = OmgCheckMacValue.generate(result, cfg.getHashKey(), cfg.getHashIv());
|
|
|
- } catch (Exception ce) {
|
|
|
- computedCmv = "generate-error:" + ce.getClass().getName() + ":" + ce.getMessage();
|
|
|
- }
|
|
|
- log.error("[OMG] queryTrade 验签失败 MerchantTradeNo={} TradeStatus={} RtnCode={} receivedCMV={} computedCMV={} hashKey={} hashIv={} resp={}",
|
|
|
- merchantTradeNo, result.get("TradeStatus"), result.get("RtnCode"),
|
|
|
- receivedCmv, computedCmv, mask(cfg.getHashKey()), mask(cfg.getHashIv()), resp, e);
|
|
|
+ log.error("[OMG] queryTrade 验签失败 MerchantTradeNo={} TradeStatus={} RtnCode={} receivedCMV={} "
|
|
|
+ + "nat_inc={} ci_inc={} nat_exc={} ci_exc={} hashKey={} hashIv={} resp={}",
|
|
|
+ merchantTradeNo, result.get("TradeStatus"), result.get("RtnCode"), receivedCmv,
|
|
|
+ safeGen(result, cfg, Comparator.naturalOrder(), false),
|
|
|
+ safeGen(result, cfg, String.CASE_INSENSITIVE_ORDER, false),
|
|
|
+ safeGen(result, cfg, Comparator.naturalOrder(), true),
|
|
|
+ safeGen(result, cfg, String.CASE_INSENSITIVE_ORDER, true),
|
|
|
+ mask(cfg.getHashKey()), mask(cfg.getHashIv()), resp, e);
|
|
|
throw e;
|
|
|
}
|
|
|
verifyCorrelation(result, "MerchantID", cfg.getMerchantId());
|
|
|
@@ -280,4 +280,13 @@ public class OmgPay {
|
|
|
}
|
|
|
return s.substring(0, 2) + "***" + s.substring(s.length() - 2) + "(len=" + s.length() + ")";
|
|
|
}
|
|
|
+
|
|
|
+ /** 诊断用:用指定排序/空值策略重算 CheckMacValue,失败返回 err 标记。 */
|
|
|
+ private String safeGen(Map<String, String> result, OmgPayConfig cfg, Comparator<String> order, boolean excludeEmpty) {
|
|
|
+ try {
|
|
|
+ return OmgCheckMacValue.generate(result, cfg.getHashKey(), cfg.getHashIv(), order, excludeEmpty);
|
|
|
+ } catch (Exception ce) {
|
|
|
+ return "err:" + ce.getClass().getSimpleName();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|