小新支付系统 使用Java开发,RPC服务使用Dubbo,可分布式部署。前期业务量小或对系统可用性要求不是很高,可单点部署,后期随着业务量增长,再通过横向扩展进行分布式部署。

云服务器

推荐购买阿里云服务器(或腾讯云、华为云),建议不低于以下配置:

操作系统 CPU 内存 带宽 硬盘 开放端口
Linux CentOS 7.X 4核 8G 5M(或弹性) 40G 80、443、22

安装软件

系统服务端使用Java开发,部署时需要提前安装好以下软件:

软件 版本 说明
JDK 1.8 Java运行依赖环境
ActiveMQ 5.15.8 消息中间件
Redis 3.2.8 缓存使用
Zookeeper 3.4.6 服务注册中心
MySQL 5.7.X 数据库,推荐使用阿里云RDS数据库
Nginx 1.14.1 负载均衡、反向代理

以上软件除jdk和mysql外,其他软件可安装更高级版本。

初始化数据

连接Mysql,创建数据库:xxpaydb,创建用户:xxpay,并为该用户赋权限。
执行sql目录下的inti.sql、code.sql、code_ysf.sql文件,完成表结构创建及初始化数据。

配置文件

编译前需配置文件profiles/commons-{env}-filter.properties {env}说明:

dev :开发环境, 一般用于本地启动项目时的配置信息;
test:测试环境, 一般用于测试环境中的配置信息;
prod:生产环境, 一般用于生产正式环境下的配置信息;

env配置在 pom.xml文件下 profiles -> profile 节点, 默认设置的dev为默认节点

在使用maven编译时,通过命令 $ mvn package -Ptest 进行切换。

配置文件内容全量如下,按照注释内容修改为自己真实环境的配置即可。

### dubbo服务的zookeeper地址
zookeeper.url=zookeeper://127.0.0.1:2181

### activemq地址
activemq.url=failover:(tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=0)

### 数据库连接配置 主 / 从 (密码已加密, 加密函数详见 DBPasswordUtil.class)
master.datasource.url=jdbc:mysql://192.168.0.118:3306/xxpay4newdb?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
master.datasource.username=j1090pKt56TbS/OCkEzH4I2wA==
master.datasource.password=j1090pKt56TbS/OCkEzH4I2wA==

slave.datasource.url=jdbc:mysql://192.168.0.118:3306/xxpay4newdb?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
slave.datasource.username=j1090pKt56TbS/OCkEzH4I2wA==
slave.datasource.password=j1090pKt56TbS/OCkEzH4I2wA==

### redis服务配置
redis.ip=127.0.0.1
redis.port=6379
redis.pass=xxpayvip

### 运营系统地址
mgr.site.url=http://mgr.f.xxpay.org
### 代理商系统地址
agent.site.url=http://agent.f.xxpay.org
### 商户系统地址
mch.site.url=http://mch.f.xxpay.org
### 服务商系统地址
isv.site.url=http://isv.f.xxpay.org
### 会员系统地址
mbr.site.url=http://mbr.f.xxpay.org
### 支付网关地址
pay.site.url=http://pay.f.xxpay.org
### 对账系统地址
reconciliation.site.url=http://task.f.xxpay.org
### 多个项目统一获取微信openId地址, 默认为当前服务商系统的get-weixin-code.html, 请在微信侧配置该域名权限即可
wx.auth2code.url=@isv.site.url@/get-weixin-code.html

## 上传文件主文件夹
upload.root.dir=/home/xxpay/upload

### 账单跟路径
bill.root.path=/home/xxpay/bill/

### 接口demo 文件路径
download.demo.path=/home/xxpay/demo.zip

### 服务商证书路径(不可匿名访问)
upload.isv.cert.root.dir=@upload.root.dir@/isv/cert

## 商户上传文件路径(静态资源, 可匿名访问)
upload.mch.static.dir=@upload.root.dir@/mch/static

## 商户静态资源图片预览URL(对应上述地址路径)
upload.mch.static.view.url=@mch.site.url@/imgs/

## app更新包的存储目录
upload.app.update.dir=@upload.root.dir@/update

## 小程序体验版二维码存储路径
mini.experience.qrcode.dir=@upload.root.dir@/miniExperience/qrcode/

### 支付补单任务开关
task.reissue.pay.switch=true
### 支付补单任务IP
task.reissue.pay.ip=127.0.0.1
### 转账补单任务开关
task.reissue.trans.switch=true
### 转账补单任务IP
task.reissue.trans.ip=127.0.0.1
### 代付补单任务开关
task.reissue.agentpay.switch=true
### 代付补单任务IP
task.reissue.agentpay.ip=127.0.0.1

## logger日志文件root path
logger.root.path=./logs

编译部署

项目使用maven编译构建,可通过本地开发工具(建议Idea)或Jenkins完成项目的编译打包,打包后会在target目录下生成一个.tar.gz结尾的文件(如 xxpay-isv-bin.tar.gz),将文件上传至服务器,然后执行bin目录下的启动脚本即可。以下为最佳实践,仅供参考。

在服务器创建用户xxpay,然后在/home/xxpay下创建service目录。将编译后的:
xxpay-manage-bin.tar.gz
xxpay-isv-bin.tar.gz
xxpay-agent-bin.tar.gz
xxpay-merchant-bin.tar.gz
xxpay-member-bin.tar.gz
xxpay-pay-bin.tar.gz
xxpay-task-bin.tar.gz

上传至service目录下,解压后分别执行项目下的启动脚本,如xxpay-manage的启动命令:
cd /home/xxpay/xxpay-manage/bin
sh ./app.sh start
其他模块参考启动即可,启动后项目可通过IP+端口形式访问(云服务器需开通端口号才可以访问)。

域名配置

项目需要域名访问,需要将域名做解析到服务器公网IP,一般需解析如下域名(如域名为: xxpay.vip):
mgr.xxpay.vip,isv.xxpay.vip,agent.xxpay.vip,mch.xxpay.vip,mbr.xxpay.vip,pay.xxpay.vip,task.xxpay.vip

在Nginx中做好域名绑定,如果https访问,可申请域名ssl证书,在nginx中配置即可。

以pay项目为例,下面是nginx的配置,包括ssl配置,仅供参考

upstream xxpay_pay {
    server 127.0.0.1:8201 weight=1 max_fails=2 fail_timeout=30s;
}

server {
    listen       80;
    server_name  pay.xxpay.vip;
    location / {
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
        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_pass http://xxpay_pay;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

server {
    listen 443 ssl http2;
    server_name  pay.sifangzhifu.com;
    ssl_certificate      /www/server/panel/vhost/ssl/xxpay.vip/pay.xxpay.vip.pem;    #指定服务器证书路径
    ssl_certificate_key  /www/server/panel/vhost/ssl/xxpay.vip/pay.xxpay.vip.key;    #指定私钥证书路径
    ssl_session_timeout  30m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;     #指定SSL服务器端支持的协议版本
    ssl_ciphers  HIGH:!aNULL:!MD5;     #指定加密算法
    ssl_prefer_server_ciphers   on;    #在使用SSLv3和TLS协议时指定服务器的加密算法要优先于客户端的加密算法

    location / {
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
        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 Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_pass http://xxpay_pay;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
文档更新时间: 2022-02-25 11:45   作者:大森林