From 2635d30e61cf7ffec015c830da761416604c9518 Mon Sep 17 00:00:00 2001 From: “djh” <“3298565835@qq.com”> Date: 星期五, 14 二月 2025 15:53:17 +0800 Subject: [PATCH] 煤矿缴费修改 --- /dev/null | 104 -------------------------- exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java | 14 ++- exam-system/src/test/java/TextPay.java | 96 +++++++++++++++-------- 3 files changed, 70 insertions(+), 144 deletions(-) diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java b/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java index 0c92d97..1fd4b76 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java @@ -2,7 +2,6 @@ import cn.com.jit.new_vstk.AdvanceSignClient; import cn.com.jit.new_vstk.Bean.*; -import cn.com.jit.new_vstk.SignClient; import cn.com.jit.new_vstk.exception.NewCSSException; import com.alibaba.fastjson2.JSONObject; import com.gkhy.exam.pay.entity.PayReqData; @@ -76,6 +75,9 @@ @Value("${finance.uploadXmlUrl}") private String uploadXmlUrl; + +// @Value(("${finance.path}")) +// private String path; /** * 请求开票,发起支付 @@ -413,9 +415,9 @@ //签名 public SignResult sign(byte[] strData) { SignResult result = null; - String certId = "rsa"; + String certId = "11650000MB1957293J"; try { - AdvanceSignClient client = new AdvanceSignClient("cssconfig.properties"); + AdvanceSignClient client = new AdvanceSignClient("D:\\work\\cssconfig.properties"); result = client.sign(certId,strData); log.info("***签名成功***"); byte[] signData = result.getSignData(); @@ -436,7 +438,7 @@ public VerifyResult verify(byte[] strData,String signData){ VerifyResult verify = null; try { - AdvanceSignClient client = new AdvanceSignClient("src/main/resources/cssconfig.properties"); + AdvanceSignClient client = new AdvanceSignClient("F:\\text\\cssconfig.properties"); byte[] plain = strData; byte[] sign = signData.getBytes(); @@ -462,7 +464,7 @@ public EnvelopResult encryptEnvelop(String plain){ EnvelopResult envelopResult = null; try { - AdvanceSignClient client = new AdvanceSignClient("cssconfig.properties"); + AdvanceSignClient client = new AdvanceSignClient("F:\\text\\cssconfig.properties"); String certId = "rsa"; CertIdParams certIdParams = new CertIdParams(certId); //将封装好的加密证书参数对象放入 数组中 @@ -484,7 +486,7 @@ public DecryptResult decryptEnvelop(String signData){ DecryptResult result = null; try { - AdvanceSignClient client = new AdvanceSignClient("cssconfig.properties"); + AdvanceSignClient client = new AdvanceSignClient("F:\\text\\cssconfig.properties"); byte[] enc_data = signData.getBytes(); result = client.decryptEnvelop(enc_data); log.info("解密数字信封结果成功"); diff --git a/exam-system/src/main/resources/cssconfig.properties b/exam-system/src/main/resources/cssconfig.properties deleted file mode 100644 index bb81eac..0000000 --- a/exam-system/src/main/resources/cssconfig.properties +++ /dev/null @@ -1,104 +0,0 @@ -#ServerURL=http://127.0.0.1:8000/signxmlhandler -#ServerURL=http://127.0.0.1:8000/service/tsa -#ServerURL=http://127.0.0.1:8000/signserver/service/xml -ServerURL=http://192.168.0.110:8000 -DigestAlg=SM3 -#Encrypt Algorithm: des3/scb2 -EncAlg=SM4 -#\u5BF9\u79F0\u52A0\u89E3\u5BC6\u586B\u5145\u65B9\u5F0F\uFF1ANO_PADDING \u9ED8\u8BA4\u4E3APKCS7PADDING -SymmPadding= -#RSA\u7B97\u6CD5\u586B\u5145\u65B9\u5F0F\u652F\u6301PSS -signPadding= -#\u5BF9\u79F0\u7B97\u6CD5 RSA/SM2 -asymmalg=SM2 -#\u5370\u7AE0\u6807\u51C6 1:\u56FD\u6807/4:\u56FD\u529E -standard=1 -#\u6458\u8981\u7B97\u6CD5\u81EA\u9002\u5E94\u53C2\u6570 -P1VerfiyParserCert=0 -#\u6458\u8981\u7B97\u6CD5\uFF08\u56FD\u5BC6\u548CRSA\uFF09 -GMDigest=sm3 -P1VerifyRsaDefDigest=sha1 -CertBaseInfo=version;issuerdn;subjectdn;serialnumber;notbefore;notafter -TSACertBaseInfo=issuerdn;subjectdn;serialnumber;signedTime;signedTSA;signedTimeByMS -CertExtendInfo= -AppID= -CertAlias= -BaseInfo=digestalg;digestdata;plaindata;dscert -SendMsgFormat=0 -HashActionPosition=0 -PrintLog=false -#console/file/log4j ####log4j not implement -logTarget=console -logFilePath=/temp/jit.dss.vstk.log -#rfc3161/rfc2630 -TSAType=rfc3161 -#dsCert/issuerDNAndSN/CertId/fileDsCert -p1VerifyCertId=CertId -#dsCert/issuerDNAndSN/CertId/fileDsCert -encryptEnvelopCertId=CertId -#dsCert/issuerDNAndSN/CertId/fileDsCert -ebcerVerifyCertId=CertId -#dsCert/issuerDNAndSN/CertId/fileDsCert -pdfSignCertId=CertId -Compatible=true -dss.client.class=cn.com.jit.assp.client.DSSClientHttpUrlConnectionImpl -#dss.client.class=cn.com.jit.assp.client.DSSClientHttpClientImpl -#default/encAfterDec/secretEnvelop(use this mode after using VCTK do envelop) secretEnvelop:develop->RSAdecrypt->RSAencrypt->envelop -envelopType=default -#default unit KB and default size is 0,0 is not block; -packageSize=0 -communicationProtocol=1 -#default:10000 unit: ms -timeout=10000 -connectTimeOut=10000 -# default : system unicode -FileSystemCharSet=UTF-8 -vstkVersion=20 -EncryptMode=ecb -#package size every time, unit is byte 1047580 3142740 240000 -send_size=1048580 -#bigger than this will take big data modle, unit is byte -bigdata_limit=2097152000 -#first send request read_timeout -first_read_timeout=10000 - -#the path of cssconfig.properties; support absolutepath and relativepath -defaultConfigFile=./src/main/webapp/conf/cssconfig.properties -#true:Keep-Alive false:Close -connectionType=true -#the method run time(Millisecond) -runTime=100 -needXmlToPdf=true -une= -pwd= -aid=WeChat -#\u5E94\u6025\u5E7F\u64AD\u5C0F\u8BC1\u4E66\uFF08jnta\uFF09 -organization=jnta -tenantId= -#\u5236\u4f5c\u7b7e\u540d\u6216\u5236\u4f5c\u4fe1\u5c01\u7684\u7ed3\u679c\u662f\u5426\u4e3abase64\u683c\u5f0f.true:\u662f;false:\u5426. -isEncryptSignData=false -#\u5236\u4f5c\u7b7e\u540d\u6216\u5236\u4f5c\u4fe1\u5c01\u7684\u7ed3\u679c\u662f\u5426\u4e3a\u5e26\u6362\u884c\u7684base64\u683c\u5f0f.true:\u662f;false:\u5426. -#\u6bcf16\u5b57\u8282\u56de\u8f66\u6362\u884c\uff0c\u9700\u8981isEncryptSignData=true\u914d\u7f6e\u624d\u4f1a\u751f\u6548 -#\u6b64\u914d\u7f6e\u4ec5\u9650\u4e8e\u539f\u6587\u63a5\u53e3 -isEncryptSignDataWithCRLF=false -pdfVisibleSignature=true -applyId= -applyPwd= -userId= -userPwd= -#\u662F\u5426\u8BB0\u5F55\u9519\u8BEF\u65E5\u5FD7\u53C2\u6570 -record_error_log_params=false -sealInfo=sealName;sealPicture;validTime;asone -#\u505Amof\u4E1A\u52A1\u5206\u6D41\uFF0C\u9ED8\u8BA4\u4E0D\u586B\u5199\uFF0C\u8868\u793A\u517C\u5BB9\u8001\u7248\u672C\u8001\u6A21\u5F0F\uFF1B\u540E\u7EED\u7248\u672C\u53EF\u4EE5\u505A\u5206\u6D41\uFF0C\u5F53\u4E3Arsa mof\u4E1A\u52A1\u5219\u9700\u8981\u8BBE\u7F6E\u4E3Amof -mofFlow= -#demo-VSTK\u8BED\u8A00(en_US,zh_CN) -Language= -isOpenGmssl=false -#\u63E1\u624B\u534F\u8BAE(\u5BC6\u6587\u7AEF\u53E38003\u63E1\u624B\u534F\u8BAE\u76EE\u524D\u4EC5\u652F\u6301TLSv1,TLSv1.1,TLSv1.2 \u6B64\u53C2\u6570\u9700\u8981\u91CD\u542Fvstk) -ssl_protocal=TLSv1 -#\u4EC5\u652F\u6301\u586B\u5199OAEP\uFF0C\u4E0D\u586B\u5199\u65F6\u4F7F\u7528PKCS1\u586B\u5145#AsymmPadding=OAEPWITHSHA256AndMGF1Padding -AsymmPadding= -#\u4FE1\u4EFB\u6240\u6709\u8BC1\u4E66(\u5BC6\u6587\u8BF7\u6C42\u65F6\u53C2\u6570\uFF0C\u9ED8\u8BA4\u4E3A\u4FE1\u4EFBclient.keystore\u8BC1\u4E66) -TrustMaterialAll=false -#\u9A8C\u7B7E\u8BC1\u4E66\u8FD4\u56DE\u5B57\u6BB5 -HighCertBaseInfo=version;issuerdn;subjectdn \ No newline at end of file diff --git a/exam-system/src/test/java/TextPay.java b/exam-system/src/test/java/TextPay.java index 6ea27a1..5d2608f 100644 --- a/exam-system/src/test/java/TextPay.java +++ b/exam-system/src/test/java/TextPay.java @@ -1,11 +1,14 @@ import cn.com.jit.new_vstk.Bean.EnvelopResult; import cn.com.jit.new_vstk.Bean.SignResult; import cn.com.jit.new_vstk.Bean.VerifyResult; +import cn.hutool.json.JSON; +import com.alibaba.fastjson2.JSONObject; import com.gkhy.exam.pay.entity.PayReqData; import com.gkhy.exam.pay.utils.PayUtils; import com.gkhy.exam.pay.utils.ResultVo; import com.gkhy.exam.pay.utils.Sign; import com.gkhy.exam.pay.utils.SignDto; +import com.google.gson.JsonObject; import com.ruoyi.common.utils.RandomUtil; import lombok.extern.log4j.Log4j2; import org.dom4j.Element; @@ -15,15 +18,31 @@ import java.io.IOException; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; @SpringBootTest(classes = TextPay.class) @ActiveProfiles("dev") @Log4j2 public class TextPay { + + +// +//@Test +// public void paytext001() throws IOException{ +// +// for (int i = 1142; i <3001 ; i++) { +// String buscode="DZ00"+i; +// log.info("buscode为:"+buscode); +// ResultVo paytext = paytext(buscode); +// log.info("请求结果为:"+paytext.getRespcode()); +// if (paytext.getRespcode().equals("BUS0000")){ +// break; +// } +// } +// } + + + @Test @@ -35,60 +54,69 @@ //订单编号 - payReqData.setOrderNo(RandomUtil.generateOrderNumber(1L, "CO")); + payReqData.setOrderNo("CO202502140115634461"); //订单总金额 - payReqData.setMoney(BigDecimal.valueOf(159)); + payReqData.setMoney(BigDecimal.valueOf(56)); //子订单数目 - payReqData.setAmount(2); - //缴费人姓名(单位填单位名称) - payReqData.setPayerName("新疆维吾尔自治区应急管理宣传教育中心"); - //缴费人证件号(单位填同一信用代码) - payReqData.setCertNo("65000023000000172848"); + payReqData.setAmount(1); + //缴费人姓名(单位填单位名称)阿克苏地区博安煤矿安全技术服务中心 + payReqData.setPayerName("阿克苏地区博安煤矿安全技术服务中心"); + //缴费人证件号(单位填同一信用代码)52652900789893140A + payReqData.setCertNo("52652900789893140A"); //缴款人类型(1个人 2单位) payReqData.setPayerType(2); - //开票单位社会信用代码 - payReqData.setInvoiceSocialCode("65000023000000172848"); + //开票单位社会信用代码12650000MB1A9612XD + payReqData.setInvoiceSocialCode("11650000MB1957293J"); //开票人 payReqData.setHandlingPerson("张三"); //复核人 payReqData.setChecker("李四"); - //单位编码 - payReqData.setEnterCode("680534083"); + //单位编码547185129 + payReqData.setEnterCode("547185129"); //订单描述(非必填) - payReqData.setDesc("安全技术考试考务费_煤矿安全作业-001504"); + payReqData.setDesc("煤矿安全作业理论考试-002002"); //订单明细 List<PayReqData.Feedata> feedatas1 = new ArrayList<>(); //数量 - feedatas.setAmount(1); - //业务代码 - feedatas.setBusCode("DZ001504"); - //单价 - feedatas.setPrice(BigDecimal.valueOf(103)); +// feedatas.setAmount(1); +// //业务代码 +// feedatas.setBusCode("DZ12401"); +// //单价 +// feedatas.setPrice(BigDecimal.valueOf(56)); PayReqData.Feedata feedata = new PayReqData.Feedata(); - feedata.setBusCode("DZ001505"); + feedata.setBusCode("DZ002002"); feedata.setAmount(1); feedata.setPrice(BigDecimal.valueOf(56)); - feedatas1.add(feedatas); +// feedatas1.add(feedatas); feedatas1.add(feedata); payReqData.setFeeDatas(feedatas1); - log.info("请求参数:"+payReqData); + log.info("请求参数:"+ JSONObject.toJSONString(payReqData)); PayUtils payUtils = new PayUtils(); ResultVo resultVo = payUtils.sendApiPost(payReqData); -// log.info("请求结果:" + resultVo); -// String fileData = resultVo.getRespdata().getFileData(); -// SignResult sign = payUtils.sign(fileData); -// log.info("签名结果为:"+ Arrays.toString(sign.getSignData())); -// VerifyResult verify = payUtils.verify(fileData, new String(sign.getSignData())); -// SignDto signDto = new SignDto("SM3", "Base64", new Date(), verify.getReturnData(), verify.getSerialNumber(), verify.getIssure()); -// Sign sign1 = new Sign(); -// Element signature = sign1.getSignature(signDto); -// EnvelopResult envelopResult = payUtils.encryptEnvelop(String.valueOf(signature)); -// log.info("制作数字信封为:"+ Arrays.toString(envelopResult.getEnvelopData())); + String jsonString = JSONObject.toJSONString(resultVo); + log.info("请求结果:"+jsonString); + String fileData = resultVo.getRespdata().getFileData(); + byte[] decode = Base64.getDecoder().decode(fileData); + SignResult sign = payUtils.sign(decode); + log.info("签名结果为:"+ Arrays.toString(sign.getSignData())); + VerifyResult verify = payUtils.verify(decode, new String(sign.getSignData())); + SignDto signDto = new SignDto("SM3", "Base64", new Date(), verify.getReturnData(), verify.getSerialNumber(), verify.getIssure()); + Sign sign1 = new Sign(); + Element signature = sign1.getSignature(signDto); + EnvelopResult envelopResult = payUtils.encryptEnvelop(String.valueOf(signature)); + log.info("制作数字信封为:"+ Arrays.toString(envelopResult.getEnvelopData())); } +// @Test +// public void sing(){ +// PayUtils payUtils = new PayUtils(); +// SignResult sign = payUtils.sign("aaaaaabbbbbb"); +// log.info(sign); +// } + @Test public void text001() { -- Gitblit v1.9.2