Commit 77f0fff4 authored by jwc's avatar jwc

企业认证 + 实名认证

parent 62aebea8
/target/classes/cn/zingfin/properties/AccessKeyAndSecret.class
/target/classes/application.yml
/target/classes/application-dev.yml
/target/classes/cn/zingfin/base/BaseOpenApiRequest.class
/target/classes/cn/zingfin/web/model/BusinessLicenseInfoModel.class
/target/classes/cn/zingfin/CommonApplication.class
/target/classes/cn/zingfin/factory/DefaultServerFactory.class
/target/classes/cn/zingfin/web/controller/HelloWorldController.class
/target/classes/cn/zingfin/web/model/IdCardInfoModel.class
/target/classes/cn/zingfin/web/model/InputModel.class
/target/classes/cn/zingfin/common/util/IssueCert.class
/target/classes/cn/zingfin/common/util/IssueCertUtils.class
/target/classes/cn/zingfin/common/util/IssueRootCert.class
/target/test-classes/ocr/OcrBusinessTest.class
/target/classes/cn/zingfin/common/enums/OcrCardTypeEnum.class
/target/classes/cn/zingfin/web/controller/OcrController.class
/target/test-classes/ocr/OcrIdCardTest.class
/target/classes/cn/zingfin/domain/service/OcrService.class
/target/classes/cn/zingfin/domain/service/impl/OcrServiceImpl.class
/target/classes/cn/zingfin/common/enums/OpenApiErrorCodeEnums.class
/target/classes/cn/zingfin/exception/OpenApiException.class
/target/classes/cn/zingfin/handle/OpenApiHandle.class
/target/classes/cn/zingfin/properties/OpenApiPlatformKey.class
/target/classes/cn/zingfin/factory/ResponseDataHandleFactory.class
/target/classes/cn/zingfin/web/model/ScanRequest.class
/target/classes/cn/zingfin/common/util/SignVerifyDemo.class
/target/classes/cn/zingfin/web/controller/SmsController.class
/target/classes/cn/zingfin/web/model/SmsRequest.class
/target/classes/cn/zingfin/domain/service/SmsService.class
/target/classes/cn/zingfin/domain/service/impl/SmsServiceImpl.class
/target/test-classes/sms/SmsTest.class
/target/classes/cn/zingfin/config/SwaggerConfig.class
......@@ -153,7 +153,7 @@
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
<configuration>
<mainClass>cn.zingfin.finance.FinanceApplication</mainClass>
<mainClass>cn.zingfin.CommonApplication</mainClass>
<layout>JAR</layout>
</configuration>
<executions>
......
......@@ -9,8 +9,8 @@ public enum OcrCardTypeEnum {
/**
*
*/
CARD_TYPE_ID_CARD_FRONT("id_card_front", "身份证正面"),
CARD_TYPE_ID_CARD_BACK("id_card_front", "身份证反面"),
CARD_TYPE_ID_CARD_FRONT("id-card-front", "身份证正面"),
CARD_TYPE_ID_CARD_BACK("id-card-back", "身份证反面"),
CARD_TYPE_BUSINESS_LICENSE("business-license", "营业执照"),
;
private final String type;
......
......@@ -12,6 +12,9 @@ public enum OpenApiErrorCodeEnums implements ErrorCode {
*
*/
FAIL(10001, "请求失败,联系管理员"),
COMPANY_CREDIT_CODE_ERROR(50001, "企业社会统一信用代码错误"),
COMPANY_NAME_ERROR(50002, "企业名称错误"),
COMPANY_ADDRESS_ERROR(50003, "企业地址错误"),
;
......
package cn.zingfin.common.util;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author jwc
* @date 2020/9/2 14:47
*/
public class HttpUtil {
public static void main(String[] args) {
//接口地址
String myPostUrl = "http://api.chinadatapay.com/government/economic/2130";
//请求参数
Map<String, Object> params = new HashMap<>();
//输入数据宝提供的 key
params.put("key", "");
//企业名称/统一社会信用代码/注册号(备注:企业名称包含括号时一定要传英文状态下的括号)
params.put("name", "");
//查询企业方式(name:企业全称;creditcode:统一社会信用代码;regno:注册号)
params.put("type", "");
//企业查询类型(默认为0(企业),无需输入,1:个体工商户)
params.put("entType", "");
String result = null;
try {
result = post(myPostUrl, params);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("result:\n" + result);
}
public static String post(String url, Map<String, Object> params) throws Exception {
ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
return PostHttpRequest(url, pairs);
}
public static String PostHttpRequest(String Url, List<NameValuePair> params) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
//超时时间
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(300000).setConnectTimeout(300000).build();
String result = null;
try {
HttpPost request = new HttpPost(Url);
request.setConfig(requestConfig);
request.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse respones = client.execute(request);
if (respones.getStatusLine().getStatusCode() == 200) {
result = EntityUtils.toString(respones.getEntity(), "UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
client.close();
}
return result;
}
private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, Object> params) {
ArrayList<NameValuePair> pairs = new ArrayList<>();
if (params == null || params.size() == 0) {
return pairs;
}
for (Map.Entry<String, Object> param : params.entrySet()) {
Object value = param.getValue();
if (value instanceof String[]) {
String[] values = (String[]) value;
for (String v : values) {
pairs.add(new BasicNameValuePair(param.getKey(), v));
}
} else {
if (value instanceof Integer) {
value = Integer.toString((Integer) value);
} else if (value instanceof Long) {
value = Long.toString((Long) value);
}
pairs.add(new BasicNameValuePair(param.getKey(), (String) value));
}
}
return pairs;
}
}
package cn.zingfin.common.util;
import sun.security.tools.keytool.CertAndKeyGen;
import sun.security.x509.*;
import java.io.*;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Date;
import java.util.Map;
import java.util.Random;
/**
* fileName:IssueCert
*
* @author jwc
* @date 2020/9/1 9:36
* -------------------------
* 功能和描述:颁发证书
**/
public class IssueCert {
private static SecureRandom secureRandom;
static {
try {
secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
}
}
/**
* 私钥证书-用于签名
*/
public static final String ISSUE_PFX_FILE = "D:\\signverify\\mycert\\ISSUE.pfx";
/**
* 公钥证书-用于验签
*/
public static final String ISSUE_CRT_FILE = "D:\\signverify\\mycert\\ISSUE.cer";
/**
* 定义pfx根证书文件
*/
public static final String ROOT_ISSUE_PFX_FILE = "D:\\signverify\\rootcert\\ROOTCA.pfx";
/**
* 定义私钥证书的密码
*/
public static final String ROOT_ISSUE_PFX_PASSWORD = "123456";
/**
* 定义crt根证书文件
*/
public static final String ROOT_ISSUE_CRT_FILE = "D:\\signverify\\rootcert\\ROOTCA.cer";
/**
* 定义根证书的别名
*/
public static final String ROOT_ISSUE_ALIAS = "rootca";
/**
* 证书别名
*/
public static final String ISSUE_ALIAS = "subject";
/**
* 私钥证书密码
*/
public static final String ISSUE_PASSWORD = "123456";
/**
* 签名算法
*/
public static final String SIG_ALG = "MD5WithRSA";
public static void main(String[] args) {
try {
X500Name issue = new X500Name("CN=RootCA,OU=ISI,O=BenZeph,L=CD,ST=SC,C=CN");
X500Name subject = new X500Name(
"CN=subject,OU=ISI,O=BenZeph,L=CD,ST=SC,C=CN");
createIssueCert(issue, subject);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
*/
public static void createIssueCert(X500Name rootX500name, X500Name subjectX500Name) {
try {
CertAndKeyGen certAndKeyGen = new CertAndKeyGen("RSA", SIG_ALG, null);
//生成密钥时候使用的随机数的来源
certAndKeyGen.setRandom(secureRandom);
//设置密钥的大小
certAndKeyGen.generate(1024);
//设置时间,设置证书有效期的时候需要使用到
long validity = 60L * 60L * 24L * 3650;
Date startDate = new Date();
Date endDate = new Date();
endDate.setTime(startDate.getTime() + validity * 1000);
//设置证书有效期
CertificateValidity interval = new CertificateValidity(startDate, endDate);
//获取X509CertInfo对象,并为其添加所有的强制属性
X509CertInfo info = new X509CertInfo();
info.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V3));
info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(new Random().nextInt() & 0x7fffffff));
AlgorithmId algID = AlgorithmId.get(SIG_ALG);
info.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(algID));
info.set(X509CertInfo.SUBJECT, subjectX500Name);
info.set(X509CertInfo.KEY, new CertificateX509Key(certAndKeyGen.getPublicKey()));
info.set(X509CertInfo.VALIDITY, interval);
info.set(X509CertInfo.ISSUER, rootX500name);
PrivateKey privateKey = getPrivateKey();
X509CertImpl cert = new X509CertImpl(info);
cert.sign(privateKey, SIG_ALG);
//X509Certificate certificate = (X509Certificate) cert;
X509Certificate x509Certificate = readX509Certificate();
X509Certificate[] x509Certificates = new X509Certificate[]{cert, x509Certificate};
IssueCertUtils.createKeyStore(ISSUE_ALIAS, certAndKeyGen.getPrivateKey(), ISSUE_PASSWORD.toCharArray(), x509Certificates, ISSUE_PFX_FILE);
OutputStream outputStream = new FileOutputStream(new File(ISSUE_CRT_FILE));
outputStream.write(cert.getEncoded());
outputStream.close();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SignatureException e) {
e.printStackTrace();
}
}
/**
* 获取私钥
*
* @return
*/
private static PrivateKey getPrivateKey() {
try {
//后去指定类型的KeyStore对象
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream in = null;
in = new FileInputStream(ROOT_ISSUE_PFX_FILE);
keyStore.load(in, ROOT_ISSUE_PFX_PASSWORD.toCharArray());
in.close();
//使用指定的密码来获取指定的别名对应的私钥
Key key = keyStore.getKey(ROOT_ISSUE_ALIAS, ROOT_ISSUE_PFX_PASSWORD.toCharArray());
return (PrivateKey) key;
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}
return null;
}
/**
* 读取crt根证书信息
*
* @return
*/
private static X509Certificate readX509Certificate() {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(ROOT_ISSUE_CRT_FILE);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream);
inputStream.close();
return certificate;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
\ No newline at end of file
package cn.zingfin.common.util;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
/**
* fileName:IssueCertUtils
*
* @author jwc
* @date 2020/9/1 9:51
* -------------------------
* 功能和描述:工具类
**/
public class IssueCertUtils {
private IssueCertUtils() {
}
/**
* 证书私钥的存储设施
*
* @param alias 别名(会与对应的privateKey关联)
* @param privateKey 密钥-私钥
* @param password 密码(用来保护私钥的密码)
* @param certificates 证书链
* @param pfxFile pfx文件
*/
public static void createKeyStore(String alias, Key privateKey, char[] password, Certificate[] certificates, String pfxFile) {
try {
//获取指定类型的KeyStore对象
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//加载KeyStore
keyStore.load(null, password);
//将给定的密钥分配给指定的别名,并用给定的密码来保护它
keyStore.setKeyEntry(alias, privateKey, password, certificates);
//以下几步就是想私钥证书导出
OutputStream outputStream = new FileOutputStream(pfxFile);
keyStore.store(outputStream, password);
outputStream.close();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
\ No newline at end of file
package cn.zingfin.common.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.security.tools.keytool.CertAndKeyGen;
import sun.security.x509.X500Name;
import java.io.*;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* fileName:IssueRootCert
*
* @author jwc
* @date 2020/9/1 9:34
* -------------------------
* 功能和描述:颁发根证书
**/
public class IssueRootCert {
public static final Logger logger = LoggerFactory.getLogger(IssueRootCert.class);
private static SecureRandom secureRandom;
static {
//定义随机数来源
try {
secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
} catch (NoSuchAlgorithmException e) {
logger.error("算法不存在");
} catch (NoSuchProviderException e) {
logger.error("该随机数提供者不存在");
}
}
/**
* 定义pfx根证书文件
*/
public static final String ROOT_ISSUE_PFX_FILE = "D:\\signverify\\rootcert\\ROOTCA.pfx";
/**
* 定义私钥证书的密码
*/
public static final String ROOT_ISSUE_PFX_PASSWORD = "123456";
/**
* 定义crt根证书文件
*/
public static final String ROOT_ISSUE_CRT_FILE = "D:\\signverify\\rootcert\\ROOTCA.cer";
/**
* 定义根证书的别名
*/
public static final String ROOT_ISSUE_ALIAS = "rootca";
public static void main(String[] args) {
try {
X500Name issue = new X500Name("CN=RootCA,OU=ISI,O=BenZeph,L=CD,ST=SC,C=CN");
issueRootCert(issue);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 签名算法
*/
public static final String ALGORITHM = "MD5WithRSA";
public static void issueRootCert(X500Name x500Name) {
try {
CertAndKeyGen certAndKeyGen = new CertAndKeyGen("RSA", ALGORITHM, null);
//设置生成密钥时使用的随机数的来源
certAndKeyGen.setRandom(secureRandom);
//设置密钥长度,太短容易被攻击破解
certAndKeyGen.generate(1024);
//时间间隔设置为10年(设置证书有效期的时候需要使用到)
long interval = 60L * 60L * 24L * 3650;
//
X509Certificate x509Certificate = certAndKeyGen.getSelfCertificate(x500Name, interval);
X509Certificate[] x509Certificates = new X509Certificate[]{x509Certificate};
IssueCertUtils.createKeyStore(ROOT_ISSUE_ALIAS, certAndKeyGen.getPrivateKey(), ROOT_ISSUE_PFX_PASSWORD.toCharArray(), x509Certificates, ROOT_ISSUE_PFX_FILE);
//根据私钥导出公钥
OutputStream outputStream = new FileOutputStream(new File(ROOT_ISSUE_CRT_FILE));
outputStream.write(x509Certificate.getEncoded());
outputStream.close();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (SignatureException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
\ No newline at end of file
package cn.zingfin.common.util;
import cn.zingfin.exception.BizException;
import cn.zingfin.sign.DefaultClient;
import cn.zingfin.web.model.ScanRequest;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
/**
* fileName:SignVerifyDemo
*
* @author :jwc
* Date :2020/9/1
* -------------------------
* 功能和描述:
**/
public class SignVerifyDemo {
public static final String PRIVATE_KEY_PASSWORD = "123456";
public static final String PUBLIC_KEY_FILE_PATH = "D:\\signverify\\mycert\\ISSUE.cer";
//public static final String PUBLIC_KEY_FILE_PATH = "D:\\signature\\mykey.cer";
public static final String PRIVATE_KEY_FILE_PATH = "D:\\signverify\\mycert\\ISSUE.pfx";
//public static final String PRIVATE_KEY_FILE_PATH = "D:\\signature\\mykey.pfx";
public static final String ALIAS_NAME = "subject";
public static final String DEFAULT_UTF8 = "UTF-8";
public static void main(String[] args) throws BizException {
// String originalData = "Hello我是原始的数据World";
// String sign = sign(originalData);
// System.out.println(sign);
// boolean verify = verify(sign, originalData);
// if (verify) {
// System.out.println("验签通过");
// } else {
// System.out.println("验签失败");
// }
// 我们的公钥
String myPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApusTucCRkkb7RFbwmgD8UcDrnO0R+J0+/SiFxc8EXY3gcyEe/Jv20jL+4aJJmoUzYhe73iP/Fg/BAM+xOlaFxmrc27RjlTtxhJHfIbLADsOrd3Qn6+TzUrUuKsoytIWhIsmty5SmKMLhb+US8JiWAKkR5Qlu92pWvppN4gwWB37i6gCoRZ/swhN5EEA+wFsJMVoX+CHJEOspoT47F/+aYyV38zY4W39aa8roJdtxzZuCkPqRDwy70Nr84jlRJev+su8yiH+Ka/3vY6vE92V+0/gBMbpwwLE6BKmT9sm3XpPXSTh3ybaGxWaBVuv9l03drx0wRVA6FG3s0ut0NRQH5QIDAQAB";
// 对方的私钥
String appPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCm6xO5wJGSRvtEVvCaAPxRwOuc7RH4nT79KIXFzwRdjeBzIR78m/bSMv7hokmahTNiF7veI/8WD8EAz7E6VoXGatzbtGOVO3GEkd8hssAOw6t3dCfr5PNStS4qyjK0haEiya3LlKYowuFv5RLwmJYAqRHlCW73ala+mk3iDBYHfuLqAKhFn+zCE3kQQD7AWwkxWhf4IckQ6ymhPjsX/5pjJXfzNjhbf1pryugl23HNm4KQ+pEPDLvQ2vziOVEl6/6y7zKIf4pr/e9jq8T3ZX7T+AExunDAsToEqZP2ybdek9dJOHfJtobFZoFW6/2XTd2vHTBFUDoUbezS63Q1FAflAgMBAAECggEAcZH6/uT+ZyeyqOH6nN5Uz49TAJfxJVZgWEGtG1TqpHj3IX6Epd28h3K5J26TY/aDape5dMDLPAiGCnZGIOpj5Qgqs7Y+F3i1mTzjM/t6X9FUplc7Hm7N/BVYjza6X0eYxqGwhZbjo1JNryOOynMXhOWETnEntmH9GXzFxyrwBjJ4skUDK78I8vDmazj0hVj7VULWjhH0ufG17mDme7mVjJh1oOpCqEVoCqkMRHWsZg8o0bwYOczxoQG+T9vdR7K9GyLdFctFUGZNlZPsyDVcPrsC4IP+a8630YMxI06DBS/r8xTqS3Dh2YWcuNB0TQsUDg/nms+y+tT9fwFk1rX+9QKBgQD/eqFa+t+RLAkUbAvwLtDpgahtOkM7SnucuF101mnYff8LtjImZ//3pQltrHTRo++b1nWcVQcNb1rljuJ9Fgs9dzMP9DSnziYNcbAxUrcA0kTiDUOuOvxoVjvpGRkHKnEmXhZWQrhOP2sb15LpbDE6GBFs4xcIW8jat1cdem033wKBgQCnQjb2b88OgDssROf7GmXjUsSheeLshrxvf2dxiBomjtg0h9WKjP2ONoLKxwJNICBqvr1SbteIMQmw8/2QwCDvcx0JjNgkwuX6HabwmJ5qJFtn9wHB2gq1JZzoLvfwVr+uCVUF/EDciCqts08ynzYZoCbJ0LhTXdsQSDeGGRrIuwKBgQCcyIobRlhLRAXydXhCFsj4dCyDk7zMtyHzBKW93ROp23DYpCBUt4A7XxnRJ4OtX/jc3xjgLsIcOZlDxZMzBoMxXmSExu5FiNqLZ5ikPEm4hFHnlBJT6zkZYspze4aDgkVcMWNt3pYy1vKJbJtpCo+PQlP3ScnJxGIX72nT2l0KawKBgCrOioyV3xNiBEL3O7wLbIo6k7KUJFzOuwl6PPpUkATQSEthfGiiXv53uw+00UT19PX87S1cyvLDQiy0tW/HjGZcOtFH58W4z+0si55GIT0fIvm/wQZhDJ6CCt9tre0n9pTPNKB8iAkpHGsqWhmln839LBA4yAQmIDvRj8xVPoKjAoGBAP33PLwqJhVxgpG6uMhjmF3fEdTrrd40yEI0SnPHMRnQflbkXr+u6EOUWtVR4y5Buj0+ckNzIZXJ5k2GhpxT/vWmkEiOH4+WpTruQDuoa6S/nHP6QuP2AaGZyBDCfeTAWGp8i5HAsPSBdLyylgnmfkfQEVGZlEgUITjf31exJawu";
ScanRequest scanRequest = new ScanRequest();
scanRequest.setPictureUrl("https://zing-finance.oss-cn-hangzhou.aliyuncs.com/%E8%90%A5%E4%B8%9A%E6%89%A7%E7%85%A7.png");
String md5 = "f5226bbba1eca51c03a56df636d44b1c";
DefaultClient defaultClient = new DefaultClient("http://localhost:8080", appPrivateKey, md5, myPublicKey, "1");
String testData = defaultClient.execute(scanRequest, "/open/api/ocr/v1/scanForBusiness");
System.out.println(testData);
}
/**
* 签名
*/
public static String sign(String originalData) {
String base64Sign = "";
try {
//返回与此给定的别名的密码,并用给定的密钥来恢复它
PrivateKey privateKey = getPrivateKey();
//返回指定签名的Signature对象
Signature sign = Signature.getInstance("SHA1withRSA");
//初始化这个用于签名的对象
sign.initSign(privateKey);
byte[] bysData = originalData.getBytes(DEFAULT_UTF8);
//使用指定的byte数组更新要签名的数据
sign.update(bysData);
//返回所有已经更新数据的签名字节
byte[] signByte = sign.sign();
//对其进行Base64编码
BASE64Encoder encoder = new BASE64Encoder();
base64Sign = encoder.encode(signByte);
} catch (Exception e) {
System.out.println("签名异常");
e.printStackTrace();
}
return base64Sign;
}
/**
* 验签
*
* @param signStr 签名数据
* @param originalData 原始数据
* @return
*/
public static boolean verify(String signStr, String originalData) {
System.out.println("开始进行验签,原始数据为:" + originalData);
try {
//从此证书对象中获取公钥
PublicKey publicKey = getPublicKey();
//将签名数据
BASE64Decoder decoder = new BASE64Decoder();
byte[] signed = decoder.decodeBuffer(signStr);
//通过Signature的getInstance方法,获取指定签名算法的Signature对象
Signature signature = Signature.getInstance("SHA1withRSA");
//初始化用于验证的对象
signature.initVerify(publicKey);
//使用指定的byte[]更新要验证的数据
signature.update(originalData.getBytes(DEFAULT_UTF8));
//验证传入的签名
return signature.verify(signed);
} catch (Exception e) {
return false;
}
}
/**
* 获取公钥
*
* @return
*/
private static PublicKey getPublicKey() {
InputStream in = null;
try {
in = new FileInputStream(PUBLIC_KEY_FILE_PATH);
//获取实现指定证书类型的CertificateFactory对象
CertificateFactory cf = CertificateFactory.getInstance("x509");
//生成一个证书对象,并从执行的输入流中读取数据对它进行初始化
Certificate certificate = cf.generateCertificate(in);
//从此证书中获取公钥
return certificate.getPublicKey();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 获取私钥
*
* @return
*/
private static PrivateKey getPrivateKey() {
InputStream in = null;
try {
in = new FileInputStream(PRIVATE_KEY_FILE_PATH);
//返回指定类型的KeyStore对象
KeyStore keyStore = KeyStore.getInstance("PKCS12");
char[] pscs = PRIVATE_KEY_PASSWORD.toCharArray();
//从给定的输入流中加载此keyStore
keyStore.load(in, pscs);
//返回与给定别名关联的密钥,并用给定的密码来恢复它
return (PrivateKey) keyStore.getKey(ALIAS_NAME, pscs);
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package cn.zingfin.domain.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author jwc
* @date 2020/9/2 16:24
*/
@Data
public class CompanyInfoModel {
@ApiModelProperty(value = "注册地址行政编号")
private String regorgcode;
@ApiModelProperty(value = "统一信用代码")
private String creditcode;
@ApiModelProperty(value = "企业类型")
private String enttype;
@ApiModelProperty(value = "登记机关")
private String regorg;
@ApiModelProperty(value = "成立日期")
private String esdate;
@ApiModelProperty(value = "住址")
private String dom;
@ApiModelProperty(value = "注册号")
private String regno;
@ApiModelProperty(value = "企业名称")
private String entname;
@ApiModelProperty(value = "注册资本币种")
private String regcapcur;
@ApiModelProperty(value = "经营业务范围")
private String zsopscope;
@ApiModelProperty(value = "许可经营项目")
private String abuitem;
@ApiModelProperty(value = "实收资本")
private String reccap;
@ApiModelProperty(value = "原注册号")
private String oriregno;
@ApiModelProperty(value = "吊销日期")
private String revdate;
@ApiModelProperty(value = "法定代表人")
private String frname;
@ApiModelProperty(value = "注销日期")
private String candate;
@ApiModelProperty(value = "最后年检度")
private String ancheyear;
@ApiModelProperty(value = "注册号")
private String regcap;
@ApiModelProperty(value = "经营状态")
private String entstatus;
@ApiModelProperty(value = "企业英文名称")
private String entnameeng;
@ApiModelProperty(value = "经营期限自")
private String opfrom;
@ApiModelProperty(value = "经营期限至")
private String opto;
@ApiModelProperty(value = "组织机构代码")
private String orgcodes;
@ApiModelProperty(value = "核准日期")
private String apprdate;
}
package cn.zingfin.domain.service;
import cn.zingfin.exception.OpenApiException;
import cn.zingfin.web.model.VerificationCompanyRequest;
import cn.zingfin.web.model.VerificationPersonalRequest;
/**
* @author jwc
* @date 2020/9/2 15:27
*/
public interface VerificationService {
Boolean verificationCompany(VerificationCompanyRequest verificationCompanyRequest) throws OpenApiException;
Boolean verificationPersonal(VerificationPersonalRequest verificationPersonalRequest) throws OpenApiException;
}
package cn.zingfin.domain.service.impl;
import cn.zingfin.common.enums.OpenApiErrorCodeEnums;
import cn.zingfin.common.util.HttpUtil;
import cn.zingfin.domain.model.CompanyInfoModel;
import cn.zingfin.domain.service.VerificationService;
import cn.zingfin.exception.OpenApiException;
import cn.zingfin.web.model.VerificationCompanyRequest;
import cn.zingfin.web.model.VerificationPersonalRequest;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @author jwc
* @date 2020/9/2 15:28
*/
@Service
public class VerificationServiceImpl implements VerificationService {
@Override
public Boolean verificationCompany(VerificationCompanyRequest request) throws OpenApiException {
//接口地址
String myPostUrl = "http://api.chinadatapay.com/government/economic/2130";
Map<String, Object> params = getCompanyParam(request);
String result = null;
try {
result = HttpUtil.post(myPostUrl, params);
} catch (Exception e) {
throw new OpenApiException(e.getMessage());
}
return handleCompanyResult(request, result);
}
@Override
public Boolean verificationPersonal(VerificationPersonalRequest request) throws OpenApiException {
//接口地址
String myPostUrl = "http://api.chinadatapay.com/communication/personal/1882";
Map<String, Object> params = getPersonalParam(request);
String result = null;
try {
result = HttpUtil.post(myPostUrl, params);
} catch (Exception e) {
throw new OpenApiException(e.getMessage());
}
return handlePersonalResult(result);
}
private Boolean handlePersonalResult(String result) {
JSONObject json = JSONObject.parseObject(result);
String code = json.getString("code");
if ("10000".equals(code)) {
JSONObject data = json.getJSONObject("data");
String resultCode = data.getString("result");
return "1".equals(resultCode);
}
return false;
}
private Map<String, Object> getPersonalParam(VerificationPersonalRequest request) {
//请求参数
Map<String, Object> params = new HashMap<>();
//输入数据宝提供的 key
params.put("key", "366a2ad078c8436a17f02b927f2628f0");
//姓名
params.put("name", request.getName());
//身份证号
params.put("idcard", request.getNumber());
return params;
}
private boolean handleCompanyResult(VerificationCompanyRequest request, String result) throws OpenApiException {
JSONObject json = JSONObject.parseObject(result);
String code = json.getString("code");
// 10000:成功;10001:查询失败;10002:企业数据为空
if ("10000".equals(code)) {
JSONObject data = json.getJSONObject("data");
JSONObject basic = data.getJSONObject("basic");
CompanyInfoModel companyInfoModel = JSONObject.toJavaObject(basic, CompanyInfoModel.class);
if (!Objects.equals(companyInfoModel.getCreditcode(), request.getCreditCode())) {
throw new OpenApiException(OpenApiErrorCodeEnums.COMPANY_CREDIT_CODE_ERROR);
}
if (!Objects.equals(companyInfoModel.getDom(), request.getAddress())) {
throw new OpenApiException(OpenApiErrorCodeEnums.COMPANY_ADDRESS_ERROR);
}
if (!Objects.equals(companyInfoModel.getEntname(), request.getCompanyName())) {
throw new OpenApiException(OpenApiErrorCodeEnums.COMPANY_NAME_ERROR);
}
return true;
}
return false;
}
private Map<String, Object> getCompanyParam(VerificationCompanyRequest verificationCompanyRequest) {
//请求参数
Map<String, Object> params = new HashMap<>();
//输入数据宝提供的 key
params.put("key", "ce0cfd8ee3c18d624f8916c04e865494");
//企业名称/统一社会信用代码/注册号(备注:企业名称包含括号时一定要传英文状态下的括号)
params.put("name", verificationCompanyRequest.getCreditCode());
//查询企业方式(name:企业全称;creditcode:统一社会信用代码;regno:注册号)
params.put("type", "creditcode");
//企业查询类型(默认为0(企业),无需输入,1:个体工商户)
params.put("entType", "");
return params;
}
}
package cn.zingfin.web.controller;
import cn.zingfin.domain.service.VerificationService;
import cn.zingfin.domain.service.impl.VerificationServiceImpl;
import cn.zingfin.exception.OpenApiException;
import cn.zingfin.handle.OpenApiHandle;
import cn.zingfin.web.model.SmsRequest;
import cn.zingfin.web.model.VerificationCompanyRequest;
import cn.zingfin.web.model.VerificationPersonalRequest;
import com.aliyuncs.exceptions.ClientException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* @author jwc
* @date 2020/9/2 15:26
*/
@Api(tags = "认证服务")
@RequestMapping("/open/api/verification")
@RestController
public class VerificationController {
private final OpenApiHandle openApiHandle;
private final VerificationServiceImpl verificationService;
public VerificationController(OpenApiHandle openApiHandle, VerificationServiceImpl verificationService) {
this.openApiHandle = openApiHandle;
this.verificationService = verificationService;
}
@ApiOperation("企业验证")
@PostMapping("/v1/company")
public Map<String, String> company(HttpServletRequest request, HttpServletResponse response) throws ClientException, OpenApiException {
VerificationCompanyRequest verificationCompanyRequest = openApiHandle.execute(request, VerificationCompanyRequest.class);
Boolean isSuccess = verificationService.verificationCompany(verificationCompanyRequest);
return openApiHandle.returnHandle(isSuccess, response);
}
@ApiOperation("个人实名验证")
@PostMapping("/v1/personal")
public Map<String, String> personal(HttpServletRequest request, HttpServletResponse response) throws ClientException, OpenApiException {
VerificationPersonalRequest verificationPersonalRequest = openApiHandle.execute(request, VerificationPersonalRequest.class);
Boolean isSuccess = verificationService.verificationPersonal(verificationPersonalRequest);
return openApiHandle.returnHandle(isSuccess, response);
}
}
package cn.zingfin.web.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author jwc
* @date 2020/9/2 15:34
*/
@Data
public class VerificationCompanyRequest {
@ApiModelProperty(value = "企业名称(企业名称包含括号时一定要传英文状态下的括号)")
private String companyName;
@ApiModelProperty(value = "企业注册地")
private String address;
@ApiModelProperty(value = "社会统一信用代码")
private String creditCode;
@ApiModelProperty(value = "企业注册资金")
private String capital;
}
package cn.zingfin.web.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author jwc
* @date 2020/9/2 17:09
*/
@Data
public class VerificationPersonalRequest {
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "身份证号")
private String number;
}
......@@ -14,7 +14,7 @@ public class OcrIdCardTest {
// 对方的私钥
String appPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCm6xO5wJGSRvtEVvCaAPxRwOuc7RH4nT79KIXFzwRdjeBzIR78m/bSMv7hokmahTNiF7veI/8WD8EAz7E6VoXGatzbtGOVO3GEkd8hssAOw6t3dCfr5PNStS4qyjK0haEiya3LlKYowuFv5RLwmJYAqRHlCW73ala+mk3iDBYHfuLqAKhFn+zCE3kQQD7AWwkxWhf4IckQ6ymhPjsX/5pjJXfzNjhbf1pryugl23HNm4KQ+pEPDLvQ2vziOVEl6/6y7zKIf4pr/e9jq8T3ZX7T+AExunDAsToEqZP2ybdek9dJOHfJtobFZoFW6/2XTd2vHTBFUDoUbezS63Q1FAflAgMBAAECggEAcZH6/uT+ZyeyqOH6nN5Uz49TAJfxJVZgWEGtG1TqpHj3IX6Epd28h3K5J26TY/aDape5dMDLPAiGCnZGIOpj5Qgqs7Y+F3i1mTzjM/t6X9FUplc7Hm7N/BVYjza6X0eYxqGwhZbjo1JNryOOynMXhOWETnEntmH9GXzFxyrwBjJ4skUDK78I8vDmazj0hVj7VULWjhH0ufG17mDme7mVjJh1oOpCqEVoCqkMRHWsZg8o0bwYOczxoQG+T9vdR7K9GyLdFctFUGZNlZPsyDVcPrsC4IP+a8630YMxI06DBS/r8xTqS3Dh2YWcuNB0TQsUDg/nms+y+tT9fwFk1rX+9QKBgQD/eqFa+t+RLAkUbAvwLtDpgahtOkM7SnucuF101mnYff8LtjImZ//3pQltrHTRo++b1nWcVQcNb1rljuJ9Fgs9dzMP9DSnziYNcbAxUrcA0kTiDUOuOvxoVjvpGRkHKnEmXhZWQrhOP2sb15LpbDE6GBFs4xcIW8jat1cdem033wKBgQCnQjb2b88OgDssROf7GmXjUsSheeLshrxvf2dxiBomjtg0h9WKjP2ONoLKxwJNICBqvr1SbteIMQmw8/2QwCDvcx0JjNgkwuX6HabwmJ5qJFtn9wHB2gq1JZzoLvfwVr+uCVUF/EDciCqts08ynzYZoCbJ0LhTXdsQSDeGGRrIuwKBgQCcyIobRlhLRAXydXhCFsj4dCyDk7zMtyHzBKW93ROp23DYpCBUt4A7XxnRJ4OtX/jc3xjgLsIcOZlDxZMzBoMxXmSExu5FiNqLZ5ikPEm4hFHnlBJT6zkZYspze4aDgkVcMWNt3pYy1vKJbJtpCo+PQlP3ScnJxGIX72nT2l0KawKBgCrOioyV3xNiBEL3O7wLbIo6k7KUJFzOuwl6PPpUkATQSEthfGiiXv53uw+00UT19PX87S1cyvLDQiy0tW/HjGZcOtFH58W4z+0si55GIT0fIvm/wQZhDJ6CCt9tre0n9pTPNKB8iAkpHGsqWhmln839LBA4yAQmIDvRj8xVPoKjAoGBAP33PLwqJhVxgpG6uMhjmF3fEdTrrd40yEI0SnPHMRnQflbkXr+u6EOUWtVR4y5Buj0+ckNzIZXJ5k2GhpxT/vWmkEiOH4+WpTruQDuoa6S/nHP6QuP2AaGZyBDCfeTAWGp8i5HAsPSBdLyylgnmfkfQEVGZlEgUITjf31exJawu";
ScanRequest scanRequest = new ScanRequest();
scanRequest.setPictureUrl("https://zing-finance.oss-cn-hangzhou.aliyuncs.com/%E8%90%A5%E4%B8%9A%E6%89%A7%E7%85%A7.png");
scanRequest.setPictureUrl("https://zing-finance.oss-cn-hangzhou.aliyuncs.com/%E8%BA%AB%E4%BB%BD%E8%AF%81%E6%AD%A3%E9%9D%A2.jpg");
String md5 = "f5226bbba1eca51c03a56df636d44b1c";
DefaultClient defaultClient = new DefaultClient("http://localhost:8080", appPrivateKey, md5, myPublicKey, "1");
String testData = defaultClient.execute(scanRequest, "/open/api/ocr/v1/scanForIdCard");
......
package verification;
import cn.zingfin.common.util.HttpUtil;
import java.util.HashMap;
import java.util.Map;
/**
* @author jwc
* @date 2020/9/2 15:15
*/
public class CommunicationPersonal {
public static void main(String[] args) {
//接口地址
String myPostUrl = "http://api.chinadatapay.com/communication/personal/1882";
//请求参数
Map< String, Object> params = new HashMap<>();
//输入数据宝提供的 key
params.put("key", "366a2ad078c8436a17f02b927f2628f0");
//姓名
params.put("name", "计万成");
//身份证号
params.put("idcard", "342921199302282819");
String result = null;
try {
result = HttpUtil.post(myPostUrl, params);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("result:\n" + result);
}
}
package verification;
import cn.zingfin.exception.BizException;
import cn.zingfin.sign.DefaultClient;
import cn.zingfin.web.model.SmsRequest;
import cn.zingfin.web.model.VerificationCompanyRequest;
/**
* @author jwc
* @date 2020/9/3 9:05
*/
public class CompanyTest {
public static void main(String[] args) throws BizException {
String myPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApusTucCRkkb7RFbwmgD8UcDrnO0R+J0+/SiFxc8EXY3gcyEe/Jv20jL+4aJJmoUzYhe73iP/Fg/BAM+xOlaFxmrc27RjlTtxhJHfIbLADsOrd3Qn6+TzUrUuKsoytIWhIsmty5SmKMLhb+US8JiWAKkR5Qlu92pWvppN4gwWB37i6gCoRZ/swhN5EEA+wFsJMVoX+CHJEOspoT47F/+aYyV38zY4W39aa8roJdtxzZuCkPqRDwy70Nr84jlRJev+su8yiH+Ka/3vY6vE92V+0/gBMbpwwLE6BKmT9sm3XpPXSTh3ybaGxWaBVuv9l03drx0wRVA6FG3s0ut0NRQH5QIDAQAB";
// 对方的私钥
String appPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCm6xO5wJGSRvtEVvCaAPxRwOuc7RH4nT79KIXFzwRdjeBzIR78m/bSMv7hokmahTNiF7veI/8WD8EAz7E6VoXGatzbtGOVO3GEkd8hssAOw6t3dCfr5PNStS4qyjK0haEiya3LlKYowuFv5RLwmJYAqRHlCW73ala+mk3iDBYHfuLqAKhFn+zCE3kQQD7AWwkxWhf4IckQ6ymhPjsX/5pjJXfzNjhbf1pryugl23HNm4KQ+pEPDLvQ2vziOVEl6/6y7zKIf4pr/e9jq8T3ZX7T+AExunDAsToEqZP2ybdek9dJOHfJtobFZoFW6/2XTd2vHTBFUDoUbezS63Q1FAflAgMBAAECggEAcZH6/uT+ZyeyqOH6nN5Uz49TAJfxJVZgWEGtG1TqpHj3IX6Epd28h3K5J26TY/aDape5dMDLPAiGCnZGIOpj5Qgqs7Y+F3i1mTzjM/t6X9FUplc7Hm7N/BVYjza6X0eYxqGwhZbjo1JNryOOynMXhOWETnEntmH9GXzFxyrwBjJ4skUDK78I8vDmazj0hVj7VULWjhH0ufG17mDme7mVjJh1oOpCqEVoCqkMRHWsZg8o0bwYOczxoQG+T9vdR7K9GyLdFctFUGZNlZPsyDVcPrsC4IP+a8630YMxI06DBS/r8xTqS3Dh2YWcuNB0TQsUDg/nms+y+tT9fwFk1rX+9QKBgQD/eqFa+t+RLAkUbAvwLtDpgahtOkM7SnucuF101mnYff8LtjImZ//3pQltrHTRo++b1nWcVQcNb1rljuJ9Fgs9dzMP9DSnziYNcbAxUrcA0kTiDUOuOvxoVjvpGRkHKnEmXhZWQrhOP2sb15LpbDE6GBFs4xcIW8jat1cdem033wKBgQCnQjb2b88OgDssROf7GmXjUsSheeLshrxvf2dxiBomjtg0h9WKjP2ONoLKxwJNICBqvr1SbteIMQmw8/2QwCDvcx0JjNgkwuX6HabwmJ5qJFtn9wHB2gq1JZzoLvfwVr+uCVUF/EDciCqts08ynzYZoCbJ0LhTXdsQSDeGGRrIuwKBgQCcyIobRlhLRAXydXhCFsj4dCyDk7zMtyHzBKW93ROp23DYpCBUt4A7XxnRJ4OtX/jc3xjgLsIcOZlDxZMzBoMxXmSExu5FiNqLZ5ikPEm4hFHnlBJT6zkZYspze4aDgkVcMWNt3pYy1vKJbJtpCo+PQlP3ScnJxGIX72nT2l0KawKBgCrOioyV3xNiBEL3O7wLbIo6k7KUJFzOuwl6PPpUkATQSEthfGiiXv53uw+00UT19PX87S1cyvLDQiy0tW/HjGZcOtFH58W4z+0si55GIT0fIvm/wQZhDJ6CCt9tre0n9pTPNKB8iAkpHGsqWhmln839LBA4yAQmIDvRj8xVPoKjAoGBAP33PLwqJhVxgpG6uMhjmF3fEdTrrd40yEI0SnPHMRnQflbkXr+u6EOUWtVR4y5Buj0+ckNzIZXJ5k2GhpxT/vWmkEiOH4+WpTruQDuoa6S/nHP6QuP2AaGZyBDCfeTAWGp8i5HAsPSBdLyylgnmfkfQEVGZlEgUITjf31exJawu";
String md5 = "f5226bbba1eca51c03a56df636d44b1c";
VerificationCompanyRequest request = new VerificationCompanyRequest();
request.setCreditCode("ce0cfd8ee3c18d624f8916c04e865494");
request.setCompanyName("紫鹰科技发展有限公司");
request.setAddress("浙江省杭州市余杭区仓前街道龙舟路6号5幢501-1室");
DefaultClient defaultClient = new DefaultClient("http://localhost:8080", appPrivateKey, md5, myPublicKey, "1");
String testData = defaultClient.execute(request, "/open/api/verification/v1/company");
System.out.println(testData);
}
}
package verification;
import cn.zingfin.common.enums.OpenApiErrorCodeEnums;
import cn.zingfin.common.util.HttpUtil;
import cn.zingfin.domain.model.CompanyInfoModel;
import cn.zingfin.exception.OpenApiException;
import cn.zingfin.web.model.VerificationCompanyRequest;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @author jwc
* @date 2020/9/2 14:46
*/
public class GovermentEconomic {
public static void main(String[] args) throws OpenApiException {
//接口地址
String myPostUrl = "http://api.chinadatapay.com/government/economic/2130";
//请求参数
Map<String, Object> params = new HashMap<>();
//输入数据宝提供的 key
params.put("key", "ce0cfd8ee3c18d624f8916c04e865494");
//企业名称/统一社会信用代码/注册号(备注:企业名称包含括号时一定要传英文状态下的括号)
params.put("name", "91330110MA2H2FNX47");
//查询企业方式(name:企业全称;creditcode:统一社会信用代码;regno:注册号)
params.put("type", "creditcode");
//企业查询类型(默认为0(企业),无需输入,1:个体工商户)
params.put("entType", "");
String result = null;
try {
result = HttpUtil.post(myPostUrl, params);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("result:\n" + result);
// VerificationCompanyRequest request = new VerificationCompanyRequest();
// request.setAddress("浙江省杭州市余杭区仓前街道龙舟路6号5幢501-1室");
// request.setCompanyName("紫鹰科技发展有限公");
// request.setCreditCode("91330110MA2H2FNX47");
// String result = "{\"code\":\"10000\",\"message\":\"成功\",\"data\":{\"basic\":{\"esdate\":\"2020-03-03\",\"regno\":\"330184001189242\",\"creditcode\":\"91330110MA2H2FNX47\",\"zsopscope\":\"一般项目:技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;仓储服务;装卸搬运;互联网数据服务;物联网服务;人工智能双创服务平台;数字文化创意内容应用服务;大数据服务;人工智能公共服务平台;人工智能公共数据平台;人工智能基础资源与技术平台;软件开发;软件外包服务;农业机械租赁;企业管理;市场营销策划;教育咨询服务(不含教育培训活动);企业形象策划;广告设计、制作、代理;图文设计制作;农业科学研究和试验发展;创业空间服务;互联网安全服务;林业产品批发;第二类医疗器械零售;日用口罩(非医用)销售;第一类医疗器械零售;新鲜水果零售;食用农产品零售;新鲜蔬菜零售;物联网技术服务;人工智能行业应用系统;人工智能通用应用系统;智能控制系统集成;数字文化创意软件开发;日用百货批发;第二类医疗器械批发;日用品零售;服装服饰零售;个人卫生用品零售;计算机软硬件及辅助设备零售;电子办公设备零售;通信设备零售;化妆品零售;单用途商业预付卡代理销售;共享自行车服务;停车场服务(除依法须经批准的项目外,凭营业执照依法自主开展经营活动)。\",\"dom\":\"浙江省杭州市余杭区仓前街道龙舟路6号5幢501-1室\",\"reccap\":\"\",\"entnameeng\":\"紫鹰科技发展有限公司\",\"oriregno\":\"\",\"enttype\":\"其他有限责任公司\",\"opto\":\"长期\",\"ancheyear\":\"\",\"opfrom\":\"2020-03-03\",\"regcapcur\":\"人民币元\",\"orgcodes\":\"MA2H2FNX4\",\"candate\":\"\",\"entname\":\"紫鹰科技发展有限公司\",\"regcap\":\"5000.000000\",\"regorg\":\"杭州市余杭区市场监督管理局\",\"revdate\":\"\",\"entstatus\":\"在营(开业)\",\"abuitem\":\"\",\"regorgcode\":\"330184\",\"frname\":\"胡宝国\",\"apprdate\":\"2020-03-26\"}},\"seqNo\":\"0NFAG6812009021509\"}";
// JSONObject json = JSONObject.parseObject(result);
// int code = json.getIntValue("code");
// // 10000:成功;10001:查询失败;10002:企业数据为空
// if (10000 == code) {
// JSONObject data = json.getJSONObject("data");
// JSONObject basic = data.getJSONObject("basic");
// CompanyInfoModel companyInfoModel = JSONObject.toJavaObject(basic, CompanyInfoModel.class);
// if (!Objects.equals(companyInfoModel.getCreditcode(), request.getCreditCode())) {
// throw new OpenApiException(OpenApiErrorCodeEnums.COMPANY_CREDIT_CODE_ERROR);
// }
// if (!Objects.equals(companyInfoModel.getDom(), request.getAddress())) {
// throw new OpenApiException(OpenApiErrorCodeEnums.COMPANY_ADDRESS_ERROR);
// }
// if (!Objects.equals(companyInfoModel.getEntname(), request.getCompanyName())) {
// throw new OpenApiException(OpenApiErrorCodeEnums.COMPANY_NAME_ERROR);
// }
//// return true;
// System.out.println("true");
// }
//// return false;
// System.out.println("false");
}
}
package verification;
import cn.zingfin.exception.BizException;
import cn.zingfin.sign.DefaultClient;
import cn.zingfin.web.model.SmsRequest;
import cn.zingfin.web.model.VerificationPersonalRequest;
/**
* @author jwc
* @date 2020/9/3 9:05
*/
public class PersonalTest {
public static void main(String[] args) throws BizException {
String myPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApusTucCRkkb7RFbwmgD8UcDrnO0R+J0+/SiFxc8EXY3gcyEe/Jv20jL+4aJJmoUzYhe73iP/Fg/BAM+xOlaFxmrc27RjlTtxhJHfIbLADsOrd3Qn6+TzUrUuKsoytIWhIsmty5SmKMLhb+US8JiWAKkR5Qlu92pWvppN4gwWB37i6gCoRZ/swhN5EEA+wFsJMVoX+CHJEOspoT47F/+aYyV38zY4W39aa8roJdtxzZuCkPqRDwy70Nr84jlRJev+su8yiH+Ka/3vY6vE92V+0/gBMbpwwLE6BKmT9sm3XpPXSTh3ybaGxWaBVuv9l03drx0wRVA6FG3s0ut0NRQH5QIDAQAB";
// 对方的私钥
String appPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCm6xO5wJGSRvtEVvCaAPxRwOuc7RH4nT79KIXFzwRdjeBzIR78m/bSMv7hokmahTNiF7veI/8WD8EAz7E6VoXGatzbtGOVO3GEkd8hssAOw6t3dCfr5PNStS4qyjK0haEiya3LlKYowuFv5RLwmJYAqRHlCW73ala+mk3iDBYHfuLqAKhFn+zCE3kQQD7AWwkxWhf4IckQ6ymhPjsX/5pjJXfzNjhbf1pryugl23HNm4KQ+pEPDLvQ2vziOVEl6/6y7zKIf4pr/e9jq8T3ZX7T+AExunDAsToEqZP2ybdek9dJOHfJtobFZoFW6/2XTd2vHTBFUDoUbezS63Q1FAflAgMBAAECggEAcZH6/uT+ZyeyqOH6nN5Uz49TAJfxJVZgWEGtG1TqpHj3IX6Epd28h3K5J26TY/aDape5dMDLPAiGCnZGIOpj5Qgqs7Y+F3i1mTzjM/t6X9FUplc7Hm7N/BVYjza6X0eYxqGwhZbjo1JNryOOynMXhOWETnEntmH9GXzFxyrwBjJ4skUDK78I8vDmazj0hVj7VULWjhH0ufG17mDme7mVjJh1oOpCqEVoCqkMRHWsZg8o0bwYOczxoQG+T9vdR7K9GyLdFctFUGZNlZPsyDVcPrsC4IP+a8630YMxI06DBS/r8xTqS3Dh2YWcuNB0TQsUDg/nms+y+tT9fwFk1rX+9QKBgQD/eqFa+t+RLAkUbAvwLtDpgahtOkM7SnucuF101mnYff8LtjImZ//3pQltrHTRo++b1nWcVQcNb1rljuJ9Fgs9dzMP9DSnziYNcbAxUrcA0kTiDUOuOvxoVjvpGRkHKnEmXhZWQrhOP2sb15LpbDE6GBFs4xcIW8jat1cdem033wKBgQCnQjb2b88OgDssROf7GmXjUsSheeLshrxvf2dxiBomjtg0h9WKjP2ONoLKxwJNICBqvr1SbteIMQmw8/2QwCDvcx0JjNgkwuX6HabwmJ5qJFtn9wHB2gq1JZzoLvfwVr+uCVUF/EDciCqts08ynzYZoCbJ0LhTXdsQSDeGGRrIuwKBgQCcyIobRlhLRAXydXhCFsj4dCyDk7zMtyHzBKW93ROp23DYpCBUt4A7XxnRJ4OtX/jc3xjgLsIcOZlDxZMzBoMxXmSExu5FiNqLZ5ikPEm4hFHnlBJT6zkZYspze4aDgkVcMWNt3pYy1vKJbJtpCo+PQlP3ScnJxGIX72nT2l0KawKBgCrOioyV3xNiBEL3O7wLbIo6k7KUJFzOuwl6PPpUkATQSEthfGiiXv53uw+00UT19PX87S1cyvLDQiy0tW/HjGZcOtFH58W4z+0si55GIT0fIvm/wQZhDJ6CCt9tre0n9pTPNKB8iAkpHGsqWhmln839LBA4yAQmIDvRj8xVPoKjAoGBAP33PLwqJhVxgpG6uMhjmF3fEdTrrd40yEI0SnPHMRnQflbkXr+u6EOUWtVR4y5Buj0+ckNzIZXJ5k2GhpxT/vWmkEiOH4+WpTruQDuoa6S/nHP6QuP2AaGZyBDCfeTAWGp8i5HAsPSBdLyylgnmfkfQEVGZlEgUITjf31exJawu";
VerificationPersonalRequest request = new VerificationPersonalRequest();
request.setName("计万成");
request.setNumber("342921199302282819");
String md5 = "f5226bbba1eca51c03a56df636d44b1c";
DefaultClient defaultClient = new DefaultClient("http://localhost:8080", appPrivateKey, md5, myPublicKey, "1");
String testData = defaultClient.execute(request, "/open/api/verification/v1/personal");
System.out.println(testData);
}
}
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