Commit 3f0adb69 authored by Administrator's avatar Administrator

创建项目

parent b0c3cc3a
...@@ -4,5 +4,9 @@ package cn.quant.baa.pay.acquirer; ...@@ -4,5 +4,9 @@ package cn.quant.baa.pay.acquirer;
* Created by Administrator on 2021/9/1 0001. * Created by Administrator on 2021/9/1 0001.
*/ */
public interface Acquirer { public interface Acquirer {
String code(); Object code();
void pay();
void refund();
void check();
} }
...@@ -67,4 +67,8 @@ public class AcquirerConfiguration { ...@@ -67,4 +67,8 @@ public class AcquirerConfiguration {
public AcquirerProperties get(Long channelId) { public AcquirerProperties get(Long channelId) {
return map.get(channelId); return map.get(channelId);
} }
public Collection<AcquirerProperties> getAll() {
return map.values();
}
}; };
\ No newline at end of file
package cn.quant.baa.pay.acquirer; package cn.quant.baa.pay.acquirer;
import cn.quant.spring.NotSupportedException;
import cn.quant.spring.security.Base64Cipher; import cn.quant.spring.security.Base64Cipher;
import cn.quant.spring.security.CharacterCipher; import cn.quant.spring.security.CharacterCipher;
import cn.quant.spring.util.RandomSequencer;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException; import java.nio.charset.Charset;
import java.security.NoSuchAlgorithmException; import java.security.SecureRandom;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
* Created by Administrator on 2021/8/31 0031. * Created by Administrator on 2021/8/31 0031.
*/ */
public abstract class MerchantAcquirer implements Acquirer { public class MerchantAcquirer implements Acquirer {
private static Map<Object, Acquirer> acquirers = new HashMap<>(); private final static MerchantAcquirer instance = new MerchantAcquirer();
private final static Map<Object, Acquirer> acquirers = new HashMap<>();
protected Cipher cipher; protected Cipher cipher;
...@@ -24,25 +28,52 @@ public abstract class MerchantAcquirer implements Acquirer { ...@@ -24,25 +28,52 @@ public abstract class MerchantAcquirer implements Acquirer {
protected CharacterCipher secretCipher; protected CharacterCipher secretCipher;
private AcquirerProperties properties; protected AcquirerProperties properties;
protected MerchantAcquirer() {
}
public static MerchantAcquirer getInstance() {
return instance;
}
public MerchantAcquirer init(AcquirerProperties properties) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException { public MerchantAcquirer init(AcquirerProperties properties) throws Exception {
this.secretCipher = new Base64Cipher(); this.secretCipher = new Base64Cipher();
String secretType = properties.getSecretType(); String secretType = properties.getSecretType();
if (secretType.startsWith("AES")) { if (secretType.startsWith("AES")) {
this.secretKey = new SecretKeySpec(properties.getSecretKey().getBytes(), "AES"); this.secretKey = new SecretKeySpec(properties.getSecretKey().getBytes(Charset.forName("utf-8")), "AES");
} }
this.cipher = Cipher.getInstance(secretType); this.cipher = Cipher.getInstance(secretType);
this.cipher.init(Cipher.ENCRYPT_MODE, this.secretKey); GCMParameterSpec spec = new GCMParameterSpec(128, RandomSequencer.randomNumber().getBytes(Charset.forName("utf-8")));
this.cipher.init(Cipher.DECRYPT_MODE, this.secretKey, spec);
this.properties = properties; this.properties = properties;
return this; return this;
} }
public static void register(Acquirer acquirer) { public void register(Acquirer acquirer) {
acquirers.put(acquirer.code(), acquirer); acquirers.put(acquirer.code(), acquirer);
} }
@Override
public Object code() {
throw new NotSupportedException();
}
@Override
public void pay() {
throw new NotSupportedException();
}
@Override
public void refund() {
throw new NotSupportedException();
}
@Override
public void check() {
throw new NotSupportedException();
}
} }
...@@ -3,23 +3,19 @@ package cn.quant.baa.pay.acquirer.weixin; ...@@ -3,23 +3,19 @@ package cn.quant.baa.pay.acquirer.weixin;
import cn.quant.baa.pay.acquirer.AcquirerProperties; import cn.quant.baa.pay.acquirer.AcquirerProperties;
import cn.quant.baa.pay.acquirer.MerchantAcquirer; import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import javax.crypto.NoSuchPaddingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/** /**
* Created by Administrator on 2021/8/31 0031. * Created by Administrator on 2021/8/31 0031.
*/ */
public class WeiXinMerchantAcquirer extends MerchantAcquirer { public class WeiXinMerchantAcquirer extends MerchantAcquirer {
@Override @Override
public MerchantAcquirer init(AcquirerProperties properties) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException { public MerchantAcquirer init(AcquirerProperties properties) throws Exception {
return super.init(properties); super.init(properties);
return this;
} }
@Override @Override
public String code() { public Object code() {
return null; return this.properties.getMchChanId().toString();
} }
} }
...@@ -2,7 +2,9 @@ package cn.quant.baa.pay.config; ...@@ -2,7 +2,9 @@ package cn.quant.baa.pay.config;
import cn.quant.baa.pay.acquirer.AcquirerConfiguration; import cn.quant.baa.pay.acquirer.AcquirerConfiguration;
import cn.quant.baa.pay.acquirer.AcquirerConfigurer; import cn.quant.baa.pay.acquirer.AcquirerConfigurer;
import cn.quant.baa.pay.acquirer.AcquirerProperties;
import cn.quant.baa.pay.acquirer.MerchantAcquirer; import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import cn.quant.baa.pay.acquirer.weixin.WeiXinMerchantAcquirer;
import cn.quant.baa.pay.jpa.entity.*; import cn.quant.baa.pay.jpa.entity.*;
import cn.quant.baa.pay.jpa.repository.*; import cn.quant.baa.pay.jpa.repository.*;
import cn.quant.baa.pay.model.DictionaryItem; import cn.quant.baa.pay.model.DictionaryItem;
...@@ -10,6 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -10,6 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import javax.crypto.NoSuchPaddingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
...@@ -75,8 +82,16 @@ public class ServerConfiguration { ...@@ -75,8 +82,16 @@ public class ServerConfiguration {
} }
@Bean @Bean
public MerchantAcquirer acquirer(){ public MerchantAcquirer acquirer(AcquirerConfiguration acquirerConfiguration) throws Exception {
MerchantAcquirer merchantAcquirer = MerchantAcquirer.getInstance();
return null; Collection<AcquirerProperties> properties = acquirerConfiguration.getAll();
for (AcquirerProperties property : properties) {
if("WXP".equals(property.getPayChanCode())){
WeiXinMerchantAcquirer acquirer = new WeiXinMerchantAcquirer();
acquirer.init(property);
merchantAcquirer.register(acquirer);
}
}
return merchantAcquirer;
} }
} }
package cn.quant.baa.pay.model; package cn.quant.baa.pay.model;
import cn.quant.baa.pay.acquirer.AcquirerProperties; import cn.quant.baa.pay.acquirer.AcquirerProperties;
import cn.quant.baa.pay.model.web.MerchantAcquirerProperties;
import cn.quant.baa.pay.config.DictionaryViewer; import cn.quant.baa.pay.config.DictionaryViewer;
import cn.quant.baa.pay.dict.DictType; import cn.quant.baa.pay.dict.DictType;
import cn.quant.baa.pay.model.web.MerchantAcquirerProperties;
import cn.quant.baa.pay.model.web.MerchantChannelResponseData; import cn.quant.baa.pay.model.web.MerchantChannelResponseData;
import cn.quant.spring.UnsupportedException; import cn.quant.spring.NotSupportedException;
import cn.quant.spring.util.StringUtils; import cn.quant.spring.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -50,7 +50,7 @@ public class ModelBuilder { ...@@ -50,7 +50,7 @@ public class ModelBuilder {
for (String code : profiles.keySet()) { for (String code : profiles.keySet()) {
DictionaryItem item = dictionaryViewer.get(DictType.PAY, code); DictionaryItem item = dictionaryViewer.get(DictType.PAY, code);
if (item == null) { if (item == null) {
throw new UnsupportedException(StringUtils.format("Dictionary item is null({}, {}).", DictType.PAY, code)); throw new NotSupportedException(StringUtils.format("Dictionary item is null({}, {}).", DictType.PAY, code));
} }
Collection<AcquirerProperties> collection = profiles.get(code); Collection<AcquirerProperties> collection = profiles.get(code);
MerchantChannelResponseData book = new MerchantChannelResponseData(); MerchantChannelResponseData book = new MerchantChannelResponseData();
......
...@@ -8,6 +8,11 @@ import org.springframework.boot.test.context.SpringBootTest; ...@@ -8,6 +8,11 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import javax.crypto.Cipher;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
/** /**
* <p><b>JUnit VM Option:</b><br/> * <p><b>JUnit VM Option:</b><br/>
...@@ -24,6 +29,14 @@ public class TestApplication { ...@@ -24,6 +29,14 @@ public class TestApplication {
@Test @Test
public void idWorker() { public void idWorker() {
try {
System.currentTimeMillis();
} catch (Exception e) {
}
System.out.println(identitySequencer.nextId()); System.out.println(identitySequencer.nextId());
System.out.println(identitySequencer.nextId()); System.out.println(identitySequencer.nextId());
System.out.println(identitySequencer.nextId()); System.out.println(identitySequencer.nextId());
......
...@@ -15,9 +15,9 @@ quant.server.sequencer.sequence-bits=8 ...@@ -15,9 +15,9 @@ quant.server.sequencer.sequence-bits=8
#Database #Database
spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/baa_pay_v1.0?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.url=jdbc:mysql://172.17.5.17:31548/baa_pay_1.0?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root spring.datasource.username=qa
spring.datasource.password=111111 spring.datasource.password=qatest
spring.datasource.hikari.minimum-idle=1 spring.datasource.hikari.minimum-idle=1
spring.datasource.hikari.maximum-pool-size=3 spring.datasource.hikari.maximum-pool-size=3
spring.datasource.hikari.data-source-properties.cachePrepStmts=true spring.datasource.hikari.data-source-properties.cachePrepStmts=true
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment