|
|
@@ -0,0 +1,153 @@
|
|
|
+package com.ruoyi.app.pay.dto;
|
|
|
+
|
|
|
+import lombok.Data;
|
|
|
+
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * OMG AIO 支付、取号及结果页回调参数。
|
|
|
+ *
|
|
|
+ * <p>OMG 使用 PascalCase/form-urlencoded 字段并基于原字段名计算 CheckMacValue,
|
|
|
+ * 因此属性名与 OMG 协议保持一致。未列入协议白名单的字段不会进入验签。</p>
|
|
|
+ */
|
|
|
+@Data
|
|
|
+public class OmgCallbackRequest {
|
|
|
+
|
|
|
+ private static final int MAX_VALUE_LENGTH = 4096;
|
|
|
+
|
|
|
+ private String[] MerchantID;
|
|
|
+ private String[] MerchantTradeNo;
|
|
|
+ private String[] StoreID;
|
|
|
+ private String[] RtnCode;
|
|
|
+ private String[] RtnMsg;
|
|
|
+ private String[] TradeNo;
|
|
|
+ private String[] TradeAmt;
|
|
|
+ private String[] PaymentDate;
|
|
|
+ private String[] PaymentType;
|
|
|
+ private String[] PaymentTypeChargeFee;
|
|
|
+ private String[] TradeDate;
|
|
|
+ private String[] SimulatePaid;
|
|
|
+ private String[] CustomField1;
|
|
|
+ private String[] CustomField2;
|
|
|
+ private String[] CustomField3;
|
|
|
+ private String[] CustomField4;
|
|
|
+ private String[] CheckMacValue;
|
|
|
+
|
|
|
+ private String[] BankCode;
|
|
|
+ private String[] vAccount;
|
|
|
+ private String[] ExpireDate;
|
|
|
+ private String[] PaymentNo;
|
|
|
+ private String[] Barcode1;
|
|
|
+ private String[] Barcode2;
|
|
|
+ private String[] Barcode3;
|
|
|
+ private String[] CVSStoreID;
|
|
|
+ private String[] CVSStoreName;
|
|
|
+ private String[] PayFrom;
|
|
|
+
|
|
|
+ private String[] AlipayID;
|
|
|
+ private String[] AlipayTradeNo;
|
|
|
+ private String[] ATMAccBank;
|
|
|
+ private String[] ATMAccNo;
|
|
|
+ private String[] WebATMAccBank;
|
|
|
+ private String[] WebATMAccNo;
|
|
|
+ private String[] WebATMBankName;
|
|
|
+ private String[] auth_code;
|
|
|
+ private String[] AuthCode;
|
|
|
+ private String[] card4no;
|
|
|
+ private String[] card6no;
|
|
|
+ private String[] eci;
|
|
|
+ private String[] gwsr;
|
|
|
+ private String[] process_date;
|
|
|
+ private String[] stage;
|
|
|
+ private String[] stast;
|
|
|
+ private String[] staed;
|
|
|
+ private String[] red_dan;
|
|
|
+ private String[] red_de_amt;
|
|
|
+ private String[] red_ok_amt;
|
|
|
+ private String[] red_yet;
|
|
|
+ private String[] PeriodType;
|
|
|
+ private String[] Frequency;
|
|
|
+ private String[] ExecTimes;
|
|
|
+ private String[] PeriodAmount;
|
|
|
+ private String[] amount;
|
|
|
+ private String[] TotalSuccessTimes;
|
|
|
+ private String[] TotalSuccessAmount;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 转为 OMG 验签所需的原始字段名集合,并在进入验签前限制单字段长度。
|
|
|
+ */
|
|
|
+ public Map<String, String> toParameterMap() {
|
|
|
+ Map<String, String> parameters = new LinkedHashMap<>();
|
|
|
+ put(parameters, "MerchantID", MerchantID);
|
|
|
+ put(parameters, "MerchantTradeNo", MerchantTradeNo);
|
|
|
+ put(parameters, "StoreID", StoreID);
|
|
|
+ put(parameters, "RtnCode", RtnCode);
|
|
|
+ put(parameters, "RtnMsg", RtnMsg);
|
|
|
+ put(parameters, "TradeNo", TradeNo);
|
|
|
+ put(parameters, "TradeAmt", TradeAmt);
|
|
|
+ put(parameters, "PaymentDate", PaymentDate);
|
|
|
+ put(parameters, "PaymentType", PaymentType);
|
|
|
+ put(parameters, "PaymentTypeChargeFee", PaymentTypeChargeFee);
|
|
|
+ put(parameters, "TradeDate", TradeDate);
|
|
|
+ put(parameters, "SimulatePaid", SimulatePaid);
|
|
|
+ put(parameters, "CustomField1", CustomField1);
|
|
|
+ put(parameters, "CustomField2", CustomField2);
|
|
|
+ put(parameters, "CustomField3", CustomField3);
|
|
|
+ put(parameters, "CustomField4", CustomField4);
|
|
|
+ put(parameters, "CheckMacValue", CheckMacValue);
|
|
|
+ put(parameters, "BankCode", BankCode);
|
|
|
+ put(parameters, "vAccount", vAccount);
|
|
|
+ put(parameters, "ExpireDate", ExpireDate);
|
|
|
+ put(parameters, "PaymentNo", PaymentNo);
|
|
|
+ put(parameters, "Barcode1", Barcode1);
|
|
|
+ put(parameters, "Barcode2", Barcode2);
|
|
|
+ put(parameters, "Barcode3", Barcode3);
|
|
|
+ put(parameters, "CVSStoreID", CVSStoreID);
|
|
|
+ put(parameters, "CVSStoreName", CVSStoreName);
|
|
|
+ put(parameters, "PayFrom", PayFrom);
|
|
|
+ put(parameters, "AlipayID", AlipayID);
|
|
|
+ put(parameters, "AlipayTradeNo", AlipayTradeNo);
|
|
|
+ put(parameters, "ATMAccBank", ATMAccBank);
|
|
|
+ put(parameters, "ATMAccNo", ATMAccNo);
|
|
|
+ put(parameters, "WebATMAccBank", WebATMAccBank);
|
|
|
+ put(parameters, "WebATMAccNo", WebATMAccNo);
|
|
|
+ put(parameters, "WebATMBankName", WebATMBankName);
|
|
|
+ put(parameters, "auth_code", auth_code);
|
|
|
+ put(parameters, "AuthCode", AuthCode);
|
|
|
+ put(parameters, "card4no", card4no);
|
|
|
+ put(parameters, "card6no", card6no);
|
|
|
+ put(parameters, "eci", eci);
|
|
|
+ put(parameters, "gwsr", gwsr);
|
|
|
+ put(parameters, "process_date", process_date);
|
|
|
+ put(parameters, "stage", stage);
|
|
|
+ put(parameters, "stast", stast);
|
|
|
+ put(parameters, "staed", staed);
|
|
|
+ put(parameters, "red_dan", red_dan);
|
|
|
+ put(parameters, "red_de_amt", red_de_amt);
|
|
|
+ put(parameters, "red_ok_amt", red_ok_amt);
|
|
|
+ put(parameters, "red_yet", red_yet);
|
|
|
+ put(parameters, "PeriodType", PeriodType);
|
|
|
+ put(parameters, "Frequency", Frequency);
|
|
|
+ put(parameters, "ExecTimes", ExecTimes);
|
|
|
+ put(parameters, "PeriodAmount", PeriodAmount);
|
|
|
+ put(parameters, "amount", amount);
|
|
|
+ put(parameters, "TotalSuccessTimes", TotalSuccessTimes);
|
|
|
+ put(parameters, "TotalSuccessAmount", TotalSuccessAmount);
|
|
|
+ return parameters;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void put(Map<String, String> parameters, String name, String[] values) {
|
|
|
+ if (values == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (values.length != 1 || values[0] == null) {
|
|
|
+ throw new IllegalArgumentException("duplicate or invalid callback parameter: " + name);
|
|
|
+ }
|
|
|
+ String value = values[0];
|
|
|
+ if (value.length() > MAX_VALUE_LENGTH) {
|
|
|
+ throw new IllegalArgumentException("callback parameter is too long: " + name);
|
|
|
+ }
|
|
|
+ parameters.put(name, value);
|
|
|
+ }
|
|
|
+}
|