This commit is contained in:
清晨
2025-04-21 17:51:04 +08:00
commit 4da99037e8
1066 changed files with 92409 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-common-pay</artifactId>
<description>
ruoyi-common-pay 拉卡拉支付服务
</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--<dependency>
<groupId>com.lkl.laop.sdk</groupId>
<artifactId>lkl-java-sdk</artifactId>
<version>1.0.7</version>
</dependency>-->
<dependency>
<groupId>com.lkl.laop.sdk</groupId>
<artifactId>lkl-laop-java-sdk</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.53</version>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
<version>0.0.20131108.vaadin1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version> <!-- 请根据需要选择版本 -->
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,85 @@
package com.lakala.zf.laop.java.sdk.demo;
import com.lkl.laop.sdk.utils.JsonUtils;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
/**
* @author nxj
* @date 2024/5/17 10:20
* @description 用于测试demo中接口是否均能正常响应
*/
public class AutoTest {
public static void main(String[] args) throws Exception {
String packageName = "com.lakala.zf.laop.java.sdk.demo.v2";
List<Class<?>> classes = getClasses(packageName);
String packageName2 = "com.lakala.zf.laop.java.sdk.demo.v3";
classes.addAll(getClasses(packageName2));
List<Class<?>> errorClasses = new ArrayList<>();
for (Class<?> clazz : classes) {
if (hasMainMethod(clazz)) {
Method mainMethod = clazz.getDeclaredMethod("main", String[].class);
try {
mainMethod.invoke(null, (Object) new String[0]);
} catch (Exception e) {
errorClasses.add(clazz);
}
}
}
System.out.println("========接口demo执行完成=======");
System.out.printf("========失败信息:%s=======%n", JsonUtils.toJSONString(errorClasses));
}
private static boolean hasMainMethod(Class<?> clazz) {
for (Method method : clazz.getDeclaredMethods()) {
if (method.getName().equals("main")) {
return true;
}
}
return false;
}
private static List<Class<?>> getClasses(String packageName) throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class<?>> classes = new ArrayList<>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes;
}
private static List<Class<?>> findClasses(File directory, String packageName) throws ClassNotFoundException {
List<Class<?>> classes = new ArrayList<>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !file.getName().contains(".");
classes.addAll(findClasses(file, packageName + "." + file.getName()));
} else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));
}
}
return classes;
}
}

View File

@@ -0,0 +1,71 @@
package com.lakala.zf.laop.java.sdk.demo;
import com.lkl.laop.sdk.Config;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.exception.SDKException;
/***
* @Description 功能描述使用Java配置方式初始化SDK
* @Date 2023/7/19 15:41
*/
public class BaseCommonDemo {
// 拉卡拉appId
private static final String appId = "OP10000499";
// 你的证书序列号
private static final String serialNo = "0195119ac8ac";
/*//商户私钥信息地址
private static final String priKeyPath = "D:\\manage\\jcs\\OP10000499商户私钥.txt";
//拉卡拉支付平台证书地址
private static final String lklCerPath = "D:\\manage\\jcs\\平台公钥生产.cer";
//拉卡拉支付平台证书地址2(用于拉卡拉通知验签)
private static final String lklNotifyCerPath = "D:\\manage\\jcs\\平台公钥生产.cer";*/
//商户私钥信息地址
private static final String priKeyPath = "/home/manage/jcs/OP10000499商户私钥.txt";
//拉卡拉支付平台证书地址
private static final String lklCerPath = "/home/manage/jcs/平台公钥生产.cer";
//拉卡拉支付平台证书地址2(用于拉卡拉通知验签)
private static final String lklNotifyCerPath = "/home/manage/jcs/平台公钥生产.cer";
/**
* 拉卡拉报文加密对称性密钥
*/
private static final String sm4Key = "uIj6CPg1GZAY10dXFfsEAQ==";
/**
* 服务地址
*/
private static final String serverUrl = "https://s2.lakala.com";
private static volatile boolean init = false;
/***
* @Description: 初始化设置商户公共参数(全局只需设置一次)
* @throws Exception
*/
public static void doInit() throws Exception {
if(!init) {
init = initByJava();
}
}
public static boolean initByJava() throws SDKException {
Config config = new Config();
config.setAppId(appId);
config.setSerialNo(serialNo);
config.setPriKeyPath(priKeyPath);
config.setLklCerPath(lklCerPath);
config.setLklNotifyCerPath(lklNotifyCerPath);
config.setServerUrl(serverUrl);
config.setSm4Key(sm4Key);
return LKLSDK.init(config);
}
}

View File

@@ -0,0 +1,32 @@
package com.lakala.zf.laop.java.sdk.demo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.exception.SDKException;
/***
* @author admin
* @Description 功能描述使用properties文件配置方式初始化SDK
* @Date 2023/7/19 15:41
*/
public class BaseCommonDemo2 {
// private static String configPath = "ruoyi-common/ruoyi-common-pay/src/main/resources/lkl-sdk-config.properties";
private static String configPath = "ruoyi-common/ruoyi-common-pay/src/main/resources/lkl-sdk-config-prod.properties";
private static boolean init = false;
/***
* @Description: 初始化设置商户公共参数(全局只需设置一次)
* @throws Exception
*/
public static void doInit() throws Exception {
if (!init) {
init = initByFile();
}
}
public static boolean initByFile() throws SDKException {
return LKLSDK.init(configPath);
}
}

View File

@@ -0,0 +1,136 @@
package com.lakala.zf.laop.java.sdk.demo;
//import com.lkl.laop.sdk.Config2;
import com.lkl.laop.sdk.exception.SDKException;
/**
* @author nxj
* @date 2024/5/13 11:07
* @description 支持证书以字符串形式传入
*/
public class BaseCommonDemo3 {
private static final String appId = "OP00000003"; // 拉卡拉appId
private static final String serialNo = "00dfba8194c41b84cf"; // 你的证书序列号
/**
* 商户私钥信息
*/
private static final String priKeyStr = "-----BEGIN PRIVATE KEY-----\n" +
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx\n" +
"rIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M\n" +
"8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD\n" +
"ZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW\n" +
"dhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN\n" +
"rpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1\n" +
"5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4\n" +
"mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7\n" +
"qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK\n" +
"NXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X\n" +
"3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK\n" +
"TPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk\n" +
"9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH\n" +
"STTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0\n" +
"Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv\n" +
"AtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI\n" +
"RgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke\n" +
"MzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4\n" +
"8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP\n" +
"scd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi\n" +
"bEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn\n" +
"Ll2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz\n" +
"NzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j\n" +
"Aylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq\n" +
"CHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6\n" +
"QsFLQgFyXgvDnzr/o+hQJelW\n" +
"-----END PRIVATE KEY-----";
/**
* 拉卡拉支付平台证书
*/
private static final String lklCerStr = "-----BEGIN CERTIFICATE-----\n" +
"MIIEMTCCAxmgAwIBAgIGAXRTgcMnMA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNVBAYT\n" +
"AkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdCZWlKaW5nMRcwFQYDVQQK\n" +
"DA5MYWthbGEgQ28uLEx0ZDEqMCgGA1UEAwwhTGFrYWxhIE9yZ2FuaXphdGlvbiBW\n" +
"YWxpZGF0aW9uIENBMB4XDTIwMTAxMDA1MjQxNFoXDTMwMTAwODA1MjQxNFowZTEL\n" +
"MAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaUppbmcxEDAOBgNVBAcMB0JlaUppbmcx\n" +
"FzAVBgNVBAoMDkxha2FsYSBDby4sTHRkMRkwFwYDVQQDDBBBUElHVy5MQUtBTEEu\n" +
"Q09NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt1zHL54HiI8d2sLJ\n" +
"lwoQji3/ln0nsvfZ/XVpOjuB+1YR6/0LdxEDMC/hxI6iH2Rm5MjwWz3dmN/6BZeI\n" +
"gwGeTOWJUZFARo8UduKrlhC6gWMRpAiiGC8wA8stikc5gYB+UeFVZi/aJ0WN0cpP\n" +
"JYCvPBhxhMvhVDnd4hNohnR1L7k0ypuWg0YwGjC25FaNAEFBYP9EYUyCJjE//9Z7\n" +
"sMzHR9SJYCqqo6r9bOH9G6sWKuEp+osuAh+kJIxJMHfipw7w3tEcWG0hce9u/el4\n" +
"cYJtg8/PPMVoccKmeCzMvarr7jdKP4lenJbtwlgyfs+JgNu60KMUJH8RS72wC9NY\n" +
"uFz09wIDAQABo4HVMIHSMIGSBgNVHSMEgYowgYeAFCnH4DkZPR6CZxRn/kIqVsMo\n" +
"dJHpoWekZTBjMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpSmluZzEQMA4GA1UE\n" +
"BwwHQmVpSmluZzEXMBUGA1UECgwOTGFrYWxhIENvLixMdGQxFzAVBgNVBAMMDkxh\n" +
"a2FsYSBSb290IENBggYBaiUALIowHQYDVR0OBBYEFJ2Kx9YZfmWpkKFnC33C0r5D\n" +
"K3rFMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUA\n" +
"A4IBAQBZoeU0XyH9O0LGF9R+JyGwfU/O5amoB97VeM+5n9v2z8OCiIJ8eXVGKN9L\n" +
"tl9QkpTEanYwK30KkpHcJP1xfVkhPi/cCMgfTWQ5eKYC7Zm16zk7n4CP6IIgZIqm\n" +
"TVGsIGKk8RzWseyWPB3lfqMDR52V1tdA1S8lJ7a2Xnpt5M2jkDXoArl3SVSwCb4D\n" +
"AmThYhak48M++fUJNYII9JBGRdRGbfJ2GSFdPXgesUL2CwlReQwbW4GZkYGOg9LK\n" +
"CNPK6XShlNdvgPv0CCR08KCYRwC3HZ0y1F0NjaKzYdGNPrvOq9lA495ONZCvzYDo\n" +
"gmsu/kd6eqxTs/JwdaIYr4sCMg8Z\n" +
"-----END CERTIFICATE-----";
/**
* 拉卡拉支付平台证书2(用于拉卡拉通知验签)
*/
private static final String lklNotifyCerStr = "-----BEGIN CERTIFICATE-----\n" +
"MIIEMTCCAxmgAwIBAgIGAXRTgcMnMA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNVBAYT\n" +
"AkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdCZWlKaW5nMRcwFQYDVQQK\n" +
"DA5MYWthbGEgQ28uLEx0ZDEqMCgGA1UEAwwhTGFrYWxhIE9yZ2FuaXphdGlvbiBW\n" +
"YWxpZGF0aW9uIENBMB4XDTIwMTAxMDA1MjQxNFoXDTMwMTAwODA1MjQxNFowZTEL\n" +
"MAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaUppbmcxEDAOBgNVBAcMB0JlaUppbmcx\n" +
"FzAVBgNVBAoMDkxha2FsYSBDby4sTHRkMRkwFwYDVQQDDBBBUElHVy5MQUtBTEEu\n" +
"Q09NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt1zHL54HiI8d2sLJ\n" +
"lwoQji3/ln0nsvfZ/XVpOjuB+1YR6/0LdxEDMC/hxI6iH2Rm5MjwWz3dmN/6BZeI\n" +
"gwGeTOWJUZFARo8UduKrlhC6gWMRpAiiGC8wA8stikc5gYB+UeFVZi/aJ0WN0cpP\n" +
"JYCvPBhxhMvhVDnd4hNohnR1L7k0ypuWg0YwGjC25FaNAEFBYP9EYUyCJjE//9Z7\n" +
"sMzHR9SJYCqqo6r9bOH9G6sWKuEp+osuAh+kJIxJMHfipw7w3tEcWG0hce9u/el4\n" +
"cYJtg8/PPMVoccKmeCzMvarr7jdKP4lenJbtwlgyfs+JgNu60KMUJH8RS72wC9NY\n" +
"uFz09wIDAQABo4HVMIHSMIGSBgNVHSMEgYowgYeAFCnH4DkZPR6CZxRn/kIqVsMo\n" +
"dJHpoWekZTBjMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpSmluZzEQMA4GA1UE\n" +
"BwwHQmVpSmluZzEXMBUGA1UECgwOTGFrYWxhIENvLixMdGQxFzAVBgNVBAMMDkxh\n" +
"a2FsYSBSb290IENBggYBaiUALIowHQYDVR0OBBYEFJ2Kx9YZfmWpkKFnC33C0r5D\n" +
"K3rFMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUA\n" +
"A4IBAQBZoeU0XyH9O0LGF9R+JyGwfU/O5amoB97VeM+5n9v2z8OCiIJ8eXVGKN9L\n" +
"tl9QkpTEanYwK30KkpHcJP1xfVkhPi/cCMgfTWQ5eKYC7Zm16zk7n4CP6IIgZIqm\n" +
"TVGsIGKk8RzWseyWPB3lfqMDR52V1tdA1S8lJ7a2Xnpt5M2jkDXoArl3SVSwCb4D\n" +
"AmThYhak48M++fUJNYII9JBGRdRGbfJ2GSFdPXgesUL2CwlReQwbW4GZkYGOg9LK\n" +
"CNPK6XShlNdvgPv0CCR08KCYRwC3HZ0y1F0NjaKzYdGNPrvOq9lA495ONZCvzYDo\n" +
"gmsu/kd6eqxTs/JwdaIYr4sCMg8Z\n" +
"-----END CERTIFICATE-----";
/**
* 拉卡拉报文加密对称性密钥
*/
private static final String sm4Key = "uIj6CPg1GZAY10dXFfsEAQ==";
/**
* 服务地址
*/
private static final String serverUrl = "https://test.wsmsd.cn/sit";
private static volatile boolean init = false;
/***
* @Description: 初始化设置商户公共参数(全局只需设置一次)
* @throws Exception
*/
public static void doInit() throws Exception {
if (!init) {
init = initByJava();
}
}
public static boolean initByJava() throws SDKException {
/*Config2 config = new Config2();
config.setAppId(appId);
config.setSerialNo(serialNo);
config.setPriKey(priKeyStr);
config.setLklCer(lklCerStr);
config.setLklNotifyCer(lklNotifyCerStr);
config.setServerUrl(serverUrl);
config.setSm4Key(sm4Key);
return LKLSDK.init(config);*/
return true;
}
}

View File

@@ -0,0 +1,75 @@
package com.lakala.zf.laop.java.sdk.demo.bo;
import lombok.Data;
import java.util.List;
/**
* 添加银行卡请求参数
* @author Maosw
*/
@Data
public class AddOrUpdateBankCardReq {
/**
* id用户标识是新增还是修改
*/
private Long id;
/**
* 姓名
*/
private String acctName;
/**
* 身份证号
*/
private String acctCertificateNo;
/**
* 卡号
*/
private String acctNo;
/**
* 开户行
*/
private String acctOpenBankName;
/**
* 签名
*/
private String signature;
/**
* 协议图片
*/
private String cooperateAgreementImage;
/**
* 附件资料
*/
private List<Attach> attachList;
@Data
public static class Attach {
/**
* 附件类型1-身份证正面 2-身份证反面 3-银行卡 4-营业执照 5-合作协议-纸质版 6-合作协议-电子版
*/
private String attachType;
/**
* 附件名称
*/
private String attachName;
/**
* 附件地址
*/
private String attachStorePath;
/**
* 前端不管
*/
private String klkPath;
}
}

View File

@@ -0,0 +1,15 @@
package com.lakala.zf.laop.java.sdk.demo.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author Maosw
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AgreementReq extends AddOrUpdateBankCardReq{
private String code;
}

View File

@@ -0,0 +1,63 @@
package com.lakala.zf.laop.java.sdk.demo.bo;
import lombok.Data;
import java.util.List;
/**
* 分账接收方信息变更请求参数
* @author admin
*/
@Data
public class UpdateBankCardReq {
/**
* 姓名
*/
private String acctName;
/**
* 身份证号
*/
private String acctCertificateNo;
/**
* 卡号
*/
private String acctNo;
/**
* 开户行
*/
private String acctOpenBankName;
/**
* 附件资料
*/
private List<AddOrUpdateBankCardReq.Attach> attachList;
@Data
public static class Attach {
/**
* 附件类型1-身份证正面 2-身份证反面 3-银行卡 4-营业执照 5-合作协议-纸质版 6-合作协议-电子版
*/
private String attachType;
/**
* 附件名称
*/
private String attachName;
/**
* 附件地址
*/
private String attachStorePath;
/**
* 前端不管
*/
private String klkPath;
}
}

View File

@@ -0,0 +1,26 @@
package com.lakala.zf.laop.java.sdk.demo.bo;
import lombok.Data;
/**
* @author Maosw
*/
@Data
public class UploadFileBo {
/**
* 文件类型
*/
private String attType;
/**
* 文件后缀
*/
private String attExtName;
/**
* 文件内容
*/
private String attContext;
}

View File

@@ -0,0 +1,25 @@
package com.lakala.zf.laop.java.sdk.demo.bo;
import lombok.Data;
/**
* 附件上传请求参数
* @author admin
*/
@Data
public class UploadFileReq {
/**
* 1-身份证正面 2-身份证反面 3-银行卡 4-营业执照 5-合作协议-纸质版 6-合作协议-电子版
*/
private String attType;
/**
* 附件扩展名称:如 jpg | png | pdf
*/
private String attExtName;
/**
* 附件内容将文件内容转Base64字符串
*/
private String attContext;
}

View File

@@ -0,0 +1,33 @@
/*
package com.lakala.zf.laop.java.sdk.demo.extend;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.lkl.laop.sdk.request.V3CcssCounterOrderSpecialCreateRequest;
*/
/**
* @author nxj
* @date 2024/1/16 16:31
* @description 实体增加字段 -> 继承原实体重写字段. 想对哪层实体字段重写就继承哪个实体
*//*
public class V3CcssCounterOrderSpecialCreateRequestExtend extends V3CcssCounterOrderSpecialCreateRequest {
*/
/**
* 增加外层扩展字段
*//*
@JsonProperty("ext_filed1")
private String extFiled1;
public String getExtFiled1() {
return extFiled1;
}
public void setExtFiled1(String extFiled1) {
this.extFiled1 = extFiled1;
}
}
*/

View File

@@ -0,0 +1,172 @@
/*
package com.lakala.zf.laop.java.sdk.demo.extend;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.exception.SDKException;
import com.lkl.laop.sdk.request.V3CcssCounterOrderSpecialCreateRequest;
import com.lkl.laop.sdk.request.model.V3CcssOrderSceneFieldInfo;
import com.lkl.laop.sdk.utils.JsonUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
*/
/**
* @author nxj
* @date 2023/8/16 15:33
* @description 实体扩展-收银台订单创建 DEMO
*//*
public class V3CcssCounterOrderSpecialCreateRequestExtendDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//增加实体一级参数demo
extendFirstStruct();
//增加实体二级参数demo
extendSecondStruct();
//增加调用sdk未封装接口demo
extendAllStruct();
}
*/
/**
* 增加实体最外层字段
* > 重写实体继承原实体
*
* @see V3CcssCounterOrderSpecialCreateRequestExtend 继承
* @see V3CcssCounterOrderSpecialCreateRequest
*//*
private static void extendFirstStruct() throws SDKException {
// 创建自定义实体V3CcssCounterOrderSpecialCreateRequestExtend 继承V3CcssCounterOrderSpecialCreateRequest
V3CcssCounterOrderSpecialCreateRequestExtend req = new V3CcssCounterOrderSpecialCreateRequestExtend();
req.setOutOrderNo("8221210594300JY" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
req.setMerchantNo("8221210594300JY");
req.setTotalAmount(10L);
req.setOrderEfficientTime("20230824155923");
req.setNotifyUrl("http://run.mocky.io/v3/b02c9448-20a2-4ff6-a678-38ecab30161d");
req.setSupportRefund(1);
req.setSupportRepeatPay(1);
req.setCounterParam("{\"pay_mode\":\"ALIPAY\"}");
req.setSupportCancel(0);
req.setBusiTypeParam("[{\"busi_type\":\"UPCARD\",\"params\":{\"crd_flg\":\"CRDFLG_D|CRDFLG_C|CRDFLG_OTH\"}},{\"busi_type\":\"SCPAY\",\"params\":{\"pay_mode\":\"WECHAT\",\"crd_flg\":\"CRDFLG_D\"}}]");
req.setOrderInfo("测试12313131");
req.setTermNo("T12331234");
List<String> sgnInfos = new ArrayList<>();
sgnInfos.add("1");
req.setSgnInfo(sgnInfos);
V3CcssOrderSceneFieldInfo info = new V3CcssOrderSceneFieldInfo();
V3CcssOrderSceneFieldInfo.HbFqSceneInfo hbFqSceneInfo = new V3CcssOrderSceneFieldInfo.HbFqSceneInfo();
hbFqSceneInfo.setHbFqNum("3");
hbFqSceneInfo.setHbFqSellerPercent("0");
info.setSceneInfo(JsonUtils.toJSONString(hbFqSceneInfo));
info.setOrderSceneType("HB_FQ");
req.setOrderSceneField(info);
//====================== 增加下面字段 ===============
req.setExtFiled1("扩展字段1");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
*/
/**
* 增加实体内层嵌套实体字段
* > 重写嵌套实体继承原实体
*
* @see V3CcssOrderSceneFieldInfoExtend 继承
* @see V3CcssOrderSceneFieldInfo
*//*
private static void extendSecondStruct() throws SDKException {
V3CcssCounterOrderSpecialCreateRequest req = new V3CcssCounterOrderSpecialCreateRequest();
req.setOutOrderNo("8221210594300JY" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
req.setMerchantNo("8221210594300JY");
req.setTotalAmount(10L);
req.setOrderEfficientTime("20230824155923");
req.setNotifyUrl("http://run.mocky.io/v3/b02c9448-20a2-4ff6-a678-38ecab30161d");
req.setSupportRefund(1);
req.setSupportRepeatPay(1);
req.setCounterParam("{\"pay_mode\":\"ALIPAY\"}");
req.setSupportCancel(0);
req.setBusiTypeParam("[{\"busi_type\":\"UPCARD\",\"params\":{\"crd_flg\":\"CRDFLG_D|CRDFLG_C|CRDFLG_OTH\"}},{\"busi_type\":\"SCPAY\",\"params\":{\"pay_mode\":\"WECHAT\",\"crd_flg\":\"CRDFLG_D\"}}]");
req.setOrderInfo("测试12313131");
req.setTermNo("T12331234");
List<String> sgnInfos = new ArrayList<>();
sgnInfos.add("1");
req.setSgnInfo(sgnInfos);
//创建自定义实体继承 V3CcssOrderSceneFieldInfo
V3CcssOrderSceneFieldInfoExtend info = new V3CcssOrderSceneFieldInfoExtend();
V3CcssOrderSceneFieldInfo.HbFqSceneInfo hbFqSceneInfo = new V3CcssOrderSceneFieldInfo.HbFqSceneInfo();
hbFqSceneInfo.setHbFqNum("3");
hbFqSceneInfo.setHbFqSellerPercent("0");
info.setSceneInfo(JsonUtils.toJSONString(hbFqSceneInfo));
info.setOrderSceneType("HB_FQ");
//----- 增加内部结构字段
info.setSecondExtFiled1("内部扩展字段");
req.setOrderSceneField(info);
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
*/
/**
* 增加自定义实体(sdk未封装接口)
* > v2接口继承
*
* @see com.lkl.laop.sdk.request.V2CommRequest
* > v3接口继承
* @see com.lkl.laop.sdk.request.V3CommRequest
*//*
private static void extendAllStruct() throws SDKException {
//创建 V3ExtendRequest 继承 V3CommRequest
V3ExtendRequest req = new V3ExtendRequest();
req.setOutOrderNo("8221210594300JY" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
req.setMerchantNo("8221210594300JY");
req.setTotalAmount(10L);
req.setOrderEfficientTime("20230824155923");
req.setNotifyUrl("http://run.mocky.io/v3/b02c9448-20a2-4ff6-a678-38ecab30161d");
req.setSupportRefund(1);
req.setSupportRepeatPay(1);
req.setCounterParam("{\"pay_mode\":\"ALIPAY\"}");
req.setSupportCancel(0);
req.setBusiTypeParam("[{\"busi_type\":\"UPCARD\",\"params\":{\"crd_flg\":\"CRDFLG_D|CRDFLG_C|CRDFLG_OTH\"}},{\"busi_type\":\"SCPAY\",\"params\":{\"pay_mode\":\"WECHAT\",\"crd_flg\":\"CRDFLG_D\"}}]");
req.setOrderInfo("测试12313131");
req.setTermNo("T12331234");
List<String> sgnInfos = new ArrayList<>();
sgnInfos.add("1");
req.setSgnInfo(sgnInfos);
V3CcssOrderSceneFieldInfo info = new V3CcssOrderSceneFieldInfo();
V3CcssOrderSceneFieldInfo.HbFqSceneInfo hbFqSceneInfo = new V3CcssOrderSceneFieldInfo.HbFqSceneInfo();
hbFqSceneInfo.setHbFqNum("3");
hbFqSceneInfo.setHbFqSellerPercent("0");
info.setSceneInfo(JsonUtils.toJSONString(hbFqSceneInfo));
info.setOrderSceneType("HB_FQ");
req.setOrderSceneField(info);
//========================== 发送请求使用此方法 ==========================
//参数需要加密时 使用 LKLSDK.sm4Encrypt(req.toBody(); 自行加密
String response = LKLSDK.httpPost("https://test.wsmsd.cn/sit/api/v3/ccss/counter/order/create",req.toBody());
//解密时 使用 LKLSDK.sm4Decrypt(response); 自行解密
//响应
System.out.println(response);
}
}
*/

View File

@@ -0,0 +1,26 @@
package com.lakala.zf.laop.java.sdk.demo.extend;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.lkl.laop.sdk.request.model.V3CcssOrderSceneFieldInfo;
/**
* @author nxj
* @date 2024/1/16 16:35
* @description 内部实体扩展
*/
public class V3CcssOrderSceneFieldInfoExtend extends V3CcssOrderSceneFieldInfo {
/**
* 内部实体增加字段
*/
@JsonProperty("second_ext_filed1")
private String secondExtFiled1;
public String getSecondExtFiled1() {
return secondExtFiled1;
}
public void setSecondExtFiled1(String secondExtFiled1) {
this.secondExtFiled1 = secondExtFiled1;
}
}

View File

@@ -0,0 +1,681 @@
/*
package com.lakala.zf.laop.java.sdk.demo.extend;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.lkl.laop.sdk.enums.FunctionCodeEnum;
import com.lkl.laop.sdk.request.V3CcssCounterOrderSpecialCreateRequest;
import com.lkl.laop.sdk.request.V3CommRequest;
import com.lkl.laop.sdk.request.model.V3CcssOrderGoodsFieldInfo;
import com.lkl.laop.sdk.request.model.V3CcssOrderOutSplitInfo;
import com.lkl.laop.sdk.request.model.V3CcssOrderSceneFieldInfo;
import com.lkl.laop.sdk.request.model.V3TransIdentityInfo;
import java.util.List;
*/
/**
* @author nxj
* @date 2024/1/16 16:59
* @description 自定义实体调sdk未封装接口FunctionCodeEnum无需设置
*//*
public class V3ExtendRequest extends V3CommRequest {
*/
/**
* 商户订单号
* M
*//*
@JsonProperty("out_order_no")
private String outOrderNo;
*/
/**
* 银联商户号
* M
*//*
@JsonProperty("merchant_no")
private String merchantNo;
*/
/**
* 交易设备标识
* C
* 非合单场景必输该字段进件返回接口中的termId字段非API接口进件请联系业务员。
*//*
@JsonProperty("vpos_id")
private String vposId;
*/
/**
* 渠道号
* C
* 一般不用
*//*
@JsonProperty("channel_id")
private String channelId;
*/
/**
* 业务模式
* C
* ACQ-收单 默认为“ACQ-收单”
* PAY-付款
*//*
@JsonProperty("busi_mode")
private String busiMode;
*/
/**
* 订单金额
* M
* 单位:分
*//*
@JsonProperty("total_amount")
private Long totalAmount;
*/
/**
* 订单有效期
* M
* 格式yyyyMMddHHmmss
*//*
@JsonProperty("order_efficient_time")
private String orderEfficientTime;
*/
/**
* 订单支付成功后商户接收订单通知的地址
* C
*//*
@JsonProperty("notify_url")
private String notifyUrl;
*/
/**
* 是否支持撤销
* C
* 默认 0 不支持;busi_mode为“PAY-付款”不支持 撤销
* 0 不支持 1支持
*//*
@JsonProperty("support_cancel")
private Integer supportCancel;
*/
/**
* 是否支持退款
* C
* 默认0 不支持
* 0 不支持 1支持
*//*
@JsonProperty("support_refund")
private Integer supportRefund;
*/
/**
* 是否支持“多次发起支付”
* C
* 默认0 不支持
* 0 不支持 1支持
*//*
@JsonProperty("support_repeat_pay")
private Integer supportRepeatPay;
*/
/**
* 发起订单方的userId
* C
* 归属于channelId下的userId
*//*
@JsonProperty("out_user_id")
private String outUserId;
*/
/**
* 客户端下单完成支付后返回的商户网页跳转地址。
* C
*//*
@JsonProperty("callback_url")
private String callbackUrl;
*/
/**
* 订单标题
* M
* 在使用收银台扫码支付时必输入,交易时送往账户端
*//*
@JsonProperty("order_info")
private String orderInfo;
*/
/**
* 结算终端号
* C
* 合单场景必输该字段
*//*
@JsonProperty("term_no")
private String termNo;
*/
/**
* 合单标识
* C
* “1”为合单不填默认是为非合单
*//*
@JsonProperty("split_mark")
private String splitMark;
*/
/**
* 结算类型(非合单)
* C
* “0”或者空常规结算方式 注意:该字段会影响结算方式,慎用。(调用拉卡拉分账接口需必传)
*//*
@JsonProperty("settle_type")
private String settleType;
*/
/**
* 拆单信息
* C
* 合单标识为“1”时必传该字段。
*//*
@JsonProperty("out_split_info")
private List<V3CcssOrderOutSplitInfo> outSplitInfo;
*/
/**
* json字符串 收银台参数
* C
*//*
@JsonProperty("counter_param")
private String counterParam;
*/
/**
* 收银台下单备注
* C
*//*
@JsonProperty("counter_remark")
private String counterRemark;
*/
/**
* 业务类型控制参数jsonStr格式
* C
*//*
@JsonProperty("busi_type_param")
private String busiTypeParam;
*/
/**
* 签约协议号列表(字符串)
* C
* 列表中签约协议号不能为空;列表中签约协议号不能重复
*//*
@JsonProperty("sgn_info")
private List<String> sgnInfo;
*/
/**
* 转账支付时可以上送
* C
* 全报文加密接口可上送
*//*
@JsonProperty("transfer_field")
private V3CcssCounterOrderSpecialCreateRequest.TransferField transferField;
*/
/**
* 实名信息 json字符串
* C
* 全报文加密接口可上送
* @see V3TransIdentityInfo
*//*
@JsonProperty("identity_info")
private String identityInfo;
*/
/**
* 指定产品编号 200809:线上外卡收银台)
* O
* 该字段默认不需要指定,特殊场景下使用,慎用
*//*
@JsonProperty("product_id")
private String productId;
*/
/**
* 商品信息标识
* O
* 1:含商品信息,不填默认不含商品信息
*//*
@JsonProperty("goods_mark")
private String goodsMark;
*/
/**
* 商品信息域
* O
* good_mark送1时该域必填否则不送。只有线上外卡业务上送该字段
*
* @see V3CcssOrderGoodsFieldInfo
*//*
@JsonProperty("goods_field")
private String goodsField;
*/
/**
* 订单场景域,特殊场景下需要上送
* O
*//*
@JsonProperty("order_scene_field")
private V3CcssOrderSceneFieldInfo orderSceneField;
*/
/**
* 年龄限制
* C
* 0:不限年龄1:年龄限制
*//*
@JsonProperty("age_limit")
private String ageLimit;
*/
/**
* 重复支付后是否自动退货
* C
* 0:重复支付后不自动退货1:重复支付后自动退货 默认不送为0注意请详细了解字段场景后上送
* 需注意互斥条件repeat_pay_auto_refund选择“1”重复支付后自动退货后
* repeat_pay_notify仅支持选择“0”重复支付订单不通知
*//*
@JsonProperty("repeat_pay_auto_refund")
private String repeatPayAutoRefund;
*/
/**
* 重复支付后是否通知
* C
* 0:重复支付订单不通知1:重复支付订单通知 默认不送为0
*//*
@JsonProperty("repeat_pay_notify")
private String repeatPayNotify;
*/
/**
* 是否自动退货
* C
* 0:不自动退货1:关闭订单后支付成功触发自动退货 默认不送为0注意请详细了解字段场景后上送
*//*
@JsonProperty("close_order_auto_refund")
private String closeOrderAutoRefund;
*/
/**
* 币种三位数字参见国标默认值156 详细见接口文档说明(待上线)
* C
* 特定场景下使用
*//*
@JsonProperty("trans_currency")
private String transCurrency;
public String getOutOrderNo() {
return outOrderNo;
}
public void setOutOrderNo(String outOrderNo) {
this.outOrderNo = outOrderNo;
}
public String getMerchantNo() {
return merchantNo;
}
public void setMerchantNo(String merchantNo) {
this.merchantNo = merchantNo;
}
public String getVposId() {
return vposId;
}
public void setVposId(String vposId) {
this.vposId = vposId;
}
public String getChannelId() {
return channelId;
}
public void setChannelId(String channelId) {
this.channelId = channelId;
}
public String getBusiMode() {
return busiMode;
}
public void setBusiMode(String busiMode) {
this.busiMode = busiMode;
}
public Long getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(Long totalAmount) {
this.totalAmount = totalAmount;
}
public String getOrderEfficientTime() {
return orderEfficientTime;
}
public void setOrderEfficientTime(String orderEfficientTime) {
this.orderEfficientTime = orderEfficientTime;
}
public String getNotifyUrl() {
return notifyUrl;
}
public void setNotifyUrl(String notifyUrl) {
this.notifyUrl = notifyUrl;
}
public Integer getSupportCancel() {
return supportCancel;
}
public void setSupportCancel(Integer supportCancel) {
this.supportCancel = supportCancel;
}
public Integer getSupportRefund() {
return supportRefund;
}
public void setSupportRefund(Integer supportRefund) {
this.supportRefund = supportRefund;
}
public Integer getSupportRepeatPay() {
return supportRepeatPay;
}
public void setSupportRepeatPay(Integer supportRepeatPay) {
this.supportRepeatPay = supportRepeatPay;
}
public String getOutUserId() {
return outUserId;
}
public void setOutUserId(String outUserId) {
this.outUserId = outUserId;
}
public String getCallbackUrl() {
return callbackUrl;
}
public void setCallbackUrl(String callbackUrl) {
this.callbackUrl = callbackUrl;
}
public String getOrderInfo() {
return orderInfo;
}
public void setOrderInfo(String orderInfo) {
this.orderInfo = orderInfo;
}
public String getTermNo() {
return termNo;
}
public void setTermNo(String termNo) {
this.termNo = termNo;
}
public String getSplitMark() {
return splitMark;
}
public void setSplitMark(String splitMark) {
this.splitMark = splitMark;
}
public String getSettleType() {
return settleType;
}
public void setSettleType(String settleType) {
this.settleType = settleType;
}
public List<V3CcssOrderOutSplitInfo> getOutSplitInfo() {
return outSplitInfo;
}
public void setOutSplitInfo(List<V3CcssOrderOutSplitInfo> outSplitInfo) {
this.outSplitInfo = outSplitInfo;
}
public String getCounterParam() {
return counterParam;
}
public void setCounterParam(String counterParam) {
this.counterParam = counterParam;
}
public String getCounterRemark() {
return counterRemark;
}
public void setCounterRemark(String counterRemark) {
this.counterRemark = counterRemark;
}
public String getBusiTypeParam() {
return busiTypeParam;
}
public void setBusiTypeParam(String busiTypeParam) {
this.busiTypeParam = busiTypeParam;
}
public List<String> getSgnInfo() {
return sgnInfo;
}
public void setSgnInfo(List<String> sgnInfo) {
this.sgnInfo = sgnInfo;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getGoodsMark() {
return goodsMark;
}
public void setGoodsMark(String goodsMark) {
this.goodsMark = goodsMark;
}
public String getGoodsField() {
return goodsField;
}
public void setGoodsField(String goodsField) {
this.goodsField = goodsField;
}
public V3CcssOrderSceneFieldInfo getOrderSceneField() {
return orderSceneField;
}
public void setOrderSceneField(V3CcssOrderSceneFieldInfo orderSceneField) {
this.orderSceneField = orderSceneField;
}
public V3CcssCounterOrderSpecialCreateRequest.TransferField getTransferField() {
return transferField;
}
public void setTransferField(V3CcssCounterOrderSpecialCreateRequest.TransferField transferField) {
this.transferField = transferField;
}
public String getIdentityInfo() {
return identityInfo;
}
public void setIdentityInfo(String identityInfo) {
this.identityInfo = identityInfo;
}
public String getAgeLimit() {
return ageLimit;
}
public void setAgeLimit(String ageLimit) {
this.ageLimit = ageLimit;
}
public String getRepeatPayAutoRefund() {
return repeatPayAutoRefund;
}
public void setRepeatPayAutoRefund(String repeatPayAutoRefund) {
this.repeatPayAutoRefund = repeatPayAutoRefund;
}
public String getRepeatPayNotify() {
return repeatPayNotify;
}
public void setRepeatPayNotify(String repeatPayNotify) {
this.repeatPayNotify = repeatPayNotify;
}
public String getCloseOrderAutoRefund() {
return closeOrderAutoRefund;
}
public void setCloseOrderAutoRefund(String closeOrderAutoRefund) {
this.closeOrderAutoRefund = closeOrderAutoRefund;
}
public String getTransCurrency() {
return transCurrency;
}
public void setTransCurrency(String transCurrency) {
this.transCurrency = transCurrency;
}
public static class TransferField {
*/
/**
* 付款人账号
* C
* 付款人账号 上送则校验
*//*
@JsonProperty("acc_out_no")
private String accOutNo;
*/
/**
* 付款人姓名
* C
* 付款人姓名 上送则校验
*//*
@JsonProperty("acc_out_name")
private String accOutName;
*/
/**
* 转账附言
* C
* 转账附言 上送则校验
*//*
@JsonProperty("additional")
private String additional;
public String getAccOutNo() {
return accOutNo;
}
public void setAccOutNo(String accOutNo) {
this.accOutNo = accOutNo;
}
public String getAccOutName() {
return accOutName;
}
public void setAccOutName(String accOutName) {
this.accOutName = accOutName;
}
public String getAdditional() {
return additional;
}
public void setAdditional(String additional) {
this.additional = additional;
}
}
@Override
public FunctionCodeEnum getFunctionCode() {
return null;
}
}
*/

View File

@@ -0,0 +1,83 @@
/*
package com.lakala.zf.laop.java.sdk.demo.notify;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.notification.NotificationResult;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
*/
/**
* @author nxj
* @date 2023/8/18 17:02
* @description 处理拉卡拉推送DEMO
*//*
@RestController
public class NotificationHandlerDemo extends BaseCommonDemo {
*/
/**
* @param request spring-boot 2.x 使用javax.servlet.http.HttpServletRequest接收
* spring-boot 3.x 使用jakarta.servlet.http.HttpServletRequest接收
* @return
* @throws Exception
*//*
@RequestMapping("/messageHandle")
public ResponseEntity<?> messageHandle(HttpServletRequest request) throws Exception {
// 1. 配置初始化
doInit();
// spring-boot 2.x 直接调用读取请求提并验签方法,返回请求体
String body = LKLSDK.notificationHandle(request);
//spring-boot 3.x 先读取请求体及请求头中的认证信息SDK提供验签方法
// LKLSDK.notificationHandle(getBody(request), getAuthorization(request));
System.out.println("验签成功,请求body" + body);
//业务处理
//标准响应成功格式
return ResponseEntity.ok(NotificationResult.ok());
}
*/
/**
* 读取请求头
*//*
private String getAuthorization(HttpServletRequest request) {
return request.getHeader("Authorization");
}
*/
/**
* 读取请求体
*//*
private String getBody(HttpServletRequest request) {
try (InputStreamReader in = new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8)) {
StringBuilder bf = new StringBuilder();
int len;
char[] chs = new char[1024];
while ((len = in.read(chs)) != -1) {
bf.append(new String(chs, 0, len));
}
return bf.toString();
} catch (Exception e) {
throw new RuntimeException("读取body失败");
}
}
}
*/

View File

@@ -0,0 +1,68 @@
package com.lakala.zf.laop.java.sdk.demo.utils;
/**
* @author Maosw
*/
public class KlkConstant {
public static final String VERSION = "1.0";
/**
* 机构代码测试环境为1
*/
public static final String ORG_CODE = "200007";
/**
* 终端号
*/
public static final String TERM_NO = "K2072351";
/**
* setOrgNo bmcp机构号 测试环境为1
*/
public static final String ORG_NO = "1";
public static String merchantNo = "8223610503900MS";
public static String merInnerNo = "ZF20231212000000000000000000000001";
public static String merCupNo = "8223610891206BG";
/**
* 收款账户账户类型57对公 58对私
*/
public static final String ACC_TYPE = "58";
/**
* AcctCertificateType收款账户证件类型
* 17 身份证18 护照19 港澳居民来往内地通行证 20 台湾居民来往内地通行证
*/
public static final String ACC_CERT_TYPE = "17";
/**
* bindAccount 分账关系绑定结果回调地址
*/
public static final String BIND_ACC_URL = "https://jcs-api.52o.site/api/mall/callback/applyBind";
/**
* 提现结果回调地址
*/
public static final String WITHDRAWAL = "https://jcs-api.52o.site/api/mall/callback/withdrawal";
/**
* 余额充值订单回调地址
*/
public static final String RECHARGE_ORDER = "https://jcs-api.52o.site/api/callback/rechargeOrder";
/**
* DD画图订单回调地址
*/
public static final String DDHT_ORDER = "https://jcs-api.52o.site/api/callback/order";
/**
* 分账状态 处理中PROCESSING, 已受理ACCEPTED, 成功SUCCESS, 失败FAIL
*/
public static final String PROCESSING = "PROCESSING";
public static final String ACCEPTED = "ACCEPTED";
public static final String SUCCESS = "SUCCESS";
public static final String FAIL = "FAIL";
}

View File

@@ -0,0 +1,174 @@
package com.lakala.zf.laop.java.sdk.demo.utils;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.exception.SDKException;
import com.lkl.laop.sdk.request.V3CcssCounterOrderCreateRequest;
import com.lkl.laop.sdk.request.model.V3CcssOrderOutSplitInfo;
import com.lkl.laop.sdk.request.model.V3CcssOrderSceneFieldInfo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author Maosw
*/
public class LakalaUtils extends BaseCommonDemo {
/**
* 聚合收银台创建订单
*
* @return
*/
public static JSONObject createOrderPayment(String orderNo, BigDecimal payPrice, List<V3CcssOrderOutSplitInfo> splitInfoList) throws Exception {
doInit();
//创建订单请求参数
V3CcssCounterOrderCreateRequest request = new V3CcssCounterOrderCreateRequest();
//商户订单号
request.setOutOrderNo(orderNo);
//是否支持多次发起订单 0 不支持 1 支持
request.setSupportRepeatPay(1);
//银联商户号
request.setMerchantNo(KlkConstant.merchantNo);
//订单支付金额 单位:分
request.setTotalAmount(payPrice.multiply(new BigDecimal(100)).longValue());
//支付有效期 一天
request.setOrderEfficientTime(DateUtil.format(DateUtil.offsetDay(new Date(), 1), "yyyyMMddHHmmss"));
//回调地址
request.setNotifyUrl(KlkConstant.DDHT_ORDER);
request.setSupportCancel(1);
request.setSupportRefund(1);
/*request.setSplitMark("1");
request.setOutSplitInfo(splitInfoList);*/
//支付类型
// req.setCounterParam("{\"pay_mode\":\"ALIPAY\"}");
// req.setBusiTypeParam("[{\"busi_type\":\"UPCARD\",\"params\":{\"crd_flg\":\"CRDFLG_D|CRDFLG_C|CRDFLG_OTH\"}},{\"busi_type\":\"SCPAY\",\"params\":{\"pay_mode\":\"WECHAT\",\"crd_flg\":\"CRDFLG_D\"}}]");
// 订单标题,在使用收银台扫码支付时必输入,交易时送往账户端
request.setOrderInfo("集材社订单支付");
List<String> sgnInfos = new ArrayList<>();
sgnInfos.add("1");
request.setSgnInfo(sgnInfos);
V3CcssOrderSceneFieldInfo.HbFqSceneInfo hbFqSceneInfo = new V3CcssOrderSceneFieldInfo.HbFqSceneInfo();
hbFqSceneInfo.setHbFqNum("3");
hbFqSceneInfo.setHbFqSellerPercent("0");
//3. 发送请求
String response = null;
try {
response = LKLSDK.httpPost(request);
} catch (SDKException e) {
throw new RuntimeException(e);
}
//4. 响应
System.out.println(response);
JSONObject jsonObject = JSONObject.parseObject(response);
if ("000000".equals(jsonObject.get("code"))) {
System.out.println(jsonObject.get("resp_data").toString());
} else {
System.out.println(jsonObject.get("msg").toString());
}
return jsonObject;
}
/**
* 聚合收银台创建订单
*
* @return
*/
public static JSONObject createOrderPay(String orderNo, BigDecimal payPrice, String notifyUrl) throws Exception {
doInit();
//创建订单请求参数
V3CcssCounterOrderCreateRequest request = new V3CcssCounterOrderCreateRequest();
//商户订单号
request.setOutOrderNo(orderNo);
//是否支持多次发起订单 0 不支持 1 支持
request.setSupportRepeatPay(1);
//银联商户号
request.setMerchantNo(KlkConstant.merchantNo);
//订单支付金额 单位:分
request.setTotalAmount(payPrice.multiply(new BigDecimal(100)).longValue());
//支付有效期 一天
request.setOrderEfficientTime(DateUtil.format(DateUtil.offsetDay(new Date(), 1), "yyyyMMddHHmmss"));
//回调地址
request.setNotifyUrl(notifyUrl);
request.setSupportCancel(1);
request.setSupportRefund(1);
//支付类型
// req.setCounterParam("{\"pay_mode\":\"ALIPAY\"}");
// req.setBusiTypeParam("[{\"busi_type\":\"UPCARD\",\"params\":{\"crd_flg\":\"CRDFLG_D|CRDFLG_C|CRDFLG_OTH\"}},{\"busi_type\":\"SCPAY\",\"params\":{\"pay_mode\":\"WECHAT\",\"crd_flg\":\"CRDFLG_D\"}}]");
// 订单标题,在使用收银台扫码支付时必输入,交易时送往账户端
request.setOrderInfo("集材社订单支付");
List<String> sgnInfos = new ArrayList<>();
sgnInfos.add("1");
request.setSgnInfo(sgnInfos);
V3CcssOrderSceneFieldInfo.HbFqSceneInfo hbFqSceneInfo = new V3CcssOrderSceneFieldInfo.HbFqSceneInfo();
hbFqSceneInfo.setHbFqNum("3");
hbFqSceneInfo.setHbFqSellerPercent("0");
//3. 发送请求
String response = null;
try {
response = LKLSDK.httpPost(request);
} catch (SDKException e) {
throw new RuntimeException(e);
}
//4. 响应
System.out.println(response);
JSONObject jsonObject = JSONObject.parseObject(response);
if ("000000".equals(jsonObject.get("code"))) {
System.out.println(jsonObject.get("resp_data").toString());
} else {
System.out.println(jsonObject.get("msg").toString());
}
return jsonObject;
}
}

View File

@@ -0,0 +1,182 @@
/*
package com.lakala.zf.laop.java.sdk.demo.utils;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lakala.zf.laop.java.sdk.demo.extend.V3ExtendRequest;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V3LabsTransPreorderRequest;
import com.lkl.laop.sdk.request.model.V3LabsTradeLocationInfo;
import com.lkl.laop.sdk.request.model.V3LabsTradePreorderAlipayBus;
import com.lkl.laop.sdk.request.model.V3LabsTradePreorderUnionPayBus;
import com.lkl.laop.sdk.request.model.V3LabsTradePreorderWechatBus;
import java.util.ArrayList;
import java.util.List;
public class V3LabsTransPreorderRequestUtils extends BaseCommonDemo {
*/
/**
* 微信主扫支付预下单
* @return
* @throws Exception
*//*
public static String transPreorderWxPay(V3ExtendRequest extendRequest) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
*/
/*** 微信主扫场景示例 *//*
V3LabsTransPreorderRequest v3LabsTransPreorderWechatReq = new V3LabsTransPreorderRequest();
v3LabsTransPreorderWechatReq.setMerchantNo("8222900594309B8");
v3LabsTransPreorderWechatReq.setTermNo("A1135688");
v3LabsTransPreorderWechatReq.setOutTradeNo("7089279514841774401");
v3LabsTransPreorderWechatReq.setAccountType("WECHAT");
v3LabsTransPreorderWechatReq.setTransType("71");
v3LabsTransPreorderWechatReq.setTotalAmount("50");
v3LabsTransPreorderWechatReq.setNotifyUrl("https://testca/notify");
v3LabsTransPreorderWechatReq.setRemark("备注");
//地址位置信息
V3LabsTradeLocationInfo v3LabsTradePreorderLocationInfo1 = new V3LabsTradeLocationInfo("12.34.56.78");
v3LabsTransPreorderWechatReq.setLocationInfo(v3LabsTradePreorderLocationInfo1);
//微信主扫场景下acc_busi_fields域内容
V3LabsTradePreorderWechatBus wechatBus = new V3LabsTradePreorderWechatBus();
wechatBus.setSubAppid("wx68edd02e");
wechatBus.setUserId("oO2Dq0ny0C");
wechatBus.setGoodsTag("ceshi");
wechatBus.setSceneInfo("{\"store_info\":{\"id\": \"123\",\"name\": \"456\",\"area_code\": \"2345\",\"address\": \"地址\" }}");
V3LabsTradePreorderWechatBus.AccBusiDetail accBusiDetail = new V3LabsTradePreorderWechatBus.AccBusiDetail();
List<V3LabsTradePreorderWechatBus.WechatGoodsDetail> wechatGoodsDetails = new ArrayList<>();
V3LabsTradePreorderWechatBus.WechatGoodsDetail wechatGoodsDetail = new V3LabsTradePreorderWechatBus.WechatGoodsDetail();
wechatGoodsDetail.setGoodsId("100734033");
wechatGoodsDetail.setPrice(50);
wechatGoodsDetail.setQuantity(1);
wechatGoodsDetails.add(wechatGoodsDetail);
accBusiDetail.setCostPrice(555);
accBusiDetail.setGoodsDetail(wechatGoodsDetails);
wechatBus.setDetail(accBusiDetail);
v3LabsTransPreorderWechatReq.setAccBusiFields(wechatBus);
//3. 发送请求
String response = LKLSDK.httpPost(v3LabsTransPreorderWechatReq);
//4. 响应
System.out.println(response);
return response;
}
*/
/**
* 支付宝主扫支付预下单
*//*
public static String transPreorderAliPay(V3ExtendRequest extendRequest) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
*/
/*** 支付宝主扫场景示例 *//*
V3LabsTransPreorderRequest v3LabsTransPreorderAlipayReq = new V3LabsTransPreorderRequest();
v3LabsTransPreorderAlipayReq.setMerchantNo(extendRequest.getMerchantNo());
v3LabsTransPreorderAlipayReq.setTermNo(extendRequest.getTermNo());
v3LabsTransPreorderAlipayReq.setOutTradeNo(extendRequest.getOutOrderNo());
v3LabsTransPreorderAlipayReq.setAccountType(extendRequest.getSettleType());
v3LabsTransPreorderAlipayReq.setTransType("41");
v3LabsTransPreorderAlipayReq.setTotalAmount(extendRequest.getTotalAmount().toString());
v3LabsTransPreorderAlipayReq.setNotifyUrl(extendRequest.getNotifyUrl());
v3LabsTransPreorderAlipayReq.setRemark(extendRequest.getCounterRemark());
//地址位置信息
V3LabsTradeLocationInfo v3LabsTradePreorderLocationInfo2 = new V3LabsTradeLocationInfo();
v3LabsTradePreorderLocationInfo2.setLocation("117.88.221.22");
v3LabsTradePreorderLocationInfo2.setBaseStation("00+LAC:6361+CID:58130");
v3LabsTradePreorderLocationInfo2.setRequestIp("+37.123456789/-121.123456789");
v3LabsTransPreorderAlipayReq.setLocationInfo(v3LabsTradePreorderLocationInfo2);
//支付宝主扫场景下acc_busi_fields域内容
V3LabsTradePreorderAlipayBus alipayBus = new V3LabsTradePreorderAlipayBus();
alipayBus.setStoreId("11111");
alipayBus.setUserId("22222");
alipayBus.setDisablePayChannels("credit_group");
alipayBus.setBusinessParams("{“enable_thirdpar ty_subsidy”:”N”}");
alipayBus.setQuitUrl("www.test.com");
alipayBus.setTimeoutExpress("10");
//支付宝extend_params字段说明
// V3LabsTradePreorderAlipayBus.AlipayExtendParamInfo extendParamInfo = new V3LabsTradePreorderAlipayBus.AlipayExtendParamInfo();
// extendParamInfo.setHbFqNum("3");
// extendParamInfo.setSysServiceProviderId("2088511833207846");
// extendParamInfo.setFoodOrderType("qr_order");
// extendParamInfo.setHbFqSellerPercent("100");
// alipayBus.setExtendParams(extendParamInfo);
//支付宝goods_detail字段说明
List<V3LabsTradePreorderAlipayBus.AlipayGoodsDeTail> goodsDeTails = new ArrayList<>();
V3LabsTradePreorderAlipayBus.AlipayGoodsDeTail alipayGoodsDeTail1 = new V3LabsTradePreorderAlipayBus.AlipayGoodsDeTail();
alipayGoodsDeTail1.setAlipayGoodsId("6666");
alipayGoodsDeTail1.setGoodsId("123");
alipayGoodsDeTail1.setGoodsName("测试商品");
alipayGoodsDeTail1.setQuantity("1.11");
alipayGoodsDeTail1.setPrice("666.33");
alipayGoodsDeTail1.setShowUrl("www.test.com");
goodsDeTails.add(alipayGoodsDeTail1);
alipayBus.setGoodsDetail(goodsDeTails);
v3LabsTransPreorderAlipayReq.setAccBusiFields(alipayBus);
//3. 发送请求
String response = LKLSDK.httpPost(v3LabsTransPreorderAlipayReq);
//4. 响应
System.out.println(response);
return response;
}
*/
/**
* 银联主扫支付预下单
*//*
public static String transPreorderUnionPay() throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
*/
/*** 银联主扫场景示例 *//*
V3LabsTransPreorderRequest v3LabsTransPreorderUnionPayReq = new V3LabsTransPreorderRequest();
v3LabsTransPreorderUnionPayReq.setMerchantNo("8222900594309B8");
v3LabsTransPreorderUnionPayReq.setTermNo("A1135688");
v3LabsTransPreorderUnionPayReq.setOutTradeNo("7089279514841773301");
v3LabsTransPreorderUnionPayReq.setAccountType("UQRCODEPAY");
v3LabsTransPreorderUnionPayReq.setTransType("51");
v3LabsTransPreorderUnionPayReq.setTotalAmount("10");
v3LabsTransPreorderUnionPayReq.setNotifyUrl("http://www.test.com");
v3LabsTransPreorderUnionPayReq.setRemark("备注");
//地址位置信息
V3LabsTradeLocationInfo v3LabsTradePreorderLocationInfo3 = new V3LabsTradeLocationInfo();
v3LabsTradePreorderLocationInfo3.setRequestIp("117.88.221.21");
v3LabsTradePreorderLocationInfo3.setLocation("+37.123456789,-121.123456789");
v3LabsTransPreorderUnionPayReq.setLocationInfo(v3LabsTradePreorderLocationInfo3);
//银联主扫场景下acc_busi_fields域内容
V3LabsTradePreorderUnionPayBus unionPayBus = new V3LabsTradePreorderUnionPayBus();
unionPayBus.setUserId("23425");
unionPayBus.setFrontUrl("www.front.com");
unionPayBus.setFrontFailUrl("www.fail.com");
v3LabsTransPreorderUnionPayReq.setAccBusiFields(unionPayBus);
//3. 发送请求
String response = LKLSDK.httpPost(v3LabsTransPreorderUnionPayReq);
//4. 响应
System.out.println(response);
return response;
}
}
*/

View File

@@ -0,0 +1,234 @@
package com.lakala.zf.laop.java.sdk.demo.utils;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
public class V3LakalaBusinessUtils extends BaseCommonDemo {
private static final String BASE_URL = "https://test.wsmsd.cn/sit";
private static final String CLIENT_ID = "testsit";
private static final String CLIENT_SECRET = "EguwEckByf2I6u6z";
/**
* 获取access_token
* @return access_token响应
*/
public static String getAccessToken() {
try {
OkHttpClient client = new OkHttpClient.Builder().build();
// 构建请求参数
FormBody formBody = new FormBody.Builder()
.add("grant_type", "client_credentials")
.add("client_id", CLIENT_ID)
.add("client_secret", CLIENT_SECRET)
.build();
// 创建POST请求
Request request = new Request.Builder()
.url(BASE_URL+"/htkauth/oauth/token")
.post(formBody)
.build();
// 执行请求
Response response = client.newCall(request).execute();
// 立即读取并使用响应体
JSONObject jsonObject = new JSONObject(response.body().string());
return jsonObject.getString("access_token");
} catch (IOException e) {
throw new RuntimeException("获取access_token失败", e);
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
/**
* 商户进件
* @param entryInfo 进件信息
* @return 进件结果
*/
public static String merchantEntry(String entryInfo) {
try {
OkHttpClient client = new OkHttpClient.Builder().build();
String accessToken = getAccessToken();
RequestBody body = RequestBody.create(
MediaType.parse("application/json"), entryInfo
);
Request request = new Request.Builder()
.url(BASE_URL + "/htkregistration/merchant")
.addHeader("Authorization", "Bearer " + accessToken)
.post(body)
.build();
Response response = client.newCall(request).execute();
JSONObject jsonObject = new JSONObject(response.body().string());
// return jsonObject.getString("merchantNo");
return jsonObject.toString();
} catch (IOException | JSONException e) {
throw new RuntimeException("商户进件失败", e);
}
}
/**
* 获取地区信息
* @param parentCode 父级编码,如果获取省份信息则传空
* @return 地区信息列表
*/
public static JSONArray getRegionInfo(String parentCode) {
try {
OkHttpClient client = new OkHttpClient.Builder().build();
String accessToken = getAccessToken();
HttpUrl.Builder urlBuilder = HttpUrl.parse(BASE_URL + "/htkregistration/organization").newBuilder();
if (parentCode != null && !parentCode.isEmpty()) {
urlBuilder.addPathSegment(parentCode);
}
Request request = new Request.Builder()
.url(urlBuilder.build())
.addHeader("Authorization", "Bearer" + accessToken)
.get()
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new RuntimeException("获取地区信息失败, HTTP 状态码: " + response.code());
}
String responseBody = response.body().string();
// 将响应字符串转换为 JSONArray
JSONArray jsonArray = new JSONArray(responseBody);
// 遍历 JSONArray 中的每个 JSONObject
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
// 处理每个 JSONObject 的逻辑
int id = jsonObject.getInt("id");
String createTime = jsonObject.getString("createTime");
int optimistic = jsonObject.getInt("optimistic");
String updateTime = jsonObject.isNull("updateTime") ? null : jsonObject.getString("updateTime");
String code = jsonObject.getString("code");
String name = jsonObject.getString("name");
String parentCode1 = jsonObject.getString("parentCode");
// 打印或进一步处理这些字段
System.out.println("ID: " + id + ", Name: " + name + ", Code: " + code);
}
return jsonArray;
} catch (IOException e) {
throw new RuntimeException("获取地区信息失败", e);
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
/*String accessToken = getAccessToken();
System.out.println(accessToken);*/
String entryResult = """
{
"accountName": "**",
"accountNo": "621****06879",
"accountType": "58",
"attchments": [
{
"id": "merchant/null/20220928161350755217AGREE_MENT.jpg",
"type": "AGREE_MENT"
},
{
"id": "merchant/null/20220928161347099171BANK_CARD.jpg",
"type": "BANK_CARD"
},
{
"id": "merchant/null/20220928161349793759OTHERS.jpg",
"type": "OTHERS"
},
{
"id": "merchant/null/20220928161346380779ID_CARD_FRONT.jpg",
"type": "ID_CARD_FRONT"
},
{
"id": "merchant/null/20220928161346680398ID_CARD_BEHIND.jpg",
"type": "ID_CARD_BEHIND"
},
{
"id": "merchant/null/20220928161347597952SHOP_OUTSIDE_IMG.jpg",
"type": "SHOP_OUTSIDE_IMG"
},
{
"id": "merchant/null/20220928161348568691SHOP_INSIDE_IMG.jpg",
"type": "SHOP_INSIDE_IMG"
}
],
"bizContent": {
"activityId": 12,
"fees": [
{
"feeCode": "WECHAT",
"feeValue": 0.38
},
{
"feeCode": "ALIPAY",
"feeValue": 0.38
},
{
"feeCode": "CREDIT_CARD",
"feeValue": 0.6
},
{
"feeCode": "DEBIT_CARD",
"feeValue": 0.5,
"topFee": 20
}
],
"mcc": "12002",
"termNum": "1"
},
"busiCode": "PAPER_CODE",
"businessContent": "",
"cityCode": "6410",
"clearingBankCode": "102100099996",
"contactMobile": "18208910781",
"contactName": "**",
"countyCode": "986410",
"email": "***@qq.com",
"larIdCard": "460027200111297612",
"larIdCardEnd": "2030-05-20",
"larIdCardStart": "2020-05-20",
"larIdType": "01",
"larName": "**",
"latitude": "117.359967",
"merAddr": "383",
"merName": "24",
"merRegName": "合肥集材社",
"merType": "TP_PERSONAL",
"openningBankCode": "102641000266",
"openningBankName": "1111",
"settleProvinceCode": "11",
"settleProvinceName": "",
"settleCityCode": "1000",
"settleCityName": "",
"provinceCode": "6400",
"settleType": "D1",
"source": "APP",
"userNo": 20000101
}
""";
String result = merchantEntry(entryResult);
System.out.println(result);
// 获取省份列表
// getRegionInfo("1");
}
}

View File

@@ -0,0 +1,121 @@
package com.lakala.zf.laop.java.sdk.demo.utils;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.*;
import com.lkl.laop.sdk.utils.CommonUtil;
import javax.servlet.ServletException;
/**
* @author Maosw
*/
public class V3LakalaUserUtils extends BaseCommonDemo {
/**
* 根据卡号查询卡BIN信息
*/
public static JSONObject cardBin(String acctNo) throws Exception {
doInit();
if (acctNo == null) {
throw new ServletException("acctNo不能为空");
}
V2MmsOpenApiCardBin cardBin = new V2MmsOpenApiCardBin();
cardBin.setVersion(KlkConstant.VERSION);
cardBin.setOrderNo(CommonUtil.getOrderNo());
cardBin.setOrgCode(KlkConstant.ORG_CODE);
cardBin.setCardNo(acctNo);
String cardBinResponse = LKLSDK.httpPost(cardBin);
return JSON.parseObject(cardBinResponse);
}
/**
*附件上传
*/
public static JSONObject uploadFile(V2MmsOpenApiUploadFile uploadFile) throws Exception {
doInit();
if (uploadFile == null) {
throw new ServletException("fileBo不能为空");
}
// V2MmsOpenApiUploadFile uploadFile = new V2MmsOpenApiUploadFile();
uploadFile.setVersion(KlkConstant.VERSION);
uploadFile.setOrderNo(CommonUtil.getOrderNo());
uploadFile.setOrgCode(KlkConstant.ORG_CODE);
uploadFile.setAttType(uploadFile.getAttType());
uploadFile.setAttExtName(uploadFile.getAttExtName());
uploadFile.setAttContext(uploadFile.getAttContext());
String uploadFileResponse = LKLSDK.httpPost(uploadFile);
return JSON.parseObject(uploadFileResponse);
}
/**
* 分账接收方创建申请
*/
public static JSONObject applyLedgerReceiver(V2MmsApplyLedgerReceiverRequest ledgerReceiver) throws Exception {
doInit();
if (ledgerReceiver == null) {
throw new ServletException("ledgerReceiver不能为空");
}
ledgerReceiver.setVersion(KlkConstant.VERSION);
ledgerReceiver.setOrderNo(CommonUtil.getOrderNo());
ledgerReceiver.setOrgCode(KlkConstant.ORG_CODE);
String uploadFileResponse = LKLSDK.httpPost(ledgerReceiver);
return JSON.parseObject(uploadFileResponse);
}
/**
* 查询提现申请详情
*/
public static JSONObject queryWithdraw(V3SacsQueryRequest queryRequest) throws Exception {
doInit();
if (queryRequest == null) {
throw new ServletException("queryRequest不能为空");
}
String response = LKLSDK.httpPost(queryRequest);
return JSON.parseObject(response);
}
/**
* 提现申请
*/
public static JSONObject withdraw(V3SacsBalanceSeparateRequest separateRequest) throws Exception {
doInit();
if (separateRequest == null) {
throw new ServletException("separateRequest不能为空");
}
String response = LKLSDK.httpPost(separateRequest);
return JSON.parseObject(response);
}
/**
*提款模式设置
*/
public static JSONObject setWithdrawMode(V2LaepIndustryEwalletSettleProfileRequest ewalletSettleProfileRequest) throws Exception {
doInit();
if (ewalletSettleProfileRequest == null) {
throw new ServletException("ewalletSettleProfileRequest不能为空");
}
String response = LKLSDK.httpPost(ewalletSettleProfileRequest);
return JSON.parseObject(response);
}
/* *//**
* 退款
*//*
public static JSONObject relationRefund(V3LabsRelationRefundRequest v3LabsRelationRefundRequest) throws Exception {
// 1. 配置初始化
doInit();
if (v3LabsRelationRefundRequest == null) {
throw new ServletException("v3LabsRelationRefundRequest不能为空");
}
//3. 发送请求
String response = LKLSDK.httpPost(v3LabsRelationRefundRequest);
//4. 响应
System.out.println(response);
return JSON.parseObject(response);
}*/
}

View File

@@ -0,0 +1,85 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepCreateEleReceiptRequest;
import com.lkl.laop.sdk.utils.JsonUtils;
import java.io.*;
import java.util.Base64;
import java.util.Map;
/**
* @author nxj
* @date 2024/1/17 10:18
* @description 账管家V2.0-生成电子回单DEMO
*/
public class V2LaepCreateEleReceiptRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepCreateEleReceiptRequest req = new V2LaepCreateEleReceiptRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
req.setAcctSysSq("663321182762102784");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//下载文件
//downloadFile(response);
//4. 响应
System.out.println(response);
}
private static void downloadFile(String response) {
Map parse = JsonUtils.parse(response, Map.class);
Object respData = parse.get("respData");
Map parse1 = JsonUtils.parse(JsonUtils.toJSONString(respData), Map.class);
String fileName = parse1.get("fileName").toString();
String fileObject = parse1.get("fileObject").toString();
boolean downResult = base64str2File(fileObject, "./" + fileName);
System.out.println("下载结果:" + downResult);
}
public static boolean base64str2File(String base64FileStr, String filePath) {
if (base64FileStr == null) {
return false;
}
//判断文件夹是否存在
File outputFile = new File(filePath);
File fileP = outputFile.getParentFile();
if (!fileP.exists() && !fileP.mkdirs() && !fileP.mkdir()) {
throw new IllegalArgumentException("创建文件目录失败");
}
Base64.Decoder decoder = Base64.getDecoder();
OutputStream out = null;
try {
// Base64解码,对字节数组字符串进行Base64解码并生成文件
byte[] byt = decoder.decode(base64FileStr);
InputStream input = new ByteArrayInputStream(byt);
// 生成指定格式的文件
out = new FileOutputStream(filePath);
byte[] buff = new byte[1024];
int len;
while ((len = input.read(buff)) != -1) {
out.write(buff, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
assert out != null;
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return true;
}
}

View File

@@ -0,0 +1,40 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepEwalletAccountBillsQryRequest;
/**
* @author nxj
* @date 2024/1/16 14:51
* @description 账管家V2.0-账单分页查询DEMO
*/
public class V2LaepEwalletAccountBillsQryRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepEwalletAccountBillsQryRequest req = new V2LaepEwalletAccountBillsQryRequest();
req.setOrgNo("100012");
req.setBmcpNo("1");
req.setAcctNo("02001012000000008481");
req.setCustNo("82229005943096V");
req.setPayType("01");
req.setAmntcd("+");
req.setBillSq("663321182762102784");
req.setOutTransSq("");
req.setSid("");
req.setLklOrderNo("");
req.setStartDate("2022-12-30");
req.setEndDate("2023-01-05");
req.setPage(1);
req.setSize(10);
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,30 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepEwalletAccountQueryAcctInfoRequest;
/**
* @author nxj
* @date 2024/1/15 16:56
* @description 账管家V2.0-收单账户信息查询DEMO
*/
public class V2LaepEwalletAccountQueryAcctInfoRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepEwalletAccountQueryAcctInfoRequest req = new V2LaepEwalletAccountQueryAcctInfoRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
req.setBalanceFlag("4");
req.setRemark("备注");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,38 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryBankcardBindRequest;
/**
* @author nxj
* @date 2024/1/16 13:30
* @description 账管家V2.0-绑定银行卡
*/
public class V2LaepIndustryBankcardBindRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryBankcardBindRequest req = new V2LaepIndustryBankcardBindRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
req.setBankNo("111");
req.setBankName("中国工商银行");
req.setClearingBankCode("111");
req.setBankcardNo("666666");
req.setType("1");
req.setDefaultFlag("0");
req.setAcctCity("北京");
req.setAcctBank("**支行");
req.setValidate("2099-01-01");
req.setRemark("备注");
//3. 发送请求
String response = LKLSDK.httpPost(req, true, false);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,28 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryBankcardListRequest;
/**
* @author nxj
* @date 2024/1/16 14:31
* @description 账管家V2.0-查询银行卡列表DEMO
*/
public class V2LaepIndustryBankcardListRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryBankcardListRequest req = new V2LaepIndustryBankcardListRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
//3. 发送请求
String response = LKLSDK.httpPost(req, false, true);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,30 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryBankcardUnbindRequest;
/**
* @author nxj
* @date 2024/1/16 14:38
* @description 账管家V2.0-解绑银行卡DEMO
*/
public class V2LaepIndustryBankcardUnbindRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryBankcardUnbindRequest req = new V2LaepIndustryBankcardUnbindRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
req.setBankId("342401162699187293");
req.setRemark("备注");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,30 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletBalanceQueryRequest;
/**
* @author nxj
* @date 2024/1/15 16:41
* @description 账管家V2.0-账管家余额查询DEMO
*/
public class V2LaepIndustryEwalletBalanceQueryRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletBalanceQueryRequest req = new V2LaepIndustryEwalletBalanceQueryRequest();
req.setOrgNo("1");
req.setMerchantNo("8221000581200BS");
req.setPayNo("02001012000000010423");
req.setPayType("01");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,31 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletEwalletfeeRequest;
/**
* @author nxj
* @date 2024/1/12 14:37
* @description 账管家V2.0-账管家提款手续费设置DEMO
*/
public class V2LaepIndustryEwalletEwalletfeeRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletEwalletfeeRequest req = new V2LaepIndustryEwalletEwalletfeeRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
req.setFeeType("02");
req.setFeeAmt("0.01");
req.setMinFeeAmt("1000");
req.setMaxFeeAmt("1000");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,27 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletQueryfeeRequest;
/**
* @author nxj
* @date 2024/1/12 15:05
* @description 账管家V2.0-账管家提款手续费查询
*/
public class V2LaepIndustryEwalletQueryfeeRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletQueryfeeRequest req = new V2LaepIndustryEwalletQueryfeeRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,35 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletSettleProfileRequest;
/**
* @author nxj
* @date 2024/5/17 10:14
* @description 账管家V2.0-账管家提款模式设置
*/
public class V2LaepIndustryEwalletSettleProfileRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletSettleProfileRequest req = new V2LaepIndustryEwalletSettleProfileRequest();
req.setBmcpNo("1");
req.setMercId("8221000581200BS");
req.setSettleType("01");
req.setSettleTime("");
req.setSettleCircle("");
req.setPayType("");
req.setNotifyUrl("");
req.setRetainedAmt("");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,28 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletSettleQueryRequest;
/**
* @author nxj
* @date 2024/1/12 14:15
* @description 账管家V2.0-账管家提款模式查询DEMO
*/
public class V2LaepIndustryEwalletSettleQueryRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletSettleQueryRequest req = new V2LaepIndustryEwalletSettleQueryRequest();
req.setBmcpNo("1");
req.setMercId("82229005943096B");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,35 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletWithdrawD1Request;
/**
* @author nxj
* @date 2024/1/12 15:15
* @description 账管家V2.0-账管家提现D1 DEMO
*/
public class V2LaepIndustryEwalletWithdrawD1RequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletWithdrawD1Request req = new V2LaepIndustryEwalletWithdrawD1Request();
req.setOrgNo("1");
req.setMerchantNo("8221000581200BS");
req.setDrawAmt("10");
req.setNotifyUrl("test");
req.setMerOrderNo("hxmkl20240111900004");
req.setPayNo("");
req.setPayType("");
req.setRemark("");
req.setBankId("");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,31 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletWithdrawQueryRequest;
/**
* @author nxj
* @date 2023/12/26 11:08
* @description 账管家V2.0-账管家提现结果查询
*/
public class V2LaepIndustryEwalletWithdrawQueryRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletWithdrawQueryRequest req = new V2LaepIndustryEwalletWithdrawQueryRequest();
req.setOrgNo("1");
req.setMerchantNo("8221000581200BS");
req.setDrawJnl("231226110008150831688934");
req.setMerOrderNo("hxmkl20230816900005");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,38 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryEwalletWithdrawRequest;
/**
* @author nxj
* @date 2023/12/26 10:54
* @description 账管家V2.0-账管家提现Demo
*/
public class V2LaepIndustryEwalletWithdrawRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryEwalletWithdrawRequest req = new V2LaepIndustryEwalletWithdrawRequest();
req.setOrgNo("1");
req.setMerchantNo("8221000581200BS");
req.setDrawAmt("10");
req.setDrawMode("D0");
req.setNotifyUrl("http://www.test.com");
req.setMerOrderNo("hxmkl20220816900003");
req.setPayNo("1");
req.setPayType("01");
req.setRemark("备注");
req.setSummary("摘要");
req.setBankId("1");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,38 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryTransferDirectRequest;
/**
* @author nxj
* @date 2024/1/15 13:49
* @description 账管家V2.0-可用余额定向转账DEMO
*/
public class V2LaepIndustryTransferDirectRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryTransferDirectRequest req = new V2LaepIndustryTransferDirectRequest();
req.setOutBmcpNo("1");
req.setOutMercId("8222900594309P3");
req.setOutAcctType("01");
req.setInBmcpNo("1");
req.setInMercId("8221000581200BS");
req.setInPayType("06");
req.setMerOrderNo("da6029197c4f4f8e852dd3bc60ed3e35");
req.setAmount("100");
req.setRemark("132");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,29 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2LaepIndustryTransferQueryRequest;
/**
* @author nxj
* @date 2024/1/15 14:42
* @description 账管家V2.0-转账订单查询DEMO
*/
public class V2LaepIndustryTransferQueryRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2LaepIndustryTransferQueryRequest req = new V2LaepIndustryTransferQueryRequest();
req.setOutBmcpNo("1");
req.setOutMercId("8222900594309P3");
req.setMerOrderNo("da6029197c4f4f8e852dd3bc60ed3e35");
//3. 发送请求
String response = LKLSDK.httpPost(req);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,29 @@
package com.lakala.zf.laop.java.sdk.demo.v2;
import com.lakala.zf.laop.java.sdk.demo.BaseCommonDemo;
import com.lkl.laop.sdk.LKLSDK;
import com.lkl.laop.sdk.request.V2MrssQueryQueryAcctInfoRequest;
/**
* @author nxj
* @date 2024/1/16 09:58
* @description 收单清结算接口V2-账户信息查询DEMO
*/
public class V2MrssQueryQueryAcctInfoRequestDemo extends BaseCommonDemo {
public static void main(String[] args) throws Exception {
// 1. 配置初始化
doInit();
//2. 装配数据
V2MrssQueryQueryAcctInfoRequest req = new V2MrssQueryQueryAcctInfoRequest();
req.setQryNo("123456789");
req.setMerId("82219305946000D");
req.setBalanceFlag("2");
//3. 发送请求
String response = LKLSDK.httpPost(req, false, true);
//4. 响应
System.out.println(response);
}
}

View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDokGGq7SlDoULN
PULY8lcb2uXJcrFKkJI/lSfPppIkGH4xPfQytZXRlonpXqgOvovflJT5VhRvoLe2
inJ/59kRF59KTerbCG5sG2IHhR/qCUGHervnZuPwgrjOOlnB19VCCUKY1tcplkZa
KIksUU3TVh09GB3lUngkuOeO15ihcFHMIknOiSpL+Q04+qQf0g++9CxdQUtNY5za
Z2Jdvch/4yFstR59qQu73ZCCYHFqXaVakyfOC3xOQkRB58jPOUvIab9zwo2hPukT
+6qkqfokqMhX979HhNshPAJEEUXp4szk0QtP+2n8hq8t3Dws+GY8ElAFvmeGHx5j
WzPYAcXvAgMBAAECggEBALIsu8caf/zCdc2MW8SelkJPCLG330DDVmjEO4YJlfl1
kmjjkE2xdSDn9q0GyjbRoZQf36rPWkTTmyyNEYAQ/urrcCybWY2J/h9xMz+TrIm/
oabMT13QJF5FqJTHe7DZTReUxKMYJixEZ433dHCxsbByT2BZM75X2pg32aBEaTl0
v9OfIMwfaJ5fSBmleJv4q/Lfd232/oOPzyr+EHfsMpTwOrgzQwPNoah1GvH+jBhz
goafi36vT8HVjJ+ZjOreH+Z2zVas683Le62rQaN/51jHS5vQGd2+z3qrI3kvu8KK
Wu0kIDQwCKtSFUT00MiKSaklE9JHf8rCNm3+en4kjfECgYEA/0Z2QaP4sOUt1+cZ
IOprsMkJOl2sLTTDx3MseD2BxUukLDT8P3HTWLtBN9AkGlL6XD8WSs1k9YlGCqf2
y9qC43Bgwsky8CH1ACk5K4PuWidGUQiqW4Oll/ris2vjagE+QfMHFFa7IalV5FvI
v9L01jMqSL4duoM5w/WlLyLu8s0CgYEA6TlppWuxUMbxhEL5jmCZSSvsyhmIOdRk
t4V9MuxwiRuItzywMo4+O7Hs6tjAxTnV/ROa33qyQtm4Olmd4Oa/TkmAJFX+mUrW
jUohDvm7Js2Y7/eeSRcRQLcgCjncpNe3AJoeVEvrGeaJMERYXnTwboUDKxsRyFFq
AyuZHfuh86sCgYAm3pjFF+2XKd5YIKUv4OHy8jmIfJjp7T3eUcg0qtDmtMTTwmGi
W3ed7C1bDUNiCr56a1S+oRW9WWCj4L1wft4tOYBSSIaMD++ZTa2Z1aXmblKDpjki
ZCJDyPzZ6xSeoH/VVOcADtDBqGIeumcP5lRHhVTr7J7kNnUGRJIZYk1WBQKBgQCl
LAIEI4cKnDrD3uL60LL+vVsPrpFp02AZETMf84+nqpZin1pyE4dDo7kUgbnUdCd2
+oF+sFi7O5Jb0MgdVY47FZbpJPYQ/o2AtvU+s+K1knozyPyS6wFPAeJxG5WGMTfr
9zpvnOy+BSU3x8+F5e+5df5OcvdfFTmtUR05vNJvzQKBgHUtziAeWo7H6vxknFcc
kVv7++a4IWF59eP+rpxlaHOtPTI43PLxJgSHEbw3epEzTUnCL9dpP8n48fuYuwM+
+vpAujDcaGjGffmxW40E6wuGjOYBNg1zjSfEyjxF2fY+D9WoICSPHnrWB0/BEAZB
aL9Lho8+BUEFergUMjxUdvAS
-----END PRIVATE KEY-----

View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx
rIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M
8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD
ZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW
dhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN
rpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1
5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4
mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7
qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK
NXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X
3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK
TPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk
9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH
STTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0
Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv
AtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI
RgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke
MzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4
8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP
scd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi
bEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn
Ll2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz
NzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j
Aylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq
CHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6
QsFLQgFyXgvDnzr/o+hQJelW
-----END PRIVATE KEY-----

View File

@@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDYTCCAkmgAwIBAgIJAN+6gZTEG4TPMA0GCSqGSIb3DQEBCwUAMEkxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhzaGFuZ2hhaTERMA8GA1UEBxMIc2hhbmdoYWkxFDAS
BgNVBAMUC2xha2FsYV8yMDIxMB4XDTIxMDYxODA3MjEzNFoXDTMxMDYxOTA3MjEz
NFowSTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCHNoYW5naGFpMREwDwYDVQQHEwhz
aGFuZ2hhaTEUMBIGA1UEAxQLbGFrYWxhXzIwMjEwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDvDBZyHUDndAGxrIcsCV2njhNO3vCEZotTaWYSYwtDvkcA
b1EjsBFabXZaKigpqFXk5XXNI3NIHP9M8XKzIgGvc65NpLAfRjVql8JiTvLyYd1g
IUcOXMInabu+oX7dQSI1mS8XzqaoVRhDZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si
+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbWdhZ+NHwitnQwAJTLBFvfk28INM39G7XO
sXdVLfsooFdglVTOHpNuRiQAj9gShCCNrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/
klgDJa417E2wgP8VrwiXparO4FMzOGK15quuoD7DAgMBAAGjTDBKMAkGA1UdEwQC
MAAwEQYJYIZIAYb4QgEBBAQDAgTwMAsGA1UdDwQEAwIFoDAdBgNVHSUEFjAUBggr
BgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAI21YYAlH+Pc1ISv
nbQrGqL8suGL0Hh/8hGaFfrJEJEKr9OeC8jElUhck2MTmfu/Y1lB7r8RBrhGPXi4
kTXmB6ADs/9+ezNW3WXyFj7fhs3JcZ3mo33T9wyQySDKd//JrEtrTsc/s2PZ602y
qNmPomXSzjrlugaMyC7LI9sR44mc7sQnchjHoxrQFD5/usTFW72UQfYCORsQWYMt
0KKEyAcpRL51RE3xbX1WDtduFYGP62PbwLAn2nCL/j1wlF5hltWj7sditWqKgso5
F8BTffn2Bb0RdsNxqwMy1cTPrWLeXVOqMDu3ge7hvoav8lZKTjk5Kmqhs7wNAQXK
mg9qSwo=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEMTCCAxmgAwIBAgIGAXRTgcMnMA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNVBAYT
AkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdCZWlKaW5nMRcwFQYDVQQK
DA5MYWthbGEgQ28uLEx0ZDEqMCgGA1UEAwwhTGFrYWxhIE9yZ2FuaXphdGlvbiBW
YWxpZGF0aW9uIENBMB4XDTIwMTAxMDA1MjQxNFoXDTMwMTAwODA1MjQxNFowZTEL
MAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaUppbmcxEDAOBgNVBAcMB0JlaUppbmcx
FzAVBgNVBAoMDkxha2FsYSBDby4sTHRkMRkwFwYDVQQDDBBBUElHVy5MQUtBTEEu
Q09NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt1zHL54HiI8d2sLJ
lwoQji3/ln0nsvfZ/XVpOjuB+1YR6/0LdxEDMC/hxI6iH2Rm5MjwWz3dmN/6BZeI
gwGeTOWJUZFARo8UduKrlhC6gWMRpAiiGC8wA8stikc5gYB+UeFVZi/aJ0WN0cpP
JYCvPBhxhMvhVDnd4hNohnR1L7k0ypuWg0YwGjC25FaNAEFBYP9EYUyCJjE//9Z7
sMzHR9SJYCqqo6r9bOH9G6sWKuEp+osuAh+kJIxJMHfipw7w3tEcWG0hce9u/el4
cYJtg8/PPMVoccKmeCzMvarr7jdKP4lenJbtwlgyfs+JgNu60KMUJH8RS72wC9NY
uFz09wIDAQABo4HVMIHSMIGSBgNVHSMEgYowgYeAFCnH4DkZPR6CZxRn/kIqVsMo
dJHpoWekZTBjMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpSmluZzEQMA4GA1UE
BwwHQmVpSmluZzEXMBUGA1UECgwOTGFrYWxhIENvLixMdGQxFzAVBgNVBAMMDkxh
a2FsYSBSb290IENBggYBaiUALIowHQYDVR0OBBYEFJ2Kx9YZfmWpkKFnC33C0r5D
K3rFMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUA
A4IBAQBZoeU0XyH9O0LGF9R+JyGwfU/O5amoB97VeM+5n9v2z8OCiIJ8eXVGKN9L
tl9QkpTEanYwK30KkpHcJP1xfVkhPi/cCMgfTWQ5eKYC7Zm16zk7n4CP6IIgZIqm
TVGsIGKk8RzWseyWPB3lfqMDR52V1tdA1S8lJ7a2Xnpt5M2jkDXoArl3SVSwCb4D
AmThYhak48M++fUJNYII9JBGRdRGbfJ2GSFdPXgesUL2CwlReQwbW4GZkYGOg9LK
CNPK6XShlNdvgPv0CCR08KCYRwC3HZ0y1F0NjaKzYdGNPrvOq9lA495ONZCvzYDo
gmsu/kd6eqxTs/JwdaIYr4sCMg8Z
-----END CERTIFICATE-----

View File

@@ -0,0 +1,8 @@
appId=OP00000003
serialNo=00dfba8194c41b84cf
priKeyPath=/home/manage/jcs/OP00000003\u5546\u6237\u79C1\u94A5.txt
lklCerPath=/home/manage/jcs/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
lklNotifyCerPath=/home/manage/jcs/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
sm4Key=uIj6CPg1GZAY10dXFfsEAQ==
serverUrl = https://test.wsmsd.cn/sit

View File

@@ -0,0 +1,10 @@
appId=OP00000003
serialNo=00dfba8194c41b84cf
priKeyPath=ruoyi-common/ruoyi-common-pay/src/main/resources/OP00000003\u5546\u6237\u79C1\u94A5.txt
#lklCerPath=lkl-zf-bs-laop-java-sdk-sample/src/main/resources/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
lklCerPath=ruoyi-common/ruoyi-common-pay/src/main/resources/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
#lklNotifyCerPath=lkl-zf-bs-laop-java-sdk-sample/src/main/resources/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
lklNotifyCerPath=ruoyi-common/ruoyi-common-pay/src/main/resources/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
sm4Key=uIj6CPg1GZAY10dXFfsEAQ==
serverUrl = https://test.wsmsd.cn/sit

View File

@@ -0,0 +1,7 @@
appId=800000010334001
serialNo=48066e7ce3551149cd9ebdaf924582794137feb6
priKeyPath=lkl-zf-bs-laop-java-sdk-sample/src/main/resources/800000010334001\u79C1\u94A5.txt
lklCerPath=lkl-zf-bs-laop-java-sdk-sample/src/main/resources/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
lklNotifyCerPath=lkl-zf-bs-laop-java-sdk-sample/src/main/resources/lakala\u5F00\u653E\u5E73\u53F0\u8BC1\u4E66.cer
sm4Key=WNEbweljs25BpaSxko1NUw==
serverUrl = https://test.wsmsd.cn/sit

View File

@@ -0,0 +1,14 @@
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d] [%-5level] %logger{0} %line -- %msg%n</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>