{"id":18431267,"url":"https://github.com/zhan3333/skysharing-cass-openapi-java-sdk","last_synced_at":"2025-04-15T00:02:00.037Z","repository":{"id":36632308,"uuid":"229163919","full_name":"zhan3333/skysharing-cass-openapi-java-sdk","owner":"zhan3333","description":"Skysharing CASS openapi SDK for Java 云享天空代付系统开放接口Java SDK","archived":false,"fork":false,"pushed_at":"2024-10-03T18:25:59.000Z","size":754,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T12:03:08.932Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhan3333.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-20T01:00:09.000Z","updated_at":"2023-09-05T07:41:51.000Z","dependencies_parsed_at":"2024-12-24T21:10:53.621Z","dependency_job_id":"7c2b9a34-ade0-4bfc-bb37-038d9ea5953a","html_url":"https://github.com/zhan3333/skysharing-cass-openapi-java-sdk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhan3333%2Fskysharing-cass-openapi-java-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhan3333%2Fskysharing-cass-openapi-java-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhan3333%2Fskysharing-cass-openapi-java-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhan3333%2Fskysharing-cass-openapi-java-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhan3333","download_url":"https://codeload.github.com/zhan3333/skysharing-cass-openapi-java-sdk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248981263,"owners_count":21193145,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T05:24:09.588Z","updated_at":"2025-04-15T00:01:59.737Z","avatar_url":"https://github.com/zhan3333.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Skysharing CASS open api JAVA SDK\n\n## Update Log\n\n### v2.3.7 2021-08-24\n\n1.新增微信单方授权（需电签）付款接口\n\n### v2.3.6 2021-07-21\n\n1. 新增微信单方授权付款接口\n\n### v2.3.5.1 2021-07-02\n\n1. 支付宝、银行卡通道支持 phone 参数\n\n### v2.3.5 2021-06-08\n\n1. 支付宝付款通道创建订单方法增加银行卡收款方式\n\n### v2.3.4 2021-04-16\n\n1. 新增支付宝创建订单接口\n2. 标机一些不需要的接口类, 移除部分类\n\n### v2.3.3 2020-08-05\n\n1. 修改 3.12, 3.13 API 电签接口流程\n2. 取消设置的默认 `HTTP` 请求超时时间, 增加 `HTTP` 请求超时返回异常 `RequestTimeoutException`\n3. 修正 `new Notify(str)` 后的对象无法访问 `response` 的 bug \n4. 增加通过外部订单号查询订单数据接口 `GetOneOrderByOuterOrderSN`\n\n## 注意\n\n1. Client 创建时默认超时时长为 `60s`, 当付款请求产生 `RequestTimeoutException` 异常时， 对于该付款请求不要立即再次发送请求， 建议等待一段时间后进行订单查询操作, 防止超时的请求已到达结算系统并生效。\n\n## 准备\n\n1. 商户的私钥字符串 `appPrivateKey`, 无头尾信息及换行, pkcs8 格式, 下为示例\n`MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDmtPj23EPTcpi6S1BppKJzR5+4ab3CWROpYrgdDFlbpO/ia++ckFdJyrgEjpRE3L4veCGpmshC8bG2xH9UaI5edIuC5WXy0FkW2oKFR6dnPpSv22GM/xNFOIGOVqsex9tZbJbfhmyYuWpUbHXlga2KCxbQosYktuWjAEzb+sfFngGVaI7CS5NSUGFhR3xwpEzO8VoViPi66qVQavoxkreG/uKzoI9I7Ai3b5JK+vA+Gz7W+ZpAqJPZihdvmqaKIt7QL7A4+tV8OWzhELyaIsIJ33RfsGe+iLp7XAfh1dm4bfzFIcUS3ws2ZE0ywb3TCurXMYqeLjsiVr42wYjPiHwdAgMBAAECggEAJqC0crjMjnHIiqCjlRygqoaagokJ4amCdkD2LL7tkz+ZfqKt2tv8EXnkt7absq/3FAGcOUaWM0c+hyh9XUeoVr5SwZbhK/eggwgRBHnL2KiMwqkLu0zWECf24Ts3qY6y9lUNKd3a/vNEj2AdmVDOGqfiqQon/Ou2pUUemVJy8m5BwYLafp5tZk/Yvo5ns48I6recTaQiCTbwXlD0hSYVHhaOhtzIXLk5hjBKGasDNuvAmhqZM+XGnITTq4Z+wGZS3Ir4ynGZMn4FzzTXd41SZ/tucKjFmh3tSeCQjTBzKS+Y6je694UNCKy0TTFc9mANFs4qL+m58uD6KWUiRx/27QKBgQD/FgJQPB2W6Yw92vTS1fJA1irJLPeUoy3R99qDAlGjbnwht31943/DfhBtBGdEOUaXskJvtZLYwU4aE9CytUKQeqhuIU1uRosE44V3wq6EFTknXGFQ+XAT9e+hAjSn7HcHYjPRvxMJvmg3N/86oQAq/Zt6UNGmvCRwQzSdmdeUmwKBgQDniJm7v56xVuO/5W+P9yiNUayHgCfya7/eQij0Rw9hIJ0mKEUl2ENGGdtw6ZqsdrSD6yHkzGLTGCd0cy9cifwz25AjnSOf5kLHJem9WuxqcFlZQlF8X+ba1OOJwfQxyCrjhR2/1QttVGOl84kMDij/YYA0Ip+EQ5mP5YWxsfzRpwKBgGHX3VdNV8Q1HRf0zoe4jM2V2J+F4glfdgnd2jD6SLo5fN+p9Da/dphT2JUYZUvj9FHnjFgw+3ys2Ppjs19462ljwwtLNtofsN9VLjK7uBjt0xhn9OQMaZMeeKX3pJ7sstNgNaQ0eGb6ZBsaHYoti1TyJhsKuQANlqSBAsOY6PoVAoGAfpjIRkoeASVbXj+bYoJn3+16gpRmQzz7KhHOxtJb7GWix4xZUroO/rOAsxpoAkjdpwvX+nxuxLF+UUPx741bIxe4lmCDbBjBBpcKWQjwH7rSf+WtHG5rkde5mkc8uEOUf9b3Tz60AtGTsteYZckQTaMIMHmF8xHrUyzSjzic3h0CgYEApidFokFSKY39OLk9WqWLd+XfL1ykOJh4xsREADo09oIvVtRrtaojaDpCg6/ewb5eVHzIxutTJqrKNIiO00+jK9OBqHf3NIbVA2aAxj2+zTZCc/+zkqDjnhWFcKLU4hAH5j6mQrDcn7hzE5ic/nyILQOyO2hQVXqM82RFcIJPCkE=`\n2. CASS系统提供的公钥 `cassPublicKey`, 无头尾信息及换行, 下为示例\n`MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzvaToLe+vIN/G4u9gxe3kL/myE129RsgZWIyTf7Tjc0rARdsvE9Xy2fdzNTwttyqJJaB9oNuCjdhNXAJoSUqoKei0aA88oFylPWG6DZ7ZoIXOGtipvnloosWhskes+E+EvQWrwSgzCAEr5N7iHY5DEBBy8ZoHsthd5CvCGyBgfeAsCCQ/R6Cl2Bw0SNasVu45+0PfmW/AUeC29i7KJm1HC/D5n6oXSa6q16oh6TWiFnVJF5dNCeuHN+3KQAe/Hv3CldiTHB8mND9OYzx2DzZYJD7g8f185Td5a8mRwlYf2PwTfGLkMdxa+XlGIsHjCFbXD1N85XC3QVfbgZWnxQA9QIDAQAB`\n3. CASS提供的商户 `APPID`\n4. CASS open api 调用地址 `https://fuwu-openapi.skysharing.cn/gateway/cass`\n\n##  maven 引用包\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.zhan3333\u003c/groupId\u003e\n  \u003cartifactId\u003eskysharing-cass-sdk-java\u003c/artifactId\u003e\n  \u003cversion\u003e2.3.6\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## 简单调用示例\n\n```JAVA\nclass Test {\n    public void queryBalance() {\n        // 商户私钥\n        String privateKeyStr = \"\";\n        // CASS系统公钥\n        String cassPublicKeyStr = \"\";\n        // APPID\n        String APPID = \"12345H29GDK580CGNO30G81OEB\";\n        // 实例化客户端, format 暂时只支持JSON, signType 暂时只支持RSA2\n        DefaultCassPayClient client = new DefaultCassPayClient(\"https://fuwu-openapi.skysharing.cn/gateway/cass\", APPID, privateKeyStr, cassPublicKeyStr, \"JSON\", \"RSA2\");\n        // 可选， 设置请求超时时间。默认为 60s\n        client.setTimeout(TimeUnit.SECONDS, 60, 60, 60, 60);\n        // 可选， 开启 debug 日志输出， 将通过 System.out 输出\n        client.setDebug(true);\n        // 创建接口请求\n        GetBalanceRequest request = new GetBalanceRequest();\n        // 设置请求参数\n        request.setPayChannelK(GetBalanceRequest.BANK);\n        // 执行请求,获取响应值\n        GetBalanceResponse response = client.execute(request);\n        // 验签\n        if (response.verify()) {\n            // 验签通过\n            if (response.isSuccess()) {\n                // 业务请求成功 ...   \n                System.println(response) \n            }\n        }\n    }\n}\n\n```\n\n## 接口对应请求和响应列表\n\n|序号|  接口名称   | 请求  | 响应|\n| ---- |  ----  | ----  | --- |\n|3.1|获取商户余额         | GetBalanceRequest             | GetBalanceResponse |\n|3.2|获取单个批次状态       | GetOneRemitStatusRequest      | GetOneRemitStatusResponse |\n|3.3|获取单个订单状态      | GetOneOrderStatusRequest       | GetOneOrderStatusResponse |\n|3.4|银行卡实时下单        | PayBankRemitRequest               | PayBankRemitResponse |\n|3.5|微信实时下单        | PayWeChatRemitRequest                | PayWeChatRemitResponse |\n|3.6|单笔银行卡实时下单          | PayOneBankRemitRequest            | PayOneBankRemitRequest |\n|3.7|单笔微信实时下单          | PayOneWeChatRemitRequest             | PayOneWeChatRemitRequest |\n|3.8|充值账号查询             | GetChannelDataRequest                 | GetChannelDataResponse |\n|3.9|银行卡充值申请提交      | ChargeBankRequest                     | ChargeBankResponse |\n|3.10|微信充值申请提交      | ChargeWeChatPayRequest                   | ChargeWeChatPayResponse |\n|3.11|获取充值结果             | GetChargeResultRequest                | GetChargeResultResponse |\n|3.12|添加用户实名认证状态         | VerifyUserRequest                 | VerifyUserResponse |\n|3.13|获取用户实名认证状态         | GetUsersVerifyStatusRequest       | GetUsersVerifyStatusResponse |\n|3.14|获取合同列表         | GetContractListRequest                    | GetContractListResponse |\n|3.16|批量获取用户电签状态         | GetUserEsignStatusRequest                    | GetUserEsignStatusResponse |\n|3.17|获取商户电签二维码         | GetShowSignUrlRequest                    | GetShowSignUrlResponse |\n|3.18|通过外部订单号查询订单状态         | GetOneOrderByOuterOrderSNRequest                    | GetOneOrderByOuterOrderSNResponse |\n|3.19|支付宝单笔下单         | PayOneALiRemitRequest                    | PayOneALiRemitResponse |\n|3.20|支付宝批量下单         | PayALiRemitRequest                    | PayALiRemitResponse |\n|3.21|微信单笔付款到 OpenID         | PayOneWeChatOpenIDRemitRequest                    | PayOneWeChatOpenIDRemitResponse |\n|3.22|微信批量付款到 OpenID         | PayWeChatOpenIDRemitRequest                    | PayWeChatOpenIDRemitResponse |\n\n## 异常清单\n\n|类|说明|\n|----|----|\n|CassApiException|异常基类|\n|InvalidPrivateKeyException|无效的私钥|\n|InvalidPublicKeyException|无效的公钥|\n|RequestFailedException|请求失败异常|\n|RequestTimeoutException|请求超时异常, 对于付款等关键接口, 发生该异常时, 务必不要立即重复发起请求, 需要一段时间后通过查询接口确认订单是否提交成功|\n|ResponseNotValidException|服务端响应结构异常|\n|SignException|对数据进行签名异常|\n\n## 解析异步通知数据\n\n可以将接收到的 json 文本直接创建 Notify.class, 可以解析出来对象便于操作\n\n```\nString str = \"{\\\"response\\\":{\\\"charset\\\":\\\"UTF-8\\\",\\\"content\\\":\\\"{\\\\\\\"resourceID\\\\\\\":\\\\\\\"18483279179157507UBO8C1GBI8S4RUJ\\\\\\\",\\\\\\\"pushType\\\\\\\":2,\\\\\\\"notifyUrl\\\\\\\":\\\\\\\"http:\\\\\\\\\\\\/\\\\\\\\\\\\/docker.for.mac.localhost:7777\\\\\\\\\\\\/api\\\\\\\\\\\\/conversion_skysharing\\\\\\\\\\\\/v1\\\\\\\\\\\\/notify\\\\\\\",\\\\\\\"sendData\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"status\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"TRADE_FAILED\\\\\\\\\\\\\\\"}\\\\\\\",\\\\\\\"createdAt\\\\\\\":1585742840681725,\\\\\\\"orderSN\\\\\\\":\\\\\\\"8D9B9AE0-6DDD-4D72-9334-18AD72029500\\\\\\\",\\\\\\\"rbUUID\\\\\\\":\\\\\\\"18483278357073921OA5IDCFFO2RO62L\\\\\\\"}\\\",\\\"notifyTime\\\":\\\"20200608143859\\\",\\\"notifyType\\\":2,\\\"signType\\\":\\\"RSA2\\\"},\\\"sign\\\":\\\"gV9P7jvBCX6qc8xRRfIAfi357Wpc9Rmt9MfOwa4QucRU3\\\\/WSf525WFlyfEt3BqeJ1qsDWGHLoH5l++77kUPL0qRcLc6InC6G1uxERaaJ8yPPZa9246mJJo3SyLr+3ZT5bq5mLYhOOx0Zj2GR0+08luLHB29f72xdXTNWvitro9o48O4RJ0CeldIG89J1N683ZXlRSIfUcIBoHWEUHlYV8sDZlQlAMcc9+dIjsg\\\\/5RGjkhJHI2LMKldJrvK8jCb1pruS+i4f51gatcdqwoDZ0zWy1xTaywPT4PdaBU6emB4Xn4kyW6NBCLFVEU0bIg9CNZXZ6TXSN5H6Kbl8ppJuKdA==\\\"}\";\nNotify n = new Notify(str);\nSystem.out.printf(\"notify object: %s\", n);\n```\n\n## 异步通知签名校验\n\n可以直接对通知请求体进行校验签名，内部会自动解码处理\n\n```\nMap\u003cString, String\u003e map = new HashMap\u003c\u003e();\ntry {\n    DefaultCassPayClient client = new DefaultCassPayClient(dotenv.get(\"API_URL\"), dotenv.get(\"APPID\"), dotenv.get(\"PRIVATE_KEY_STR\"), dotenv.get(\"VZHUO_PUBLIC_KEY_STR\"));\n    client.setDebug(true);\n    boolean ret = client.verifyNotify(postStr);\n    System.out.printf(\"response verify: %b\", ret);\n    if (ret) {\n        map.put(\"content\", \"success\");\n    } else {\n        map.put(\"content\", \"failed\");\n    }\n} catch (InvalidPrivateKeyException | InvalidPublicKeyException e) {\n    e.printStackTrace();\n}\n// 需要向客户端返回 success, failed, 为 failed 时将会按照一定频率重试通知，\nreturn map\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhan3333%2Fskysharing-cass-openapi-java-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhan3333%2Fskysharing-cass-openapi-java-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhan3333%2Fskysharing-cass-openapi-java-sdk/lists"}