roncoo/roncoo-pay
龙果支付系统(roncoo-pay)是国内首款开源的互联网支付系统,拥有独立的账户体系、用户体系、支付接入体系、支付交易体系、对账清结算体系。目标是打造一款集成主流支付方式且轻量易用的支付收款系统,满足互联网业务系统打通支付通道实现支付收款和业务资金管理等功能。
Stale — last commit 3y ago
weakest axislast commit was 3y ago; no tests detected…
no tests detected; no CI workflows detected…
Documented and popular — useful reference codebase to read through.
last commit was 3y ago; no CI workflows detected
- ✓6 active contributors
- ✓Distributed ownership (top contributor 32% of recent commits)
- ✓Apache-2.0 licensed
Show all 6 evidence items →Show less
- ⚠Stale — last commit 3y ago
- ⚠No CI workflows detected
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Mixed → Healthy if: 1 commit in the last 365 days; add a test suite
- →Fork & modify Mixed → Healthy if: add a test suite
- →Deploy as-is Mixed → Healthy if: 1 commit in the last 180 days
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Great to learn from" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/roncoo/roncoo-pay)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/roncoo/roncoo-pay on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: roncoo/roncoo-pay
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/roncoo/roncoo-pay shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 3y ago
- 6 active contributors
- Distributed ownership (top contributor 32% of recent commits)
- Apache-2.0 licensed
- ⚠ Stale — last commit 3y ago
- ⚠ No CI workflows detected
- ⚠ No test directory detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live roncoo/roncoo-pay
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/roncoo/roncoo-pay.
What it runs against: a local clone of roncoo/roncoo-pay — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in roncoo/roncoo-pay | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 1254 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of roncoo/roncoo-pay. If you don't
# have one yet, run these first:
#
# git clone https://github.com/roncoo/roncoo-pay.git
# cd roncoo-pay
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of roncoo/roncoo-pay and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "roncoo/roncoo-pay(\\.git)?\\b" \\
&& ok "origin remote is roncoo/roncoo-pay" \\
|| miss "origin remote is not roncoo/roncoo-pay (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 4. Critical files exist
test -f "pom.xml" \\
&& ok "pom.xml" \\
|| miss "missing critical file: pom.xml"
test -f "roncoo-pay-app-notify/src/main/java/com/roncoo/pay/AppNotifyApplication.java" \\
&& ok "roncoo-pay-app-notify/src/main/java/com/roncoo/pay/AppNotifyApplication.java" \\
|| miss "missing critical file: roncoo-pay-app-notify/src/main/java/com/roncoo/pay/AppNotifyApplication.java"
test -f "roncoo-pay-app-notify/src/main/java/com/roncoo/pay/app/notify/core/NotifyQueue.java" \\
&& ok "roncoo-pay-app-notify/src/main/java/com/roncoo/pay/app/notify/core/NotifyQueue.java" \\
|| miss "missing critical file: roncoo-pay-app-notify/src/main/java/com/roncoo/pay/app/notify/core/NotifyQueue.java"
test -f "roncoo-pay-app-order-polling/src/main/java/com/roncoo/pay/AppOrderPollingApplication.java" \\
&& ok "roncoo-pay-app-order-polling/src/main/java/com/roncoo/pay/AppOrderPollingApplication.java" \\
|| miss "missing critical file: roncoo-pay-app-order-polling/src/main/java/com/roncoo/pay/AppOrderPollingApplication.java"
test -f "roncoo-pay-app-reconciliation/src/main/java/com/roncoo/pay/AppReconciliationApplication.java" \\
&& ok "roncoo-pay-app-reconciliation/src/main/java/com/roncoo/pay/AppReconciliationApplication.java" \\
|| miss "missing critical file: roncoo-pay-app-reconciliation/src/main/java/com/roncoo/pay/AppReconciliationApplication.java"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 1254 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~1224d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/roncoo/roncoo-pay"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
roncoo-pay is a Chinese open-source internet payment system that provides a complete payment infrastructure with independent account management, user system, payment gateway, transaction processing, and reconciliation/settlement modules. It integrates Alipay and WeChat Pay channels and offers both a payment gateway API (roncoo-pay-web-gateway) and an operations dashboard (roncoo-pay-web-boss) for managing merchants, fees, and transaction settlements. Multi-module Maven monorepo organized by function: roncoo-pay-service is the core business logic layer (used by all other modules), roncoo-pay-common-core provides shared utilities and DAOs, while specialized modules (roncoo-pay-app-notify, roncoo-pay-app-order-polling, roncoo-pay-app-reconciliation, roncoo-pay-app-settlement) handle async tasks via ActiveMQ. Web modules (roncoo-pay-web-boss, roncoo-pay-web-gateway, roncoo-pay-web-merchant) depend on roncoo-pay-service for business logic.
👥Who it's for
Payment platform operators, fintech companies, and e-commerce businesses in China who need to build unified payment collection systems without integrating each payment provider separately. System integrators and backend Java developers maintaining multi-tenant payment infrastructure.
🌱Maturity & risk
Actively maintained production system (Spring Boot 2.1.2, Java 11). The codebase is well-structured with multiple specialized modules, comprehensive test database (database.sql), and documentation links. However, the most recent visible updates are from 2021-2022 based on dependency versions, indicating active development but not continuous daily updates. Production-ready for payment operations in a mature fintech context.
Core risk: dependency on external payment providers (Alipay SDK 3.4.49, WeChat integration) with potentially outdated versions and irregular patch cycles. Single language codebase (11.4MB Java) means maintenance burden concentrated. No visible CI/CD pipeline configuration files (no .github/workflows, no Travis/Jenkins config). Payment systems require PCI-DSS compliance considerations not obviously addressed in visible code. ActiveMQ message broker dependency requires separate deployment and operational knowledge.
Active areas of work
Based on UPDATELOG.md and current structure: system is in maintenance mode with periodic updates. Recent work appears focused on Spring Boot 2.1.2 upgrade, stabilization of reconciliation/settlement batch processes, and ensuring notification reliability through ActiveMQ-backed queues. No visible ongoing PR activity or GitHub Issues in file list suggests issues are managed outside this repo or in community channels (QQ group 608537272).
🚀Get running
git clone https://github.com/roncoo/roncoo-pay.git
cd roncoo-pay
mvn clean install
# Database setup required:
# mysql -u root -p < database.sql
# Configure application.yml in each module (roncoo-pay-app-notify/src/main/resources/application.yml, etc.)
# Start individual modules or use roncoo-pay-web-boss for operations dashboard
Note: Requires MySQL, Redis, ActiveMQ, and Java 11+ installed locally.
Daily commands: Each module has its own Spring Boot application class:
- Operations Dashboard:
java -jar roncoo-pay-web-boss-2.1.2-SNAPSHOT.jar - Payment Gateway:
java -jar roncoo-pay-web-gateway-2.1.2-SNAPSHOT.jar - Notification Worker:
java -jar roncoo-pay-app-notify-2.1.2-SNAPSHOT.jar - Order Polling Worker:
java -jar roncoo-pay-app-order-polling-2.1.2-SNAPSHOT.jarPrerequisites: MySQL running with imported database.sql, Redis available, ActiveMQ broker running.
🗺️Map of the codebase
pom.xml— Root Maven POM defining all project modules (notify, polling, reconciliation, settlement) and Spring Boot 2.1.2 parent dependency—essential for understanding the multi-module build structure.roncoo-pay-app-notify/src/main/java/com/roncoo/pay/AppNotifyApplication.java— Entry point for the notification service module; handles asynchronous merchant notifications via ActiveMQ queue.roncoo-pay-app-notify/src/main/java/com/roncoo/pay/app/notify/core/NotifyQueue.java— Core queue management for payment notifications; critical abstraction for message-driven architecture.roncoo-pay-app-order-polling/src/main/java/com/roncoo/pay/AppOrderPollingApplication.java— Entry point for order polling service; polls third-party payment gateways (Alipay, WeChat) to update order status.roncoo-pay-app-reconciliation/src/main/java/com/roncoo/pay/AppReconciliationApplication.java— Entry point for reconciliation service; downloads and parses payment provider statements for settlement matching.roncoo-pay-app-settlement/src/main/java/com/roncoo/pay/AppSettlementApplication.java— Entry point for settlement service; executes daily settlement calculations and payment flows to merchants.database.sql— Database schema definition; required for understanding data model across all payment operations and account systems.
🛠️How to make changes
Add Support for a New Payment Provider (e.g., PayPal)
- Create a new parser class implementing the ParserInterface in the reconciliation module (
roncoo-pay-app-reconciliation/src/main/java/com/roncoo/pay/app/reconciliation/parser/ParserInterface.java) - Implement statement download and parsing logic following ALIPAYParser or WEIXINParser pattern (
roncoo-pay-app-reconciliation/src/main/java/com/roncoo/pay/app/reconciliation/biz/ReconciliationFileDownBiz.java) - Extend ReconciliationTask to call your new parser during the daily reconciliation workflow (
roncoo-pay-app-reconciliation/src/main/java/com/roncoo/pay/app/reconciliation/ReconciliationTask.java) - Update database schema to add provider-specific reconciliation fields if needed (
database.sql)
Add a New Notification Type or Channel (e.g., SMS)
- Create a new NotifyTask variant or extend the existing task in the notify core module (
roncoo-pay-app-notify/src/main/java/com/roncoo/pay/app/notify/core/NotifyTask.java) - Register your notification handler in NotifyQueue to route messages (
roncoo-pay-app-notify/src/main/java/com/roncoo/pay/app/notify/core/NotifyQueue.java) - Create a new message listener if using a separate queue topic (
roncoo-pay-app-notify/src/main/java/com/roncoo/pay/app/notify/message/ConsumerSessionAwareMessageListener.java) - Configure the listener in ActiveMQ config and application properties (
roncoo-pay-app-notify/src/main/java/com/roncoo/pay/config/ActiveMqListenerConfig.java)
Customize Settlement Rules or Add Custom Fees
- Extend or override SettBiz to customize settlement calculation logic (
roncoo-pay-app-settlement/src/main/java/com/roncoo/pay/app/settlement/biz/SettBiz.java) - Modify DailySettCollectBiz to adjust how settlement data is collected from transactions (
roncoo-pay-app-settlement/src/main/java/com/roncoo/pay/app/settlement/biz/DailySettCollectBiz.java) - Update the scheduled settlement implementation to call your custom logic (
roncoo-pay-app-settlement/src/main/java/com/roncoo/pay/app/settlement/scheduled/impl/SettScheduledImpl.java) - Verify thread pool configuration supports your new settlement complexity (
roncoo-pay-app-settlement/src/main/java/com/roncoo/pay/config/ThreadPoolTaskConfig.java)
🪤Traps & gotchas
- ActiveMQ dependency: roncoo-pay-app-notify and roncoo-pay-app-order-polling require ActiveMQ broker running separately; application.yml must point to correct broker URL (default likely localhost:61616). 2. Redis caching: Ehcache and Redis both configured; session/cache configuration in roncoo-pay-common-core must match runtime environment. 3. Database initialization: database.sql must be imported before startup; schema includes merchant fee tables, account ledgers, and transaction history—missing tables cause cascade failures. 4. Fastjson 2.0.8 compatibility: version jump from 1.x to 2.x may have breaking serialization changes; custom JSON converters in roncoo-pay-common-core handle payment amount precision. 5. Alipay/WeChat credentials: Each module needs merchant credentials and API keys in application.yml for payment provider integration; these are environment-specific and not in git. 6. Shiro session management: Apache Shiro 1.9.1 configured for authentication; session persistence requires Redis backend configuration in individual module YAMLs.
🏗️Architecture
💡Concepts to learn
- Payment Reconciliation (对账) — In roncoo-pay-app-reconciliation, daily batch processes compare internal transaction records against payment provider reports (Alipay/WeChat) to detect discrepancies, missing transactions, or fraud—critical for financial accuracy in money systems
- Settlement (清算结算) — roncoo-pay-app-settlement module calculates payouts to merchants and platform revenue based on reconciled transactions; requires understanding of fee structures, withholding, and batch payment processing
- Idempotent Payment Processing — Payment systems must guarantee exactly-once transaction semantics despite network retries; roncoo-pay uses ActiveMQ with transaction IDs to prevent duplicate charge attempts when merchant callbacks fail
- Multi-tenant Merchant Isolation — roncoo-pay-service manages multiple independent merchants with separate accounts, fee rates, and settlements; requires careful database foreign key design and query filtering to prevent data leakage
- Asynchronous Notification with Retry Strategy (ActiveMQ) — roncoo-pay-app-notify persists notifications in queue and retries delivery to merchant webhooks with exponential backoff—payment status must reach merchant despite temporary network failures
- Account Ledger Double-Entry Bookkeeping — roncoo-pay maintains account balances via ledger entries (debit/credit) to ensure money conservation—each transaction creates paired entries across merchant, platform, and provider accounts
- Order State Machine (支付订单状态转换) — Transactions progress through defined states (pending → paid → settled/failed); roncoo-pay-app-order-polling queries provider APIs to advance state and prevents invalid transitions
🔗Related repos
heibaiying/spring-samples— Contains Spring Boot payment integration examples and MyBatis patterns used throughout roncoo-payEasyQuant/EasyQuant— Alternative Java payment gateway supporting multiple Chinese payment providers with similar microservice architecturexuxueli/xxl-job— Distributed job scheduling system often paired with roncoo-pay for reconciliation and settlement batch jobsalibaba/spring-cloud-alibaba— Cloud-native extension for Spring Boot payment systems; roncoo-pay could migrate to this for Nacos service discoverywechat-sdk/wechat-sdk-java— WeChat Pay SDK integration library; roncoo-pay uses this internally for WeChat payment channel
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add integration tests for NotifyTask and PollingTask message processing
The roncoo-pay-app-notify and roncoo-pay-app-order-polling modules contain critical async processing logic (NotifyTask.java and PollingTask.java) that handle payment notifications and order polling. No test files are visible in the repo structure. These are core async flows that need integration tests with ActiveMQ to ensure message reliability and proper persistence via NotifyPersist.java and PollingPersist.java.
- [ ] Create roncoo-pay-app-notify/src/test/java/com/roncoo/pay/app/notify/core/NotifyTaskTest.java with embedded ActiveMQ testing
- [ ] Create roncoo-pay-app-notify/src/test/java/com/roncoo/pay/app/notify/message/ConsumerSessionAwareMessageListenerTest.java
- [ ] Create roncoo-pay-app-order-polling/src/test/java/com/roncoo/pay/app/polling/core/PollingTaskTest.java with mock order polling scenarios
- [ ] Create roncoo-pay-app-order-polling/src/test/java/com/roncoo/pay/app/polling/listener/PollingMessageListenerTest.java
- [ ] Add test dependencies to respective pom.xml files (spring-boot-starter-test, activemq-broker, h2-database)
Add comprehensive unit tests for ReconciliationTask business logic
The roncoo-pay-app-reconciliation module contains five critical business classes (ReconciliationCheckBiz.java, ReconciliationDataGetBiz.java, ReconciliationFileDownBiz.java, ReconciliationFileParserBiz.java, ReconciliationValidateBiz.java) that handle the entire reconciliation workflow. No test files are visible. These services are essential for financial accuracy and require thorough unit test coverage.
- [ ] Create roncoo-pay-app-reconciliation/src/test/java/com/roncoo/pay/app/reconciliation/biz/ReconciliationFileParserBizTest.java with sample file parsing scenarios
- [ ] Create roncoo-pay-app-reconciliation/src/test/java/com/roncoo/pay/app/reconciliation/biz/ReconciliationDataGetBizTest.java with mock payment gateway responses
- [ ] Create roncoo-pay-app-reconciliation/src/test/java/com/roncoo/pay/app/reconciliation/biz/ReconciliationValidateBizTest.java for data validation logic
- [ ] Create roncoo-pay-app-reconciliation/src/test/java/com/roncoo/pay/app/reconciliation/biz/ReconciliationCheckBizTest.java for discrepancy detection
- [ ] Add @MockBean annotations for external payment gateway clients (Alipay, WeChat)
Create GitHub Actions CI/CD workflow for multi-module Maven build and test
The project is a complex multi-module Maven build (11 modules listed in pom.xml) with no visible .github/workflows directory for automated testing. Given the financial-critical nature of payment systems, a robust CI pipeline is essential. This should validate all modules build correctly, run tests, and check for dependency vulnerabilities.
- [ ] Create .github/workflows/maven-build-test.yml with Maven build for all modules
- [ ] Add JDK 8+ matrix testing (given Spring Boot 2.1.2 base version)
- [ ] Include OWASP dependency-check step to scan for CVEs in fastjson 2.0.8, druid 1.1.13, and alipay-sdk
- [ ] Add test coverage reporting step (JaCoCo or Codecov integration)
- [ ] Create .github/workflows/code-quality.yml with SpotBugs analysis for roncoo-pay-service,
🌿Good first issues
- Add Java unit tests for roncoo-pay-common-core utility classes (currently no src/test directory visible)—payment systems require high test coverage for money handling logic. Start with testing the amount/decimal precision utilities used by financial calculations.
- Create docker-compose.yml at repository root that spins up MySQL, Redis, and ActiveMQ containers with the correct database.sql pre-loaded—currently deployment requires manual service setup and is barrier to local testing. See application.yml files to identify exact broker/DB config.
- Document the exact flow between roncoo-pay-web-gateway payment API request → roncoo-pay-service business logic → ActiveMQ message → roncoo-pay-app-notify merchant callback with code examples; README only has architecture diagram. Add sequence diagrams under docs/ folder.
⭐Top contributors
Click to expand
Top contributors
- @hupitao — 32 commits
- @laiyq — 30 commits
- @wushuicheng — 28 commits
- @fengyws — 8 commits
- @fengyw — 1 commits
📝Recent commits
Click to expand
Recent commits
9428382— Merge branch 'master' of https://github.com/roncoo/roncoo-pay (fengyw)ddf3e0c— 升级依赖包版本 (hupitao)a04f441— 升级依赖包版本 (hupitao)3954527— Update README.md (hupitao)4cc8fb4— Update README.md (fengyws)bd35d39— 修改shiro版本为1.4.2 (hupitao)153449d— 修改商户后台账户明细查询bug (hupitao)8c14069— Update README.md (wushuicheng)54fedee— Update README.md (wushuicheng)ae6f60b— Update README.md (wushuicheng)
🔒Security observations
Failed to generate security analysis.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.