简介
一款WHMCS的加密货币支付解决方案,实现多种加密货币收款至自己的加密货币钱包内,
不依赖网关服务商, 也无需像任何三方支付网关手续费
没有中间商赚差价
没有中间商赚差价
没有中间商赚差价
没有中间商赚差价
没有中间商赚差价
结构
- 监控端 (三方)
- 插件端 (原创)
支持的区块链
- TRON 波场
- ETH 以太坊
- 以及任意基于ETH以太网络的变体,例如 币安智能链(BSC)、Polygon等
支持的原生币 (就是你转账交易需要扣矿工/能量费的币种)
- TRX
- ETH
- BNB
- MATIC
支持的代币
- USDT-TRC20
- USDT-ERC20
- USDT-BEP20
- USDC-TRC20
- USDC-ERC20
- 任意扩展
- 所有ETH网络下的代币, 见 https://etherscan.io/tokens 都支持
演示截图预览
截图预览
插件配置
订单页面
支付页面
支付成功
这里成功的时候 流水号就是区块哈希
监控端部署
准备工作
加密货币查询接口
申请API是为了提交交易查询的频率限制
需要用到的加密货币接口API,请先申请保存好
区块链 | 申请地址 |
---|---|
TRON 波场 | https://www.trongrid.io/dashboard/keys |
ETH 以太 | https://etherscan.io/myapikey |
BSC 币安智能链 | https://bscscan.com/myapikey |
Polyon | https://polygonscan.com/myapikey |
Telegram 机器人通知
- TG的账号ID,如不知道ID,可给
https://t.me/EShopFakaBot
发送/me
获取用户ID 格式为纯数字1111111
- TG的机器人Token 从https://t.me/BotFather 创建机器人时,会给你 BotToken, 格式为
数字:字符串
安装监控端
本项目依赖于TOKENPAY, 先安装这个
# 加密货币监控端部署
APPDIR=/www/wwwroot/tokenpay
[[ ! -d "${APPDIR}" ]] && mkdir -p ${APPDIR}
cd ${APPDIR}
wget -c -4 "http://doc.whmcscn.com/server/index.php?s=/api/attachment/visitFile&sign=61fbc4dbde6f4e1afa042ce54c9434ce" -O release-linux-x64.zip
unzip -d ./ release-linux-x64.zip
chmod +x TokenPay
cp -Rp appsettings.Example.json appsettings.json
cp -Rp EVMChains.Example.json EVMChains.json
编辑 appsettings.json 配置文件
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DB": "Data Source=|DataDirectory|TokenPay.db; Pooling=true;Min Pool Size=1"
},
"TRON-PRO-API-KEY": "xxxxxx-xxxx-xxxx-xxxxxxxxxxxx", // 避免接口请求频繁被限制,此处申请 https://www.trongrid.io/dashboard/keys
"BaseCurrency": "CNY", //默认货币,支持 CNY、USD、EUR、GBP、AUD、HKD、TWD、SGD
"Rate": { //汇率 设置0将使用自动汇率
"BNB": 0,
"USDT": 0,
"TRX": 0,
"ETH": 0,
"USDC": 0,
"MATIC": 0,
},
"ExpireTime": 1800, //单位秒
"UseDynamicAddress": false, //是否使用动态地址,设为false时,与EPUSDT表现类似;设为true时,为每个下单用户分配单独的收款地址
"Address": { // UseDynamicAddress设为false时在此配置TRON收款地址,EVM可以替代所有ETH系列的收款地址,支持单独配置某条链的收款地址
"TRON": [ "Txxxx1" ], // 这里写你的钱包地址, TRON网络的 就是你接收用户付款的地址
"EVM": [ "0x111" ] // 这里是ETH地址 一般0x开头
},
"OnlyConfirmed": true, //默认仅查询已确认的数据,如果想要回调更快,可以设置为false
"NotifyTimeOut": 3, //异步通知超时时间
"ApiToken": "666666", //异步通知密钥,请务必修改此密钥为随机字符串,脸滚键盘即可
"WebSiteUrl": "http://token-pay.xxxxx.com", //配置服务器外网域名
"Telegram": {
"AdminUserId": 12345678, // 你的账号ID,如不知道ID,可给https://t.me/EShopFakaBot 发送 /me 获取用户ID
"BotToken": "1234567890:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" //从https://t.me/BotFather 创建机器人时,会给你BotToken
}
}
特别注意
- UseDynamicAddress 不要改,如果开启会自动生成钱包地址对应的密匙会存储在SQLITE数据库里, 并不安全
如果别人下载了你的SQLite数据库读取到密匙 就可以导入钱包发起转账了…… - BaseCurrency基础货币 配置为你WHMCS的默认货币,如果是USD这里也设置为USD
- “ApiToken”: “666666”, // 这个密匙 需要记住, WHMCS配置需要
- “WebSiteUrl”: “http://localhost“, // 这里配置为内网即可,不建议对外公开
- 资料来源 https://github.com/LightCountry/TokenPay/blob/master/Wiki/appsettings.md
编辑 EVMChains.json 配置文件
{
"EVMChains": [
{
"Enable": false,
"ChainName": "以太坊",
"ChainNameEN": "ETH",
"BaseCoin": "ETH",
"Decimals": 18,
"ScanHost": "https://etherscan.io",
"ApiHost": "https://api.etherscan.io",
"ApiKey": "", // 此处申请 https://etherscan.io/myapikey
"ERC20Name": "ERC20",
"ERC20": [
{
"Name": "USDT",
"ContractAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
},
{
"Name": "USDC",
"ContractAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}
]
},
{
"Enable": false,
"ChainName": "币安智能链",
"ChainNameEN": "BSC",
"BaseCoin": "BNB",
"Decimals": 18,
"ScanHost": "https://www.bscscan.com",
"ApiHost": "https://api.bscscan.com",
"ApiKey": "", // 此处申请 https://bscscan.com/myapikey
"ERC20Name": "BEP20",
"ERC20": [
{
"Name": "USDT",
"ContractAddress": "0x55d398326f99059ff775485246999027b3197955"
},
{
"Name": "USDC",
"ContractAddress": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"
}
]
},
{
"Enable": false,
"ChainName": "Polygon",
"ChainNameEN": "Polygon",
"BaseCoin": "MATIC",
"Decimals": 18,
"ScanHost": "https://polygonscan.com",
"ApiHost": "https://api.polygonscan.com",
"ApiKey": "", // 此处申请 https://polygonscan.com/myapikey
"ERC20Name": "ERC20",
"ERC20": [
{
"Name": "USDT",
"ContractAddress": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"
},
{
"Name": "USDC",
"ContractAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"
}
]
}
]
}
特别注意
- 把之前准备的API KEY配置上即可
- 参数配置见 https://github.com/LightCountry/TokenPay/blob/master/Wiki/EVMChains.md
运行测试
配置文件改完成, 验证JSON格式有效
上传到服务器上
接着运行起来,没错误的话 , 先去配置WHMCS插件
配完了 在来看最下面的以守护进程运行
# 运行
APPDIR=/www/wwwroot/tokenpay
cd ${APPDIR}
./TokenPay
# 返回信息
root@localhost:/www/wwwroot/tokenpay# ./TokenPay
ϵͳ��Linux
ϵͳ����X64
ϵͳ���ƣ�Linux 5.19.2-x86_64-linode156 #1 SMP PREEMPT_DYNAMIC Thu Aug 18 15:51:13 EDT 2022
������X64
�Ƿ�64λ����ϵͳ��True
CPU CORE:1
HostName:localhost
Version:Unix 5.19.2.86
[03:57:47 INF] Starting web host
[03:57:49 INF] 机器人启动成功!我是TG客服通知机器人。
[03:57:49 INF] 机器人消息发送结果:True
[03:57:50 INF] Service 订单过期 is starting.
[03:57:50 INF] Service 更新汇率 is starting.
[03:57:50 INF] Service 订单通知 is starting.
[03:57:50 INF] Background Service 发送订单通知 is starting.
[03:57:50 INF] Service TRC20订单检测 is starting.
[03:57:50 INF] Service TRX订单检测 is starting.
[03:57:50 INF] Service ETH订单检测 is starting.
[03:57:50 INF] Service ERC20订单检测 is starting.
[03:57:50 INF] Now listening on: http://localhost:5000
[03:57:50 INF] Application started. Press Ctrl+C to shut down.
[03:57:50 INF] Hosting environment: Production
[03:57:50 INF] Content root path: /www/wwwroot/tokenpay/
[03:57:53 INF] ------------------开始更新汇率------------------
[03:57:54 INF] 更新汇率,TRX=>CNY = 0.4943
[03:57:55 INF] 更新汇率,USDT=>CNY = 6.93
[03:57:55 INF] 更新汇率,ETH=>CNY = 12688.38
[03:57:55 INF] 更新汇率,USDC=>CNY = 6.99
[03:57:55 INF] 更新汇率,BNB=>CNY = 2183.67
[03:57:55 INF] 更新汇率,MATIC=>CNY = 6.01
[03:57:55 INF] ------------------结束更新汇率------------------
这样就代表配置OK了
下一步我们可以配置WHMCS插件了
WHMCS插件安装
插件安装
- 把对应的插件ZIP文件解压 或者 git clone
- 上传到
WHMCS目录/modules/gateways/
下
插件激活
- 登录WHMCS后台
- Payment Gateways 下面找到 TokenPay
- 点击 Active 激活它
插件配置
- API URL 同服务器配置为
http://localhost:5000
- API KEY 就是 appsettings.json 结尾配置的
66666
改为你自己的 - 币种列表, 默认支持4种, 你可以添加更多(需先在监控端配好)
TRX|TRX (波场) EVM_ETH_ETH|ETH (以太坊) USDT_TRC20|USDT-TRC20 (波场链) EVM_ETH_USDT_ERC20|USDT-ERC20 (以太链)
- 如果
- WHMCS默认货币为USD, 监控端货币配置为CNY 货币转换选择 USD
- WHMCS默认货币为CNY, 监控端货币配置为CNY 货币转换选择 None
- WHMCS默认货币为CNY, 监控端货币配置为CNY 货币转换选择 None
- WHMCS默认货币为CNY, 监控端货币配置为USD 货币转换选择 CNY
这样就配置完成了, 下一步生成订单测试下
监控端的守护进程运行
到这一步骤的时候,你应该已经对接和调试都完成了
现在以守护进程启动TokenPay来监控加密货币的订单和支付状态了
下面是通用的,可能系统版本不同有略微区别,我尽量把安装和路径都统一了
Redhat/CentOS/AlmaLinux 系统部署
# 安装软件包
sudo yum install epel-release -y
sudo yum install pip python3 -y
sudo yum install supervisor -y
# 替换后缀
sed -i 's|\*.ini|\*.conf|g' /etc/supervisord.conf
# 生成配置 (注意这里,如果你部署路径不是这个,改为你自己的)
cat >/etc/supervisord.d/tokenpay.conf <<EOF
[program:tokenpay]
directory=/www/wwwroot/tokenpay # 改为你的目录 command=/www/wwwroot/tokenpay/TokenPay user=root startsecs=10 autostart=true autorestart=true stderr_logfile=/var/log/supervisor/%(program_name)s.err.log stdout_logfile=/var/log/supervisor/%(program_name)s.out.log loglevel=info EOF # 更新下文件 sudo systemctl daemon-reload # 开机启动 sudo systemctl enable supervisord # 启动 sudo systemctl start supervisord # 验证状态 sudo supervisorctl status 返回 tokenpay RUNNING pid 284452, uptime 0:11:21 代表正常运行了
Debian/Ubuntu 系统
# 安装软件包
sudo apt update && sudo apt install supervisor
sudo systemctl status supervisor
cat >/etc/supervisor/conf.d/tokenpay.conf <<EOF
[program:tokenpay]
directory=/www/wwwroot/tokenpay # 改为你的目录 command=/www/wwwroot/tokenpay/TokenPay user=root autostart=true autorestart=true stderr_logfile=/var/log/supervisor/%(program_name)s.err.log stdout_logfile=/var/log/supervisor/%(program_name)s.out.log loglevel=info EOF sudo supervisorctl reread sudo supervisorctl update # 这时候你的TG应该收到消息了,代表启动成功 # 设置为开机启动 sudo systemctl enable supervisor # 验证状态 sudo supervisorctl status # 返回 tokenpay RUNNING pid 284452, uptime 0:11:21 # 代表正常运行了
通用命令
# 不需要运行,偶尔调试的时候需要,方便复制黏贴
sudo systemctl stop supervisord
sudo systemctl start supervisord
sudo supervisorctl status
sudo supervisorctl reload
sudo supervisorctl reread
sudo supervisorctl update
# 如果需要单项目管理
# 停止
sudo supervisorctl stop tokenpay
# 启动
sudo supervisorctl start tokenpay
# 重启
sudo supervisorctl restart tokenpay
常见问题
同时请求同金额的订单会出现 A支付入账至B订单吗?
不会,监控端会生成UUID订单号做识别了
为什么不是实时更新订单状态?
通常用户发起加密货币的支付到完成支付
有一个时间段,需要一些时间来处理交易
TRON网络 通常较快处理 1-5分钟
ETH网络 取决整体网络状况和矿工费高低 1-30分钟
用户发起支付=> 确认支付 => 区块链网络确认区块 => 确认完成
耗的时间大部分都在 区块链网络确认区块 这个过程中 , 通过交易HASH可以看到 会显示 “确认中” 的提示
一般交易完成都小于30分钟,所以监控端的超时间设置为30分钟最佳
守护进程一直重启
如果守护进程一直 STARTING RUNNING的循环, 这个是进程或管道文件问题
删除 supervisor.sock 或者 pid文件 重启下即可
这个问题应该是偶发的, 一般出现在喜欢pkill -f 干掉进程的方式,例如我
这样的话pid或sock文件还记录了异常, 然后子进程不能获得进程返回的代码
导致死循环……
扩展ETH链币种教程
基础知识
把ETH链理解为银行总行
把代币理解为银行提供的多币种账户,例如USD,HKD
当您注册ETH钱包的时候会分配一个地址,相当于银行总行账户
别人给你转不同代币例如USDT-ERC20, 相当于别人转USD给你
扩展币种
基于TokenPAY监控端扩展币种
首先 打开 https://etherscan.io/tokens
找到你要扩展的币种,我们以 扩展 True USD 为例
点击 True USD
https://etherscan.io/token/0x0000000000085d4780B73119b644AE5ecd22b376
首先找到合约地址 在右边的OTHER INFO里面
Other Info
TOKEN CONTRACT (WITH 18 DECIMALS) # 这个18 就是精度
0x0000000000085d4780B73119b644AE5ecd22b376 # 这个就是合约地址
更新合约地址
打开 EVMChains.json
, 在ETH的配置段,添加
注意逗号问题 具体见JSON代码格式标准
,
{
"Name": "TUSD", // 代币名称
"ContractAddress": "0x0000000000085d4780B73119b644AE5ecd22b376" //合约地址
}
完成后的ETH段完整内容为
{
"Enable": true,
"ChainName": "以太坊",
"ChainNameEN": "ETH",
"BaseCoin": "ETH", //简单理解为 你交易代币扣矿工费的币种
"Decimals": 18,
"ScanHost": "https://etherscan.io",
"ApiHost": "https://api.etherscan.io",
"ApiKey": "你的KEY", // 此处申请 https://etherscan.io/myapikey
"ERC20Name": "ERC20",
"ERC20": [
{
"Name": "USDT",
"ContractAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
},
{
"Name": "USDC",
"ContractAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
},
{
"Name": "TUSD", // 代币名称
"ContractAddress": "0x0000000000085d4780B73119b644AE5ecd22b376" //合约地址
}
]
},
更新币种支持
继续更新 appsettings.json
文件, 添加币种名称
重启生效
这样就添加了TUSD支持
注意验证下JSON格式, 格式错误会导致无法启动
然后重新启动下守护进程
sudo supervisorctl reload
插件配置
接着WHMCS后台支付插件的配置, 币种列表下面 加入
EVM_ETH_TUSD_ERC20|TUSD-ERC20(TrueUSD)
如图
效果演示
用户就可以在前台使用TUSD中支付了
会显示这个币种
然后点击支付
会显示ETH链的TUSD了
如果点击错了
- 参考
无错源码所有资源来自会员发布以及互联网收集,不代表本站立场,如有侵犯你的权益请联系管理员,站内发信联系 我们会第一时间进行审核删除。站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请在下载24小时内删除!
如果遇到付费才可观看的文章,建议升级传奇VIP。全站所有资源“任意下免费看”。本站资源少部分采用7z压缩,为防止有人压缩软件不支持7z格式,7z解压,建议下载7-zip,zip、rar解压,建议下载WinRAR。如遇解压需要密码,请尝试使用www.wucuoym.com来解压,如若仍有问题,请联系站长。
找了好久 终于找到了
感谢分享
找了好久 终于找到了
找了好久 终于找到了
ss
找了好久 终于找到了
我瞅瞅
瞅瞅
cool
太棒了 很需要 谢谢