Commit 3f0adb69 authored by Administrator's avatar Administrator

创建项目

parent b0c3cc3a
......@@ -4,5 +4,9 @@ package cn.quant.baa.pay.acquirer;
* Created by Administrator on 2021/9/1 0001.
*/
public interface Acquirer {
String code();
Object code();
void pay();
void refund();
void check();
}
......@@ -67,4 +67,8 @@ public class AcquirerConfiguration {
public AcquirerProperties get(Long channelId) {
return map.get(channelId);
}
public Collection<AcquirerProperties> getAll() {
return map.values();
}
};
\ No newline at end of file
package cn.quant.baa.pay.acquirer;
import cn.quant.spring.NotSupportedException;
import cn.quant.spring.security.Base64Cipher;
import cn.quant.spring.security.CharacterCipher;
import cn.quant.spring.util.RandomSequencer;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.Charset;
import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
/**
* 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;
......@@ -24,25 +28,52 @@ public abstract class MerchantAcquirer implements Acquirer {
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();
String secretType = properties.getSecretType();
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.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;
return this;
}
public static void register(Acquirer acquirer) {
public void register(Acquirer 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;
import cn.quant.baa.pay.acquirer.AcquirerProperties;
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.
*/
public class WeiXinMerchantAcquirer extends MerchantAcquirer {
@Override
public MerchantAcquirer init(AcquirerProperties properties) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException {
return super.init(properties);
public MerchantAcquirer init(AcquirerProperties properties) throws Exception {
super.init(properties);
return this;
}
@Override
public String code() {
return null;
public Object code() {
return this.properties.getMchChanId().toString();
}
}
......@@ -2,7 +2,9 @@ package cn.quant.baa.pay.config;
import cn.quant.baa.pay.acquirer.AcquirerConfiguration;
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.weixin.WeiXinMerchantAcquirer;
import cn.quant.baa.pay.jpa.entity.*;
import cn.quant.baa.pay.jpa.repository.*;
import cn.quant.baa.pay.model.DictionaryItem;
......@@ -10,6 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
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;
/**
......@@ -75,8 +82,16 @@ public class ServerConfiguration {
}
@Bean
public MerchantAcquirer acquirer(){
return null;
public MerchantAcquirer acquirer(AcquirerConfiguration acquirerConfiguration) throws Exception {
MerchantAcquirer merchantAcquirer = MerchantAcquirer.getInstance();
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;
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.dict.DictType;
import cn.quant.baa.pay.model.web.MerchantAcquirerProperties;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -50,7 +50,7 @@ public class ModelBuilder {
for (String code : profiles.keySet()) {
DictionaryItem item = dictionaryViewer.get(DictType.PAY, code);
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);
MerchantChannelResponseData book = new MerchantChannelResponseData();
......
......@@ -8,6 +8,11 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
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/>
......@@ -24,6 +29,14 @@ public class TestApplication {
@Test
public void idWorker() {
try {
System.currentTimeMillis();
} catch (Exception e) {
}
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
#Database
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
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.username=root
spring.datasource.password=111111
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=qa
spring.datasource.password=qatest
spring.datasource.hikari.minimum-idle=1
spring.datasource.hikari.maximum-pool-size=3
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