瀏覽代碼

2025-05-18 22:31:29

max 2 月之前
父節點
當前提交
1461ad38da

+ 22 - 88
接口文档/.obsidian/workspace.json

@@ -4,95 +4,24 @@
     "type": "split",
     "children": [
       {
-        "id": "0706f5b81fae4567",
+        "id": "602d67e02d86b508",
         "type": "tabs",
         "children": [
           {
-            "id": "0770ed61803bee03",
-            "type": "leaf",
-            "state": {
-              "type": "markdown",
-              "state": {
-                "file": "欢迎.md",
-                "mode": "source",
-                "source": true
-              },
-              "icon": "lucide-file",
-              "title": "欢迎"
-            }
-          },
-          {
-            "id": "b3f47c8c8de37e9c",
-            "type": "leaf",
-            "state": {
-              "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",
+            "id": "33d20799515c3264",
             "type": "leaf",
             "state": {
               "type": "markdown",
               "state": {
                 "file": "基础信息/服务器相关/运维手册.md",
-                "mode": "source",
+                "mode": "preview",
                 "source": true
               },
               "icon": "lucide-file",
               "title": "运维手册"
             }
           }
-        ],
-        "currentTab": 5
+        ]
       }
     ],
     "direction": "vertical"
@@ -239,29 +168,34 @@
       "command-palette:打开命令面板": false
     }
   },
-  "active": "ed58cc37b8427168",
+  "active": "33d20799515c3264",
   "lastOpenFiles": [
-    "基础信息/服务器相关/attachments/Pasted image 20250514163944.png",
+    "基础信息/服务器相关/运维日志/20250517.md",
+    "基础信息/服务器相关/运维日志/attachments/Pasted image 20250517133251.png",
     "基础信息/服务器相关/运维手册.md",
-    "基础信息/服务器相关/attachments/Pasted image 20250515091347.png",
-    "基础信息/服务器相关/attachments",
-    "基础信息/服务器相关",
-    "基础信息",
     "工作日常/2025-05-11.md",
-    "工作日常",
+    "基础信息/服务器相关/运维日志/z_money_2025-05-15_09-30-03_mysql_data.sql.gz",
+    "基础信息/服务器相关/运维日志/va_sandbox_2025-05-15_09-30-03_mysql_data.sql.gz",
+    "基础信息/服务器相关/运维日志/va_harry_2025-05-15_09-30-03_mysql_data.sql.gz",
+    "基础信息/服务器相关/运维日志/va_2025-05-15_09-30-02_mysql_data.sql.gz",
+    "基础信息/服务器相关/运维日志/sql_zentao_fusio_2025-05-15_09-30-02_mysql_data.sql.gz",
+    "基础信息/服务器相关/运维日志/fusion_2025-05-15_09-30-01_mysql_data.sql.gz",
+    "基础信息/服务器相关/运维日志/va_test_2025-05-15_09-30-02_mysql_data.sql.gz",
+    "基础信息/服务器相关/运维日志/attachments/va_test_2025-05-15_09-30-02_mysql_data.sql 1.gz",
+    "基础信息/服务器相关/运维日志/attachments/va_test_2025-05-15_09-30-02_mysql_data.sql.gz",
+    "基础信息/服务器相关/attachments/Pasted image 20250515091347.png",
+    "基础信息/服务器相关/运维日志/attachments/Pasted image 20250517105153.png",
+    "基础信息/服务器相关/运维日志/attachments",
+    "2025-05-15.md",
+    "渠道对接/clearjunction/接口调用.md",
+    "基础信息/服务器相关/attachments/Pasted image 20250514163944.png",
     "渠道对接/sunpay/现状.md",
-    "渠道对接/sunpay",
     "渠道对接/easypay/开放接口文档.md",
-    "渠道对接/easypay",
     "渠道对接/clearjunction/会议纪要/会议记录2025-05-11.md",
     "渠道对接/clearjunction/Pasted image 20250511184143.png",
-    "渠道对接/clearjunction/会议纪要",
     "渠道对接/clearjunction/clearjunctionrestapi 接入建议.md",
-    "渠道对接/clearjunction",
-    "渠道对接",
     "渠道对接/clearjunction/clearjunctionrestapi 评估.md",
     "欢迎.md",
-    "未命名 1",
     "开发 接口文档.md"
   ]
 }

+ 28 - 0
接口文档/2025-05-15.md

@@ -0,0 +1,28 @@
+|字段|值|
+|---|---|
+|id|1db8cf31cf974a76a39d84345ebbfad6|
+|order_no|20250424183507634293|
+|request_id|b826b4ef7515afa825182bb6bcf5b30e|
+|reference|(空)|
+|from_account_id|7aa548a724f75bb4a6eacd317e02241e|
+|to_account_id|9fe465a43ced52e294dc5b0a92870a67|
+|currency|USD|
+|amount|9904|
+|status|SUCCESS|
+|purpose|(空)|
+|completed_time|2025-04-24 18:35:08|
+|create_time|2025-04-24 18:35:08|
+|update_time|2025-04-24 18:35:08|
+|comment|(空)|
+|fee|0|
+|reason|(空)|
+
+|出金公司|入金公司|交易类型| 交易金额|交易时间
+| --- |---|---|---|--- |
+|LUMINA SOLUTIONS HOLDINGS LIMITED|HK DA BANG YUE INTERNATIONAL TRADE LIMITED|转账|9904|2025-04-24 18:35:08|
+
+
+|​**​出金公司​**​|​**​入金公司​**​|​**​交易类型​**​|​**​交易金额 (USD)​**​|​**​交易时间​**​|
+|---|---|---|---|---|
+|LUMINA SOLUTIONS HOLDINGS LIMITED|HK DA BANG YUE INTERNATIONAL TRADE LIMITED|转账|9,904|2025-04-24 18:35:08|
+

+ 10 - 3
接口文档/基础信息/服务器相关/运维手册.md

@@ -47,10 +47,11 @@ sql
 > 请将 `your_password` 替换为你想设置的密码。
 
 2. **授权**
+```sql
+GRANT ALL PRIVILEGES ON va.* TO 'va'@'%';
 
-sql
-
-`GRANT ALL PRIVILEGES ON va.* TO 'va'@'%'; FLUSH PRIVILEGES;`
+FLUSH PRIVILEGES;
+```
 
 ## 备份
 在 https://3.1.203.22:30745/crontab/task 页面配置了定时备份脚本,每日凌晨03:01执行, 以下是脚本执行代码:
@@ -91,6 +92,12 @@ 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_test_2025-05-15_09-30-02_mysql_data.sql
+
+
+
+gunzip -c /www/dk_project/dk_app/mysql/mysql_PfsC/data/va_test_2025-05-15_09-30-02_mysql_data.sql.gz | docker exec -i fe8fde9961b2 mysql -uva_test -pPGsCkBBc7XBxtrhW va_test
+
 恢复 va 数据库:
 ```bash
 sudo su

+ 371 - 0
接口文档/基础信息/服务器相关/运维日志/20250517.md

@@ -0,0 +1,371 @@
+添加 va_test 数据库
+![[Pasted image 20250517105153.png]]
+
+### 配置数据库权限
+
+切换 root 账户权限
+```bsh
+sudo su
+```
+
+进入mysql 数据库容器中
+```
+docker exec -it fe8fde9961b2 /bin/bash
+```
+
+使用root账户登陆mysql
+```bash
+mysql -u root -p
+# 输入密码
+```
+
+创建 va_test 数据库访问账户
+```sql
+CREATE USER 'va_test'@'%' IDENTIFIED BY 'PGsCkBBc7XBxtrhW';
+```
+
+分配数据库操作权限
+```sql
+GRANT ALL PRIVILEGES ON va_test.* TO 'va_test'@'%';
+
+FLUSH PRIVILEGES; 刷新数据库权限表
+```
+
+## 初始化数据库
+
+打开 /www/dk_project/dk_app/mysql/mysql_PfsC/data/ 路径;
+
+上传初始化文件
+![[va_test_2025-05-15_09-30-02_mysql_data.sql.gz]]
+
+切换 root 账户权限
+```bsh
+sudo su
+```
+
+执行初始化命令
+```bash
+gunzip -c /www/dk_project/dk_app/mysql/mysql_PfsC/data/va_test_2025-05-15_09-30-02_mysql_data.sql.gz | docker exec -i fe8fde9961b2 mysql -uva_test -pPGsCkBBc7XBxtrhW va_test
+```
+
+## 部署
+
+- 前端 /www/wwwroot/va_admin_frontend_diy
+- 后端 /www/wwwroot/va_admin_server_diy
+
+部署角色: root
+
+创建node执行服务
+![[Pasted image 20250517133251.png]]
+
+编写nginx
+```nginx
+server
+{
+    listen 80;
+		listen 443 ssl http2;
+    server_name sand-va.fusionpay.one;
+    index index.html index.htm default.htm default.html;
+    root /www/wwwroot/va_admin_frontend_diy/dist/;
+    location / {
+      index  index.html index.htm;
+	    try_files $uri $uri/ @router;
+    }
+    location @router {
+        rewrite ^.*$ /index.html last;
+    }
+    
+    #SSL-START SSL related configuration
+    #error_page 404/404.html;
+    ssl_certificate    /www/server/panel/vhost/cert/va_admin_server_test/fullchain.pem;
+    ssl_certificate_key    /www/server/panel/vhost/cert/va_admin_server_test/privkey.pem;
+    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
+    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
+    ssl_prefer_server_ciphers on;
+    ssl_session_cache shared:SSL:10m;
+    ssl_session_timeout 10m;
+    add_header Strict-Transport-Security "max-age=31536000";
+    error_page 497  https://$host$request_uri;
+		#SSL-END
+    
+    #ERROR-PAGE-START  Error page related configuration
+    #error_page 404 /404.html;
+    #error_page 502 /502.html;
+    #ERROR-PAGE-END
+    
+    
+    #REWRITE-START Pseudo-static related configuration
+    include /www/server/panel/vhost/rewrite/node_va_admin_server_test.conf;
+    #REWRITE-END
+    
+    #Files or directories forbidden to access
+    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md|package.json|package-lock.json|\.env|node_modules) {
+        return 404;
+    }
+    
+    #One-click application for SSL certificate verification directory related settings
+    location /.well-known/ {
+        root  /www/wwwroot/va_admin_server_diy/;
+    }
+
+    # HTTP reverse proxy related settings begin >>>
+    location ~ /purge(/.*) {
+        proxy_cache_purge cache_one $host$request_uri$is_args$args;
+    }
+
+    location /api/ {
+        proxy_pass http://127.0.0.1:8009/;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header REMOTE-HOST $remote_addr;
+        add_header X-Cache $upstream_cache_status;
+
+        proxy_connect_timeout 30s;
+        proxy_read_timeout 86400s;
+        proxy_send_timeout 30s;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+    location /openApi/ {
+        proxy_pass http://127.0.0.1:8009/api/;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header REMOTE-HOST $remote_addr;
+        add_header X-Cache $upstream_cache_status;
+
+        proxy_connect_timeout 30s;
+        proxy_read_timeout 86400s;
+        proxy_send_timeout 30s;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+
+    location /open-api/ {
+        proxy_pass http://127.0.0.1:8009/api/open/;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header REMOTE-HOST $remote_addr;
+        add_header X-Cache $upstream_cache_status;
+
+        proxy_connect_timeout 30s;
+        proxy_read_timeout 86400s;
+        proxy_send_timeout 30s;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+    location /api-doc/ {
+        proxy_pass http://127.0.0.1:8009/swagger-ui/index.html;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header REMOTE-HOST $remote_addr;
+        add_header X-Cache $upstream_cache_status;
+
+        proxy_connect_timeout 30s;
+        proxy_read_timeout 86400s;
+        proxy_send_timeout 30s;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+    # End of HTTP reverse proxy related settings <<<
+    
+    access_log  /www/wwwlogs/va_admin_server_test.log;
+    error_log  /www/wwwlogs/va_admin_server_test.error.log;
+}
+```
+
+
+
+## 补充
+### 自动生成 zip
+
+#### shell 脚本
+```bash
+#!/bin/bash
+
+# 执行 yarn build
+echo "正在执行 yarn build..."
+yarn build
+
+# 检查 dist 目录是否存在
+if [ ! -d "dist" ]; then
+  echo "错误:执行 yarn build 后未找到 dist 目录"
+  exit 1
+fi
+
+# 获取当前时间并格式化为 YY_MM_DD_HH_MM_SS(增加秒)
+current_time=$(date +"%y_%m_%d_%H_%M_%S")
+
+# 定义压缩文件名
+zip_filename="va_admin_server_diy_${current_time}.zip"
+
+# 压缩 dist 文件夹
+echo "正在压缩 dist 文件夹为 ${zip_filename}..."
+zip -r "${zip_filename}" dist
+
+# 检查压缩是否成功
+if [ $? -eq 0 ]; then
+  echo "压缩成功!文件已保存为 ${zip_filename}"
+else
+  echo "压缩失败"
+  exit 1
+fi
+
+# 可选:删除 dist 文件夹(如果需要)
+# read -p "是否删除 dist 文件夹?(y/n): " choice
+# if [ "$choice" = "y" ]; then
+#   rm -rf dist
+#   echo "已删除 dist 文件夹"
+# fi
+```
+
+#### **`bat`** 脚本
+```batch
+@echo off
+setlocal enabledelayedexpansion
+
+:: 执行 yarn build
+echo 正在执行 yarn build...
+call yarn build
+
+:: 检查 dist 目录是否存在
+if not exist dist (
+    echo 错误:执行 yarn build 后未找到 dist 目录
+    exit /b 1
+)
+
+:: 获取当前时间并格式化为 YY_MM_DD_HH_MM_SS
+for /f "tokens=1-6 delims=/: " %%a in ('time /t ^| find ":"') do (
+    set hour=%%a
+    set minute=%%b
+)
+for /f "tokens=1-3 delims=/" %%a in ('date /t') do (
+    set day=%%a
+    set month=%%b
+    set year=%%c
+)
+:: 处理 12 小时制时间(如果 time /t 返回 12 小时制)
+if "!hour!" lss "10" (
+    if "!hour!"==" " (
+        set hour=00
+    ) else (
+        set hour=!hour:~1,1!
+    )
+)
+if "!hour!" lss "12" (
+    if "!hour!"=="0" (
+        set hour=12
+    )
+)
+:: 转换为 24 小时制(如果 time /t 返回 12 小时制)
+if "!hour!" gtr "12" (
+    set /a hour=!hour!-12
+)
+:: 补零
+if !hour! lss 10 set hour=0!hour!
+if !minute! lss 10 set minute=0!minute!
+if !day! lss 10 set day=0!day!
+if !month! lss 10 set month=0!month!
+
+:: 获取完整年份(YYYY)
+for /f "tokens=2 delims==" %%a in ('"wmic os get LocalDateTime /value | findstr LocalDateTime"') do set datetime=%%a
+set year=%datetime:~0,4%
+
+:: 格式化时间(YY_MM_DD_HH_MM_SS)
+set current_time=%year:~-2%_%month%_%day%_%hour%_%minute%_%time:~6,2%
+
+:: 如果 time /t 返回 12 小时制,可能需要调整秒数
+:: 这里直接使用 WMIC 获取更准确的时间
+for /f "tokens=1-3 delims=:.," %%a in ('"wmic os get LocalDateTime /value | findstr LocalDateTime"') do set datetime=%%a
+set current_time=%datetime:~2,2%_%datetime:~4,2%_%datetime:~6,2%_%datetime:~8,2%_%datetime:~10,2%_%datetime:~12,2%
+
+:: 修正格式(WMIC 返回 YYYYMMDDHHMMSS.ssssss±UUU)
+set current_time=%current_time:~2,2%_%current_time:~4,2%_%current_time:~6,2%_%current_time:~8,2%_%current_time:~10,2%_%current_time:~12,2%
+
+:: 去掉可能的空格或特殊字符
+set current_time=%current_time::=-%
+set current_time=%current_time:.=-%
+set current_time=%current_time: =%
+
+:: 重新获取时间(更可靠的方式)
+for /f "tokens=1-6 delims=/: " %%a in ('"wmic os get LocalDateTime /value | findstr LocalDateTime"') do (
+    set year=%%a
+    set month=%%b
+    set day=%%c
+    set hour=%%d
+    set minute=%%e
+    set second=%%f
+)
+set current_time=%year:~-2%_%month%_%day%_%hour%_%minute%_%second%
+
+:: 定义压缩文件名
+set zip_filename=va_admin_server_diy_%current_time%.zip
+
+:: 检查 7-Zip 是否安装(如果使用 7-Zip)
+:: 如果没有 7-Zip,可以改用 PowerShell 的 Compress-Archive
+:: 这里假设使用 7-Zip
+where 7z >nul 2>&1
+if %errorlevel% equ 0 (
+    echo 正在压缩 dist 文件夹为 %zip_filename%...
+    7z a -tzip "%zip_filename%" dist\* >nul
+) else (
+    echo 7-Zip 未安装,尝试使用 PowerShell 压缩...
+    powershell -Command "Compress-Archive -Path dist\* -DestinationPath '%zip_filename%' -Force"
+)
+
+:: 检查压缩是否成功
+if exist "%zip_filename%" (
+    echo 压缩成功!文件已保存为 %zip_filename%
+) else (
+    echo 压缩失败
+    exit /b 1
+)
+
+:: 可选:删除 dist 文件夹(如果需要)
+:: set /p choice=是否删除 dist 文件夹?(y/n): 
+:: if /i "!choice!"=="y" (
+::     rmdir /s /q dist
+::     echo 已删除 dist 文件夹
+:: )
+
+endlocal
+pause
+```
+
+
+#### **PowerShell**脚本
+```powershell
+# build_and_compress.ps1
+yarn build
+
+if (-Not (Test-Path "dist")) {
+    Write-Host "错误:执行 yarn build 后未找到 dist 目录"
+    exit 1
+}
+
+$current_time = Get-Date -Format "yy_MM_dd_HH_mm_ss"
+$zip_filename = "va_admin_server_diy_$current_time.zip"
+
+Compress-Archive -Path "dist\*" -DestinationPath $zip_filename -Force
+
+if (Test-Path $zip_filename) {
+    Write-Host "压缩成功!文件已保存为 $zip_filename"
+} else {
+    Write-Host "压缩失败"
+    exit 1
+}
+
+# 可选:删除 dist 文件夹
+# $choice = Read-Host "是否删除 dist 文件夹?(y/n)"
+# if ($choice -eq 'y') {
+#     Remove-Item -Recurse -Force "dist"
+#     Write-Host "已删除 dist 文件夹"
+# }
+```

二進制
接口文档/基础信息/服务器相关/运维日志/attachments/Pasted image 20250517105153.png


二進制
接口文档/基础信息/服务器相关/运维日志/attachments/Pasted image 20250517133251.png


二進制
接口文档/基础信息/服务器相关/运维日志/attachments/va_test_2025-05-15_09-30-02_mysql_data.sql.gz


+ 23 - 0
接口文档/渠道对接/clearjunction/接口调用.md

@@ -0,0 +1,23 @@
+### 创建 virtual-accounts 账户
+```node
+var request = require('request');
+request({
+  method: 'POST',
+  url: '
+
+https://private-anon-d1cf5736cd-clearjunctionrestapi.apiary-mock.com/v7/gate/allocate/v3/create/iban
+
+',
+  headers: {
+    'Content-Type': 'application/json',
+    'Date': '2017-06-22T11:40:51.620Z',
+    'X-API-KEY': '730ee406-817e-11e7-bb31-be2e44b06b34',
+    'Authorization': '34695d044dc52d340ee9d04b12367a12f2eb5650890cac5d6098765dd289dfe4fd9b05cb2099d11fb85fe5e0c0804a9a5880b45a4d57b2b0f90280b83ed29038'
+  },
+  body: "{  \"clientOrder\": \"999899-0005\",  \"postbackUrl\": \"https://www.www.geotriangle.com/postbacks\",  \"walletUuid\": \"348e11ab-dbfb-4ae8-99e7-349b00868f6f\",  \"ibansGroup\": \"DEFAULT\",  \"ibanCountry\": \"GB\",  \"registrant\": {    \"clientCustomerId\": \"2983ght938\",    \"individual\": {      \"phone\": \"34712345678\",      \"email\": \"peterson.julie@example.com\",      \"birthDate\": \"1999-09-29\",      \"birthPlace\": \"'Madrid, Spain'\",      \"address\": {        \"country\": \"IT\",        \"zip\": \"123455\",        \"city\": \"Rome\",        \"street\": \"12 Tourin\"      },      \"document\": {        \"type\": \"passport\",        \"number\": \"AB1000222\",        \"issuedCountryCode\": \"IT\",        \"issuedBy\": \"Ministry of Interior\",        \"issuedDate\": \"2016-12-21\",        \"expirationDate\": \"2026-12-20\"      },      \"lastName\": \"Peterson\",      \"firstName\": \"Julie\",      \"middleName\": \"Maria\",      \"birthCountry\": \"IT\",      \"taxNumber\": \"7728168971\",      \"taxCountry\": \"IT\"    }  },  \"customInfo\": {    \"MyExampleParam1\": \"exampleValue1\",    \"MyExampleObject1\": {      \"MyExampleParam2\": \"exampleValue2\",      \"MyExampleParam3\": \"exampleValue3\"    }  }}"
+}, function (error, response, body) {
+  console.log('Status:', response.statusCode);
+  console.log('Headers:', JSON.stringify(response.headers));
+  console.log('Response:', body);
+});
+```