callback);
+
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/Bank.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/Bank.java
new file mode 100644
index 0000000..72a82a4
--- /dev/null
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/Bank.java
@@ -0,0 +1,24 @@
+package com.egzosn.pay.common.bean;
+
+/**
+ * 银行
+ * @author egan
+ *
+ * email egzosn@gmail.com
+ * date 2018/1/31
+ *
+ */
+public interface Bank {
+
+ /**
+ * 获取银行的代码
+ * @return 银行的代码
+ */
+ String getCode();
+
+ /**
+ * 获取银行的名称
+ * @return 银行的名称
+ */
+ String getName();
+}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/TransferOrder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/TransferOrder.java
new file mode 100644
index 0000000..76bbcc0
--- /dev/null
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/TransferOrder.java
@@ -0,0 +1,104 @@
+package com.egzosn.pay.common.bean;
+
+import java.math.BigDecimal;
+
+/**
+ * 转账订单
+ * @author egan
+ *
+ * email egzosn@gmail.com
+ * date 2018/1/31
+ *
+ */
+public class TransferOrder {
+
+ /**
+ * 转账订单单号
+ */
+ private String outNo;
+
+ /**
+ * 收款方账户
+ */
+ private String payeeAccount ;
+
+ /**
+ * 转账金额
+ */
+ private BigDecimal amount ;
+
+ /**
+ * 付款人名称
+ */
+ private String payerName;
+
+ /**
+ * 收款人名称
+ */
+ private String payeeName;
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 收款开户行
+ */
+ private Bank bank;
+
+ public String getOutNo() {
+ return outNo;
+ }
+
+ public void setOutNo(String outNo) {
+ this.outNo = outNo;
+ }
+
+ public String getPayeeAccount() {
+ return payeeAccount;
+ }
+
+ public void setPayeeAccount(String payeeAccount) {
+ this.payeeAccount = payeeAccount;
+ }
+
+ public BigDecimal getAmount() {
+ return amount;
+ }
+
+ public void setAmount(BigDecimal amount) {
+ this.amount = amount;
+ }
+
+ public String getPayerName() {
+ return payerName;
+ }
+
+ public void setPayerName(String payerName) {
+ this.payerName = payerName;
+ }
+
+ public String getPayeeName() {
+ return payeeName;
+ }
+
+ public void setPayeeName(String payeeName) {
+ this.payeeName = payeeName;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public Bank getBank() {
+ return bank;
+ }
+
+ public void setBank(Bank bank) {
+ this.bank = bank;
+ }
+}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java
index 1e03f5b..37eb85e 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java
@@ -1,9 +1,16 @@
package com.egzosn.pay.common.util.sign;
+import com.egzosn.pay.common.bean.result.PayException;
+import com.egzosn.pay.common.exception.PayErrorException;
import com.egzosn.pay.common.util.str.StringUtils;
import org.apache.http.message.BasicNameValuePair;
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
@@ -43,6 +50,54 @@ public enum SignUtils {
public boolean verify(String text, String sign, String key, String characterEncoding) {
return com.egzosn.pay.common.util.sign.encrypt.MD5.verify(text, sign, key, characterEncoding);
}
+ },HMACSHA256{
+ /**
+ * 签名
+ *
+ * @param content 需要签名的内容
+ * @param key 密钥
+ * @param characterEncoding 字符编码
+ *
+ * @return 签名值
+ */
+ @Override
+ public String createSign(String content, String key, String characterEncoding) {
+ Mac sha256_HMAC = null;
+ try {
+ sha256_HMAC = Mac.getInstance("HmacSHA256");
+ SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(characterEncoding), "HmacSHA256");
+ sha256_HMAC.init(secret_key);
+ byte[] array = sha256_HMAC.doFinal(content.getBytes(characterEncoding));
+ StringBuilder sb = new StringBuilder();
+ for (byte item : array) {
+ sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
+ }
+ return sb.toString().toUpperCase();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (InvalidKeyException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ throw new PayErrorException(new PayException("fail", "HMACSHA256 签名异常"));
+ }
+
+ /**
+ * 签名字符串
+ *
+ * @param text 需要签名的字符串
+ * @param sign 签名结果
+ * @param key 密钥
+ * @param characterEncoding 编码格式
+ *
+ * @return 签名结果
+ */
+ @Override
+ public boolean verify(String text, String sign, String key, String characterEncoding) {
+ return createSign(text, key, characterEncoding).equals(sign);
+ }
},
RSA {