|
|
@@ -491,52 +491,175 @@ public class AllinpaySDK {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 测试主方法
|
|
|
+ * 测试主方法 - 使用现有工具类进行测试
|
|
|
*/
|
|
|
public static void main(String[] args) {
|
|
|
- System.out.println("=== 通联支付SDK测试 ===");
|
|
|
+ System.out.println("=== 通联支付SDK测试 (使用现有工具类) ===");
|
|
|
+
|
|
|
+ // 创建SybPayService实例
|
|
|
+ SybPayService payService = new SybPayService();
|
|
|
|
|
|
// 测试参数
|
|
|
- Long trxamt = 100L; // 1元(分为单位)
|
|
|
String reqsn = "TEST" + System.currentTimeMillis(); // 商户订单号
|
|
|
- String body = "book";
|
|
|
- String remark = "SDKbook";
|
|
|
- String notify_url = "https://dlsh-nft.com.cn/api/hello/";
|
|
|
+ long trxamt = 100L; // 1元(分为单位)
|
|
|
|
|
|
System.out.println("测试订单号: " + reqsn);
|
|
|
System.out.println("交易金额: " + trxamt + "分");
|
|
|
+ System.out.println("商户ID: " + SybConstants.SYB_CUSID);
|
|
|
+ System.out.println("应用ID: " + SybConstants.SYB_APPID);
|
|
|
+ System.out.println("API地址: " + SybConstants.SYB_APIURL);
|
|
|
|
|
|
- // 测试1: H5收银台支付
|
|
|
- System.out.println("\n=== 测试H5收银台支付 ===");
|
|
|
- PaymentResult payResult = h5Pay(trxamt, reqsn, body, remark, notify_url,
|
|
|
- "https://dlsh-nft.com.cn", "UTF-8",
|
|
|
- 30, null, null, null);
|
|
|
- System.out.println("支付结果: " + payResult);
|
|
|
-
|
|
|
- if (payResult.isSuccess()) {
|
|
|
- System.out.println("支付链接: " + payResult.getPayUrl());
|
|
|
- System.out.println("请在浏览器中打开上述链接完成支付");
|
|
|
-
|
|
|
- // 测试2: 查询支付结果
|
|
|
+ try {
|
|
|
+ // 测试1: 查询支付结果
|
|
|
System.out.println("\n=== 测试查询支付结果 ===");
|
|
|
- QueryResult queryResult = queryPayment(reqsn);
|
|
|
- System.out.println("查询结果: " + queryResult);
|
|
|
- } else {
|
|
|
- System.out.println("支付失败: " + payResult.getMessage());
|
|
|
+ try {
|
|
|
+ Map<String, String> queryResult = payService.query(reqsn, null);
|
|
|
+ System.out.println("查询结果: " + queryResult);
|
|
|
+
|
|
|
+ if ("SUCCESS".equals(queryResult.get("retcode"))) {
|
|
|
+ System.out.println("查询成功!");
|
|
|
+ System.out.println("交易状态: " + queryResult.get("trxstatus"));
|
|
|
+ System.out.println("交易ID: " + queryResult.get("trxid"));
|
|
|
+ System.out.println("交易金额: " + queryResult.get("trxamt"));
|
|
|
+ } else {
|
|
|
+ System.out.println("查询失败: " + queryResult.get("retmsg"));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("查询异常: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 测试2: 退款操作 (需要有原始交易)
|
|
|
+ System.out.println("\n=== 测试退款操作 ===");
|
|
|
+ String refundReqsn = "REFUND" + System.currentTimeMillis();
|
|
|
+ String oldTrxId = "TL" + (System.currentTimeMillis() - 1000); // 模拟原交易ID
|
|
|
+ String oldReqsn = "OLD" + (System.currentTimeMillis() - 1000); // 模拟原订单号
|
|
|
+
|
|
|
+ try {
|
|
|
+ Map<String, String> refundResult = payService.refund(trxamt, refundReqsn, oldTrxId, oldReqsn);
|
|
|
+ System.out.println("退款结果: " + refundResult);
|
|
|
+
|
|
|
+ if ("SUCCESS".equals(refundResult.get("retcode"))) {
|
|
|
+ System.out.println("退款成功!");
|
|
|
+ System.out.println("退款交易ID: " + refundResult.get("trxid"));
|
|
|
+ } else {
|
|
|
+ System.out.println("退款失败: " + refundResult.get("retmsg"));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("退款异常: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 测试3: 撤销操作
|
|
|
+ System.out.println("\n=== 测试撤销操作 ===");
|
|
|
+ String cancelReqsn = "CANCEL" + System.currentTimeMillis();
|
|
|
+
|
|
|
+ try {
|
|
|
+ Map<String, String> cancelResult = payService.cancel(trxamt, cancelReqsn, oldTrxId, oldReqsn);
|
|
|
+ System.out.println("撤销结果: " + cancelResult);
|
|
|
+
|
|
|
+ if ("SUCCESS".equals(cancelResult.get("retcode"))) {
|
|
|
+ System.out.println("撤销成功!");
|
|
|
+ System.out.println("撤销交易ID: " + cancelResult.get("trxid"));
|
|
|
+ } else {
|
|
|
+ System.out.println("撤销失败: " + cancelResult.get("retmsg"));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("撤销异常: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 测试4: 工具类方法测试
|
|
|
+ System.out.println("\n=== 测试工具类方法 ===");
|
|
|
+
|
|
|
+ // 测试随机字符串生成
|
|
|
+ String randomCode = SybUtil.getValidatecode(8);
|
|
|
+ System.out.println("生成随机码: " + randomCode);
|
|
|
+
|
|
|
+ // 测试MD5加密
|
|
|
+ String testData = "test data for md5";
|
|
|
+ String md5Hash = SybUtil.md5(testData.getBytes());
|
|
|
+ System.out.println("MD5加密测试: " + testData + " -> " + md5Hash);
|
|
|
+
|
|
|
+ // 测试JSON转换
|
|
|
+ String jsonStr = "{\"name\":\"test\",\"value\":\"123\"}";
|
|
|
+ try {
|
|
|
+ Map<String, String> jsonMap = SybUtil.json2Obj(jsonStr, Map.class);
|
|
|
+ System.out.println("JSON转换测试: " + jsonStr + " -> " + jsonMap);
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("JSON转换异常: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 测试签名生成
|
|
|
+ System.out.println("\n=== 测试签名生成 ===");
|
|
|
+ TreeMap<String, String> signParams = new TreeMap<>();
|
|
|
+ signParams.put("cusid", SybConstants.SYB_CUSID);
|
|
|
+ signParams.put("appid", SybConstants.SYB_APPID);
|
|
|
+ signParams.put("version", "11");
|
|
|
+ signParams.put("trxamt", String.valueOf(trxamt));
|
|
|
+ signParams.put("reqsn", reqsn);
|
|
|
+ signParams.put("randomstr", randomCode);
|
|
|
+ signParams.put("signtype", SybConstants.SIGN_TYPE);
|
|
|
+
|
|
|
+ try {
|
|
|
+ String appkey;
|
|
|
+ if ("RSA".equals(SybConstants.SIGN_TYPE)) {
|
|
|
+ appkey = SybConstants.SYB_RSACUSPRIKEY;
|
|
|
+ } else if ("SM2".equals(SybConstants.SIGN_TYPE)) {
|
|
|
+ appkey = SybConstants.SYB_SM2PPRIVATEKEY;
|
|
|
+ } else {
|
|
|
+ appkey = SybConstants.SYB_MD5_APPKEY;
|
|
|
+ }
|
|
|
+
|
|
|
+ String signature = SybUtil.unionSign(signParams, appkey, SybConstants.SIGN_TYPE);
|
|
|
+ System.out.println("签名类型: " + SybConstants.SIGN_TYPE);
|
|
|
+ System.out.println("生成签名: " + signature);
|
|
|
+
|
|
|
+ // 测试签名验证
|
|
|
+ boolean verifyResult = SybUtil.validSign(signParams, appkey, SybConstants.SIGN_TYPE);
|
|
|
+ System.out.println("签名验证结果: " + verifyResult);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("签名测试异常: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 测试5: HTTP连接工具测试
|
|
|
+ System.out.println("\n=== 测试HTTP连接工具 ===");
|
|
|
+ try {
|
|
|
+ HttpConnectionUtil httpUtil = new HttpConnectionUtil(SybConstants.SYB_APIURL + "/unitorder/query");
|
|
|
+ httpUtil.init();
|
|
|
+
|
|
|
+ TreeMap<String, String> httpParams = new TreeMap<>();
|
|
|
+ httpParams.put("appid", SybConstants.SYB_APPID);
|
|
|
+ httpParams.put("cusid", SybConstants.SYB_CUSID);
|
|
|
+ httpParams.put("version", "11");
|
|
|
+ httpParams.put("reqsn", reqsn);
|
|
|
+ httpParams.put("randomstr", SybUtil.getValidatecode(8));
|
|
|
+ httpParams.put("signtype", SybConstants.SIGN_TYPE);
|
|
|
+
|
|
|
+ String appkey = "MD5".equals(SybConstants.SIGN_TYPE) ? SybConstants.SYB_MD5_APPKEY :
|
|
|
+ "RSA".equals(SybConstants.SIGN_TYPE) ? SybConstants.SYB_RSACUSPRIKEY :
|
|
|
+ SybConstants.SYB_SM2PPRIVATEKEY;
|
|
|
+
|
|
|
+ httpParams.put("sign", SybUtil.unionSign(httpParams, appkey, SybConstants.SIGN_TYPE));
|
|
|
+
|
|
|
+ byte[] response = httpUtil.postParams(httpParams, true);
|
|
|
+ String responseStr = new String(response, "UTF-8");
|
|
|
+ System.out.println("HTTP请求响应: " + responseStr);
|
|
|
+
|
|
|
+ httpUtil.destory();
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("HTTP连接测试异常: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("测试过程中发生异常: " + e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
- // 测试3: 模拟异步通知处理
|
|
|
- System.out.println("\n=== 测试异步通知处理 ===");
|
|
|
- Map<String, String> notifyParams = new HashMap<>();
|
|
|
- notifyParams.put("reqsn", reqsn);
|
|
|
- notifyParams.put("trxstatus", "0000");
|
|
|
- notifyParams.put("trxid", "TL" + System.currentTimeMillis());
|
|
|
- notifyParams.put("trxamt", String.valueOf(trxamt));
|
|
|
- notifyParams.put("sign", "test_sign"); // 实际使用时这里应该是真实的签名
|
|
|
-
|
|
|
- NotifyResult notifyResult = handleNotify(notifyParams);
|
|
|
- System.out.println("通知处理结果: " + notifyResult);
|
|
|
-
|
|
|
System.out.println("\n=== 测试完成 ===");
|
|
|
+ System.out.println("注意: 部分测试可能因为没有真实的交易数据而失败,这是正常现象。");
|
|
|
+ System.out.println("在实际使用时,请确保:");
|
|
|
+ System.out.println("1. 配置正确的商户信息和密钥");
|
|
|
+ System.out.println("2. 使用真实的交易订单号进行查询、退款、撤销操作");
|
|
|
+ System.out.println("3. 在生产环境中移除测试代码");
|
|
|
}
|
|
|
}
|