Browse Source

2025-05-15 09:09:39

max 2 tháng trước cách đây
mục cha
commit
3d3109f5c9

+ 5 - 0
push.sh

@@ -0,0 +1,5 @@
+#!/bin/sh
+time=$(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
+git add . &&
+git commit -m "$time" && 
+git push

+ 78 - 10
接口文档/.obsidian/workspace.json

@@ -25,14 +25,74 @@
             "id": "b3f47c8c8de37e9c",
             "type": "leaf",
             "state": {
-              "type": "graph",
-              "state": {},
-              "icon": "lucide-git-fork",
-              "title": "关系图谱"
+              "type": "markdown",
+              "state": {
+                "file": "未命名.md",
+                "mode": "source",
+                "source": true
+              },
+              "icon": "lucide-file",
+              "title": "未命名"
+            }
+          },
+          {
+            "id": "52b007ab2637c4ea",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "未命名.md",
+                "mode": "source",
+                "source": true
+              },
+              "icon": "lucide-file",
+              "title": "未命名"
+            }
+          },
+          {
+            "id": "9724e1a63fd768e4",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "clearjunctionrestapi 接入建议.md",
+                "mode": "preview",
+                "source": true
+              },
+              "icon": "lucide-file",
+              "title": "clearjunctionrestapi 接入建议"
+            }
+          },
+          {
+            "id": "2b6ab719ba622921",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "2025-05-11.md",
+                "mode": "source",
+                "source": true
+              },
+              "icon": "lucide-file",
+              "title": "2025-05-11"
+            }
+          },
+          {
+            "id": "ed58cc37b8427168",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "运维手册.md",
+                "mode": "source",
+                "source": true
+              },
+              "icon": "lucide-file",
+              "title": "运维手册"
             }
           }
         ],
-        "currentTab": 1
+        "currentTab": 5
       }
     ],
     "direction": "vertical"
@@ -179,8 +239,19 @@
       "command-palette:打开命令面板": false
     }
   },
-  "active": "b3f47c8c8de37e9c",
+  "active": "ed58cc37b8427168",
   "lastOpenFiles": [
+    "clearjunctionrestapi 接入建议.md",
+    "clearjunctionrestapi 评估.md",
+    "未命名.md",
+    "2025-05-11.md",
+    "欢迎.md",
+    "运维手册.md",
+    "Pasted image 20250514163944.png",
+    "会议记录.md",
+    "未命名 1",
+    "Pasted image 20250511184143.png",
+    "未命名",
     "开放接口文档.md",
     "output",
     "template.tex",
@@ -188,11 +259,8 @@
     "md2word copy.py",
     "开放接口文档.docx",
     "~$开放接口文档.docx",
-    "未命名.md",
     "~$xample.docx",
     "example.docx",
-    "开发 接口文档.md",
-    "md2word.py",
-    "欢迎.md"
+    "开发 接口文档.md"
   ]
 }

+ 5 - 0
接口文档/2025-05-11.md

@@ -0,0 +1,5 @@
+5月11日:
+1、优化未认证用户添加收款地址的错误
+2、修复商户管理页面,禁用功能未生效的问题
+3、系统缓存切换到redis
+4、隐藏生产环境未测试菜单目录

BIN
接口文档/Pasted image 20250511184143.png


BIN
接口文档/Pasted image 20250514163944.png


+ 173 - 0
接口文档/clearjunctionrestapi 接入建议.md

@@ -0,0 +1,173 @@
+
+## 说明
+
+### 1. **API 概述**
+Clear Junction 的 API 旨在让你的组织能够无缝对接其各类金融产品。通过这个API,你可以实现:
+- 实时支付处理服务(如SEPA、SWIFT、FPS等多种国际支付通道)
+- 给客户提供虚拟IBAN(vIBAN)服务
+- 多币种国际结算能力
+
+API 是基于 REST 架构,使用 HTTPS 通道,消息格式为 JSON。
+
+---
+
+### 2. **账户类型**
+Clear Junction 目前提供四种账户类型:
+1. **Current Account(活期账户)**
+2. **Collection Account(收款账户)**
+3. **Correspondent Account(代理账户)**
+4. **E-money Account(电子货币账户)**
+
+根据你的业务需求和资质,还可能开通 vIBAN(虚拟IBAN)或 Wallet(电子钱包)等功能。
+
+---
+
+### 3. **认证方式**
+API 使用自定义的认证流程,基于 API Key。请求时需在 HTTP Header 中传递以下信息:
+
+| Header         | 说明                              |
+|---------------|-----------------------------------|
+| Date          | 发送请求时客户端服务器的时间       |
+| X-API-KEY     | API 用户标识(uuid),由CJ提供     |
+| Authorization | 请求签名,用于验证请求的合法性      |
+
+#### **签名计算流程**
+- 签名(REQUEST SIGNATURE)由 X-API-KEY、Date、RequestBody 和一个只有你知道的 apiPassword(API 密码)生成。
+- 服务器会用相同方式校验签名,若不一致则拒绝请求。
+
+---
+
+### 4. **HTTP 响应码说明**
+| 状态码 | 说明                                   |
+|-------|----------------------------------------|
+| 200   | 请求成功                               |
+| 201   | 已创建新实体(如新账户、交易等)        |
+| 400   | 请求参数有误,无法处理                  |
+| 401   | 未通过认证(签名校验未通过)            |
+| 404   | 找不到资源(如账户/交易不存在)         |
+| 409   | 请求体校验错误(缺字段、日期格式错误等)|
+| 500   | 服务器内部错误                         |
+
+#### 错误信息
+- 除了 HTTP 状态码外,响应体还会有详细的 JSON 格式错误对象列表,说明具体出错原因。
+
+---
+
+### **总结理解**
+- Clear Junction API 主要用于国际支付、收款、账户管理等金融服务的系统接口。
+- 接口安全性高,采用 API Key + 自定义签名机制进行认证。
+- 支持多种国际支付通道和多种账户类型,响应和错误处理机制清晰。
+- 适合金融科技、跨境支付、企业财务等场景。
+
+如果你要对接这个API,重点需要明白认证方式和如何生成签名,以及如何处理各种返回结果和异常。
+
+
+## 接入示例
+
+![[Pasted image 20250511184143.png]]
+
+API调用方与Clear Junction服务器之间的认证步骤。具体流程如下:
+
+1. **Client(客户端)** 发送API请求到 **Clear Junction**,在请求头中包含:
+   - **Date**
+   - **X-API-KEY**
+   - **Authorization**(签名)
+
+2. **Clear Junction** 服务器接收到请求后,会用相同的签名生成算法(基于 X-API-KEY、Date、RequestBody、apiPassword)来计算签名。
+
+3. 服务器将自己生成的签名与客户端请求头中的 **Authorization** 签名进行对比。
+
+4. 如果签名一致,认证通过,请求被处理。
+   - 如果签名不一致,返回401 Unauthorized(未授权)错误。
+
+
+当然可以!下面是用 Node.js 实现 Clear Junction API 认证签名生成和请求的完整示例。
+
+### 假设
+- 你已获得 `xApiKey`(API用户标识, uuid)
+- 你有分配的 `apiPassword`(API 密码)
+- 你要向 Clear Junction 某个接口(比如 `https://api.clearjunction.com/v1/example`)发起 POST 请求,带有 JSON 请求体
+
+---
+
+## 1. 安装依赖
+
+```bash
+npm install axios crypto
+```
+
+---
+
+## 2. 签名算法实现
+
+根据说明,签名是基于 `X-API-KEY`, `Date`, `RequestBody`, 和 `apiPassword` 组合计算的。具体算法未给出,通常如下:
+
+- 将这些参数按指定顺序拼接为字符串
+- 用 `apiPassword` 进行 HMAC-SHA256 加密
+- 将结果作为 Authorization header
+
+**⚠️ 实际算法以官方文档为准,以下为常见实现方式,供参考。**
+
+---
+
+## 3. 完整代码示例
+
+```javascript
+const axios = require('axios');
+const crypto = require('crypto');
+
+// 参数(请替换为你的实际值)
+const xApiKey = 'your-x-api-key-uuid';
+const apiPassword = 'your-api-password';
+const url = 'https://api.clearjunction.com/v1/example';
+
+// 请求体
+const requestBody = {
+  // 你的请求内容
+  amount: 100,
+  currency: 'EUR',
+  beneficiary: 'example'
+};
+
+// 当前时间,格式为 HTTP 标准时间字符串
+const date = new Date().toUTCString();
+
+// 1. 生成签名字符串(具体顺序和分隔符请参考官方文档,这里假设为直接拼接)
+const stringToSign = xApiKey + date + JSON.stringify(requestBody) + apiPassword;
+
+// 2. 计算 HMAC-SHA256 签名
+const signature = crypto
+  .createHmac('sha256', apiPassword)
+  .update(stringToSign)
+  .digest('hex');
+
+// 3. 组装请求头
+const headers = {
+  'Content-Type': 'application/json',
+  'Date': date,
+  'X-API-KEY': xApiKey,
+  'Authorization': signature
+};
+
+// 4. 发送请求
+axios.post(url, requestBody, { headers })
+  .then(response => {
+    console.log('Response:', response.data);
+  })
+  .catch(error => {
+    if (error.response) {
+      console.error('Error:', error.response.status, error.response.data);
+    } else {
+      console.error('Error:', error.message);
+    }
+  });
+```
+
+---
+
+## 说明
+
+- **stringToSign** 的拼接顺序和方式需要根据 Clear Junction 官方文档确认,这里是常见做法。
+- **crypto.createHmac('sha256', apiPassword)** 用于生成 HMAC-SHA256 签名。
+- **Date** 头需为标准 HTTP 时间字符串(如 `Wed, 12 Jun 2024 09:00:00 GMT`)。
+- **Authorization** 头为最终的签名值。

+ 10 - 0
接口文档/clearjunctionrestapi 评估.md

@@ -0,0 +1,10 @@
+## 粗评:
+1、确认业务流程:3天;
+2、接口鉴权逻辑开发:2天;
+3、业务接口接入:5天;
+4、开发渠道接口给下游:4天;
+5、页面开发:5天;
+
+## 风险:
+1、KYC认证,需要我们自己去加风险评估,涉及审批流
+2、没有看到资金控制机制,有潜在的交易风险

+ 76 - 0
接口文档/会议记录.md

@@ -0,0 +1,76 @@
+
+
+### 1. API业务流转介绍
+简要描述API在业务中的流转流程,包括用户发起请求、认证、业务处理、资金交易、回调通知等主要环节。建议绘制业务流程图,帮助各方直观理解整体流程。
+
+### 2. 对接工作时间
+明确双方API对接的工作时间窗口,便于安排开发、联调和问题响应。例如:工作日9:00-18:00,节假日需提前沟通。
+
+### 3. 用户认证
+
+- **认证方式**:说明用户如何通过API进行身份认证(如OAuth2.0、API Key等)。
+- **合规性管理**:确认合规性评估由渠道方负责,还是需要我们这边提供专门的页面用于用户合规审核和管理。
+
+
+### 4. 资金交易(入账、出账)
+
+- **交易接口调用流程**:建议提供资金交易相关接口的详细调用流程图,包括请求、响应、异常处理等,便于开发集成。
+- **资金入账与出账的具体业务流程和注意事项**。
+
+
+### 5. 法币交易
+
+描述法币(如USD、CNY等)交易的业务流程、接口设计和注意事项,包括汇率处理、到账时间等。
+
+
+### 6. 通知回调机制
+
+- **回调时机**:明确通知回调的触发时机(如交易状态变更时)。
+- **回调时延**:例如:回调机制将在交易状态变更后5秒或10秒内推送通知。
+
+
+### 7. 交易限制
+
+- **单笔交易限额**:如单笔资金转账的最小和最大金额限制。举例:如平台最低转账金额为2000 USD,若用户尝试转账1000 USD,将被渠道拦截。
+- **交易时间限制**:如日常交易时间段,凌晨时段可能触发风控,进入人工审核。需明确具体的安全交易时间及风控策略。
+
+---
+
+### 8. 签名详细过程
+
+- **签名流程**:详细描述API请求签名的生成过程,包括所需参数、加密方式等。
+- **body排序规则**:明确body参数在签名前的排序规则(如按字典序排序),确保双方实现一致性。
+
+
+### API对接里程碑
+
+1. 用户创建成功  
+2. 出金成功  
+3. 入金成功  
+4. 承兑成功  
+
+**资金流转路径**:USD → BTC → EUR → BTC
+
+---
+
+DTO
+事务
+
+---
+
+
+### API对接时间安排(直客、机构)
+
+1. 业务沟通:4天(确认对接背景及需求)
+2. 用户创建成功:5天(业务流程理解:3天)
+3. 出金成功:5天(业务流程理解:3天)
+4. 入金成功:5天(业务流程理解:3天)
+5. 承兑成功:5天(业务流程理解:3天)
+
+---
+
+### 后续规划
+
+1. 订单幂等性支持  
+2. 机构管理界面及机构流水查询界面  
+3. 基础账户管理界面  

+ 16 - 0
接口文档/未命名.md

@@ -0,0 +1,16 @@
+我们现在不是接好了klickl还可以用吗?
+可以用的
+
+如何登陆?
+https://va.fusionpay.one
+
+
+账号密码是多少?
+账户:admin
+密码:bqHGgYWGE2apjTMnAvZh
+
+如何进键提供材料?
+让用户自己提供材料
+
+ep有一些我们自己公司成功开了账户,怎么在后台看这些账户的银行帐号?
+在后台有个开户管理,我们可以看到用户开了那些账户

+ 0 - 5
接口文档/欢迎.md

@@ -1,5 +0,0 @@
-这是你的新*仓库*。
-
-写点笔记,[[创建链接]],或者试一试[导入器](https://help.obsidian.md/Plugins/Importer)插件!
-
-当你准备好了,就将该笔记文件删除,使这个仓库为你所用。

+ 104 - 0
接口文档/运维手册.md

@@ -0,0 +1,104 @@
+## 服务器登陆账户密码
+==================================================================
+aaPanel Internet Address: https://3.1.203.22:30745/c7f96c0b
+aaPanel Internal Address: https://172.31.21.167:30745/c7f96c0b
+username: 9mgygf2h
+password: 13dc16fc
+
+# 宝塔
+地址: https://www.aapanel.com/
+
+## 安装国际版
+```bash
+sudo su
+URL=https://www.aapanel.com/script/install_7.0_en.sh && if [ -f /usr/bin/curl ];then curl -ksSO "$URL" ;else wget --no-check-certificate -O install_7.0_en.sh "$URL";fi;bash install_7.0_en.sh aapanel
+```
+
+
+# 数据库
+所有功能基于 root 账户下生成
+## docker -mysql9.0基础信息
+| key  |  value |
+|---|---|
+|name|mysql_PfsC|
+|app name|MySQL|
+|app type|Database|
+|Database root password|F8D4cXMPt3jGd7LL|
+|mysql port|13306|
+|app directory|/www/dk_project/dk_app/mysql/mysql_PfsC|
+|Cpu core limit|No limit|
+|memory limit|No limit|
+|installed log|/tmp/mysql_PfsC.log|
+|Allow external access|yes|    
+
+## 新建数据库
+在 https://3.1.203.22:30745/database/mysql 中新建;
+
+![[Pasted image 20250514163944.png]]
+
+步骤如下:
+
+1. **创建用户 `'va'@'%'`(如果还没有)**
+
+sql
+
+`CREATE USER 'va'@'%' IDENTIFIED BY 'your_password';`
+
+> 请将 `your_password` 替换为你想设置的密码。
+
+2. **授权**
+
+sql
+
+`GRANT ALL PRIVILEGES ON va.* TO 'va'@'%'; FLUSH PRIVILEGES;`
+
+## 备份
+在 https://3.1.203.22:30745/crontab/task 页面配置了定时备份脚本,每日凌晨03:01执行, 以下是脚本执行代码:
+```
+#!/bin/bash
+
+# 配置参数
+CONTAINER_ID="fe8fde9961b2"
+DB_USER="root"
+DB_PASS="F8D4cXMPt3jGd7LL"
+DB_NAMES=("va_sandbox" "va")  # 这里写上你要备份的所有数据库名
+BACKUP_DIR="/www/dk_project/dk_app/mysql/mysql_PfsC/data/backup"
+
+# 获取当前时间
+NOW=$(date +"%Y-%m-%d_%H-%M-%S")
+
+for DB_NAME in "${DB_NAMES[@]}"
+do
+    FILENAME="${DB_NAME}_${NOW}_mysql_data.sql.gz"
+    BACKUP_PATH="${BACKUP_DIR}/${FILENAME}"
+
+    # 备份命令
+    docker exec ${CONTAINER_ID} mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} | gzip > "${BACKUP_PATH}"
+done
+```
+
+导出指定的数据库:
+```bash
+sudo su
+docker exec fe8fde9961b2 mysqldump -uva_sandbox -pCSkCada2h87YYZRt va_sandbox | gzip > va_sandbox_2025-05-14.sql.gz
+```
+
+## 恢复
+
+恢复 va_sandbox 数据库:
+```bash
+sudo su
+gunzip -c /www/dk_project/dk_app/mysql/mysql_PfsC/data/va_sandbox_2025-05-14_09-30-03_mysql_data.sql.gz | docker exec -i fe8fde9961b2 mysql -uva_sandbox -pCSkCada2h87YYZRt va_sandbox
+```
+
+恢复 va 数据库:
+```bash
+sudo su
+gunzip -c /www/dk_project/dk_app/mysql/mysql_PfsC/data/va_2025-05-14_09-30-02_mysql_data.sql.gz | docker exec -i fe8fde9961b2 mysql -uva -pFHZ36dP527GacTty va
+```
+
+基础知识:
+https://chatnio.net/share/ee529f7307dd407ceaefdd3228113f43
+
+
+docker exec -it fe8fde9961b2 /bin/bash