mirror of
https://github.com/GMWalletApp/epusdt.git
synced 2026-07-07 10:16:15 +00:00
update readme.md
This commit is contained in:
@@ -64,8 +64,6 @@ No matter what kind of platform you operate, Epusdt can fit into existing paymen
|
||||
| **Epay-Compatible Flow** | Works with platforms already using Epay-style payment interfaces |
|
||||
| **More** | Simple HTTP API, often integrated within 10 minutes |
|
||||
|
||||
See more integrations and plugins here: [plugins/](./plugins/)
|
||||
|
||||
---
|
||||
|
||||
## Core Features
|
||||
@@ -100,10 +98,7 @@ Quick-start links:
|
||||
|
||||
```text
|
||||
Epusdt
|
||||
├── plugins/ Integrated plugins and platform adapters
|
||||
├── src/ Core project source code
|
||||
├── sdk/ Integration SDKs
|
||||
├── sql/ Database install / upgrade scripts
|
||||
└── wiki/ Documentation assets and knowledge base
|
||||
```
|
||||
|
||||
|
||||
@@ -25,5 +25,3 @@ Quick links:
|
||||
- [Official Docs](https://epusdt.com)
|
||||
- [Telegram Channel](https://t.me/epusdt)
|
||||
- [Telegram Group](https://t.me/epusdt_group)
|
||||
- [Plugins](./plugins/)
|
||||
|
||||
|
||||
@@ -64,8 +64,6 @@
|
||||
| **Epay 兼容** | 兼容各类支持 Epay 易支付接口的平台 |
|
||||
| **更多** | 简易 HTTP API,10 分钟内接入 |
|
||||
|
||||
查看更多集成列表与插件:[plugins/](./plugins/)
|
||||
|
||||
---
|
||||
|
||||
## 核心特性
|
||||
@@ -100,10 +98,7 @@
|
||||
|
||||
```text
|
||||
Epusdt
|
||||
├── plugins/ 已集成的系统插件(独角数卡等)
|
||||
├── src/ 项目核心代码
|
||||
├── sdk/ 接入 SDK
|
||||
├── sql/ 数据库安装 / 升级脚本
|
||||
└── wiki/ 文档与知识库
|
||||
```
|
||||
|
||||
@@ -179,4 +174,3 @@ Good Morning Technology, LLC 为依据美国法律设立的主体,并将在适
|
||||
Epusdt · Easy Payment USDT · Open Source Payment Gateway · 多链收款
|
||||
</sub>
|
||||
</p>
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
## 使用方法
|
||||
### 注意此插件仅适用于独角数卡2.0.4版本以下,2.0.4版本或以上的独角数卡已经内置此插件,无需配置
|
||||
|
||||
1.将`app`和`routes`目录覆盖到网站根目录。
|
||||
2.在独角数卡后台添加一个支付方式。
|
||||
|
||||
| 支付选项 | 商户id | 商户key | 商户密钥 | 备注 |
|
||||
| :-----| :----- | :----- | :----- |:-----|
|
||||
| Epusdt | api接口认证token | 空 | epusdt收银台地址+/api/v1/order/create-transaction| 如果独角数卡和epusdt在同一服务器则填写`127.0.0.1`不要填域名,例如`http://127.0.0.1:8000/api/v1/order/create-transaction` |
|
||||
|
||||
示例:
|
||||

|
||||
@@ -1,101 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The file was created by Assimon.
|
||||
*
|
||||
* @author GMWalletApp<ashang@utf8.hk>
|
||||
* @copyright GMWalletApp<ashang@utf8.hk>
|
||||
* @link http://utf8.hk/
|
||||
*/
|
||||
|
||||
namespace App\Http\Controllers\Pay;
|
||||
|
||||
|
||||
use App\Exceptions\RuleValidationException;
|
||||
use App\Http\Controllers\PayController;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EpusdtController extends PayController
|
||||
{
|
||||
public function gateway(string $payway, string $orderSN)
|
||||
{
|
||||
try {
|
||||
// 加载网关
|
||||
$this->loadGateWay($orderSN, $payway);
|
||||
//构造要请求的参数数组,无需改动
|
||||
$parameter = [
|
||||
"amount" => (float)$this->order->actual_price,//原价
|
||||
"order_id" => $this->order->order_sn, //可以是用户ID,站内商户订单号,用户名
|
||||
'redirect_url' => route('epusdt-return', ['order_id' => $this->order->order_sn]),
|
||||
'notify_url' => url($this->payGateway->pay_handleroute . '/notify_url'),
|
||||
];
|
||||
$parameter['signature'] = $this->epusdtSign($parameter, $this->payGateway->merchant_id);
|
||||
$client = new Client([
|
||||
'headers' => [ 'Content-Type' => 'application/json' ]
|
||||
]);
|
||||
$response = $client->post($this->payGateway->merchant_pem, ['body' => json_encode($parameter)]);
|
||||
$body = json_decode($response->getBody()->getContents(), true);
|
||||
if (!isset($body['status_code']) || $body['status_code'] != 200) {
|
||||
return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $body['message']);
|
||||
}
|
||||
return redirect()->away($body['data']['payment_url']);
|
||||
} catch (RuleValidationException $exception) {
|
||||
} catch (GuzzleException $exception) {
|
||||
return $this->err($exception->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function epusdtSign(array $parameter, string $signKey)
|
||||
{
|
||||
ksort($parameter);
|
||||
reset($parameter); //内部指针指向数组中的第一个元素
|
||||
$sign = '';
|
||||
$urls = '';
|
||||
foreach ($parameter as $key => $val) {
|
||||
if ($val == '') continue;
|
||||
if ($key != 'signature') {
|
||||
if ($sign != '') {
|
||||
$sign .= "&";
|
||||
$urls .= "&";
|
||||
}
|
||||
$sign .= "$key=$val"; //拼接为url参数形式
|
||||
$urls .= "$key=" . urlencode($val); //拼接为url参数形式
|
||||
}
|
||||
}
|
||||
$sign = md5($sign . $signKey);//密码追加进入开始MD5签名
|
||||
return $sign;
|
||||
}
|
||||
|
||||
public function notifyUrl(Request $request)
|
||||
{
|
||||
$data = $request->all();
|
||||
$order = $this->orderService->detailOrderSN($data['order_id']);
|
||||
if (!$order) {
|
||||
return 'fail';
|
||||
}
|
||||
$payGateway = $this->payService->detail($order->pay_id);
|
||||
if (!$payGateway) {
|
||||
return 'fail';
|
||||
}
|
||||
$signature = $this->epusdtSign($data, $payGateway->merchant_id);
|
||||
if ($data['signature'] != $signature) { //不合法的数据
|
||||
return 'fail'; //返回失败 继续补单
|
||||
} else {
|
||||
//合法的数据
|
||||
//业务处理
|
||||
$this->orderProcessService->completedOrder($data['order_id'], $data['amount'], $data['trade_id']);
|
||||
return 'ok';
|
||||
}
|
||||
}
|
||||
|
||||
public function returnUrl(Request $request)
|
||||
{
|
||||
$oid = $request->get('order_id');
|
||||
// 异步通知还没到就跳转了,所以这里休眠2秒
|
||||
sleep(2);
|
||||
return redirect(url('detail-order-sn', ['orderSN' => $oid]));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The file was created by Assimon.
|
||||
*
|
||||
* @author GMWalletApp<ashang@utf8.hk>
|
||||
* @copyright GMWalletApp<ashang@utf8.hk>
|
||||
* @link http://utf8.hk/
|
||||
*/
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('pay-gateway/{handle}/{payway}/{orderSN}', 'PayController@redirectGateway');
|
||||
|
||||
// 支付相关
|
||||
Route::group(['prefix' => 'pay', 'namespace' => 'Pay', 'middleware' => ['dujiaoka.pay_gate_way']], function () {
|
||||
// 支付宝
|
||||
Route::get('alipay/{payway}/{orderSN}', 'AlipayController@gateway');
|
||||
Route::post('alipay/notify_url', 'AlipayController@notifyUrl');
|
||||
// 微信
|
||||
Route::get('wepay/{payway}/{orderSN}', 'WepayController@gateway');
|
||||
Route::post('wepay/notify_url', 'WepayController@notifyUrl');
|
||||
// 码支付
|
||||
Route::get('mapay/{payway}/{orderSN}', 'MapayController@gateway');
|
||||
Route::post('mapay/notify_url', 'MapayController@notifyUrl');
|
||||
// Paysapi
|
||||
Route::get('paysapi/{payway}/{orderSN}', 'PaysapiController@gateway');
|
||||
Route::post('paysapi/notify_url', 'PaysapiController@notifyUrl');
|
||||
Route::get('paysapi/return_url', 'PaysapiController@returnUrl')->name('paysapi-return');
|
||||
// payjs
|
||||
Route::get('payjs/{payway}/{orderSN}', 'PayjsController@gateway');
|
||||
Route::post('payjs/notify_url', 'PayjsController@notifyUrl');
|
||||
// 易支付
|
||||
Route::get('yipay/{payway}/{orderSN}', 'YipayController@gateway');
|
||||
Route::get('yipay/notify_url', 'YipayController@notifyUrl');
|
||||
Route::get('yipay/return_url', 'YipayController@returnUrl')->name('yipay-return');
|
||||
// paypal
|
||||
Route::get('paypal/{payway}/{orderSN}', 'PaypalPayController@gateway');
|
||||
Route::get('paypal/return_url', 'PaypalPayController@returnUrl')->name('paypal-return');
|
||||
Route::any('paypal/notify_url', 'PaypalPayController@notifyUrl');
|
||||
// V免签
|
||||
Route::get('vpay/{payway}/{orderSN}', 'VpayController@gateway');
|
||||
Route::get('vpay/notify_url', 'VpayController@notifyUrl');
|
||||
Route::get('vpay/return_url', 'VpayController@returnUrl')->name('vpay-return');
|
||||
// stripe
|
||||
Route::get('stripe/{payway}/{oid}','StripeController@gateway');
|
||||
Route::get('stripe/return_url','StripeController@returnUrl');
|
||||
Route::get('stripe/check','StripeController@check');
|
||||
Route::get('stripe/charge','StripeController@charge');
|
||||
// Coinbase
|
||||
Route::get('coinbase/{payway}/{orderSN}', 'CoinbaseController@gateway');
|
||||
Route::post('coinbase/notify_url', 'CoinbaseController@notifyUrl');
|
||||
// epusdt
|
||||
Route::get('epusdt/{payway}/{orderSN}', 'EpusdtController@gateway');
|
||||
Route::post('epusdt/notify_url', 'EpusdtController@notifyUrl');
|
||||
Route::get('epusdt/return_url', 'EpusdtController@returnUrl')->name('epusdt-return');
|
||||
|
||||
});
|
||||
@@ -1,44 +0,0 @@
|
||||
-- auto-generated definition
|
||||
create table orders
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
trade_id varchar(32) not null comment 'epusdt订单号',
|
||||
order_id varchar(32) not null comment '客户交易id',
|
||||
block_transaction_id varchar(128) null comment '区块唯一编号',
|
||||
actual_amount decimal(19, 4) not null comment '订单实际需要支付的金额,保留4位小数',
|
||||
amount decimal(19, 4) not null comment '订单金额,保留4位小数',
|
||||
token varchar(50) not null comment '所属钱包地址',
|
||||
status int default 1 not null comment '1:等待支付,2:支付成功,3:已过期',
|
||||
notify_url varchar(128) not null comment '异步回调地址',
|
||||
redirect_url varchar(128) null comment '同步回调地址',
|
||||
callback_num int default 0 null comment '回调次数',
|
||||
callback_confirm int default 2 null comment '回调是否已确认? 1是 2否',
|
||||
created_at timestamp null,
|
||||
updated_at timestamp null,
|
||||
deleted_at timestamp null,
|
||||
constraint orders_order_id_uindex
|
||||
unique (order_id),
|
||||
constraint orders_trade_id_uindex
|
||||
unique (trade_id)
|
||||
);
|
||||
|
||||
create index orders_block_transaction_id_index
|
||||
on orders (block_transaction_id);
|
||||
|
||||
-- auto-generated definition
|
||||
create table wallet_address
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
token varchar(50) not null comment '钱包token',
|
||||
status int default 1 not null comment '1:启用 2:禁用',
|
||||
created_at timestamp null,
|
||||
updated_at timestamp null,
|
||||
deleted_at timestamp null
|
||||
)
|
||||
comment '钱包表';
|
||||
|
||||
create index wallet_address_token_index
|
||||
on wallet_address (token);
|
||||
|
||||
+2
-59
@@ -12,65 +12,8 @@
|
||||
将提前解析好的收银台域名绑定。
|
||||

|
||||
|
||||
### 二、导入Sql
|
||||
登录管理刚刚新增数据库,导入`Epusdt`所需的sql文件。
|
||||
|
||||
以下为示范0.01版本 最新数据库请以 https://github.com/GMWalletApp/epusdt/blob/master/sql/ 为准
|
||||
|
||||
#### 1.手动下载导入
|
||||
|
||||
数据库地址:https://github.com/GMWalletApp/epusdt/blob/master/sql/v0.0.1.sql
|
||||

|
||||
|
||||
#### 2.使用phpMyAdmin导入
|
||||
使用文本编辑器打开`.sql`文件,如下:
|
||||
```sql
|
||||
-- auto-generated definition
|
||||
create table orders
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
trade_id varchar(32) not null comment 'epusdt订单号',
|
||||
order_id varchar(32) not null comment '客户交易id',
|
||||
block_transaction_id varchar(128) null comment '区块唯一编号',
|
||||
actual_amount decimal(19, 4) not null comment '订单实际需要支付的金额,保留4位小数',
|
||||
amount decimal(19, 4) not null comment '订单金额,保留4位小数',
|
||||
token varchar(50) not null comment '所属钱包地址',
|
||||
status int default 1 not null comment '1:等待支付,2:支付成功,3:已过期',
|
||||
notify_url varchar(128) not null comment '异步回调地址',
|
||||
redirect_url varchar(128) null comment '同步回调地址',
|
||||
callback_num int default 0 null comment '回调次数',
|
||||
callback_confirm int default 2 null comment '回调是否已确认? 1是 2否',
|
||||
created_at timestamp null,
|
||||
updated_at timestamp null,
|
||||
deleted_at timestamp null,
|
||||
constraint orders_order_id_uindex
|
||||
unique (order_id),
|
||||
constraint orders_trade_id_uindex
|
||||
unique (trade_id)
|
||||
);
|
||||
|
||||
create index orders_block_transaction_id_index
|
||||
on orders (block_transaction_id);
|
||||
|
||||
-- auto-generated definition
|
||||
create table wallet_address
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
token varchar(50) not null comment '钱包token',
|
||||
status int default 1 not null comment '1:启用 2:禁用',
|
||||
created_at timestamp null,
|
||||
updated_at timestamp null,
|
||||
deleted_at timestamp null
|
||||
)
|
||||
comment '钱包表';
|
||||
|
||||
create index wallet_address_token_index
|
||||
on wallet_address (token);
|
||||
```
|
||||
复制-粘贴至`phpmyadmin`的SQL面板,然后执行
|
||||

|
||||
### 二、数据库说明
|
||||
当前版本无需手动导入 SQL 文件。配置好数据库连接后,Epusdt 启动时会自动创建和升级所需表结构。
|
||||
|
||||
### 三、配置Epusdt
|
||||
1.将编译好的`Epusdt`项目压缩包上传至刚刚新增的网站目录,随后解压。
|
||||
|
||||
+2
-56
@@ -12,59 +12,9 @@ wget https://github.com/GMWalletApp/epusdt/releases/download/v0.0.3/epusdt_0.0.3
|
||||
tar -xzf epusdt_0.0.3_Linux_x86_64.tar.gz
|
||||
rm epusdt_0.0.3_Linux_x86_64.tar.gz
|
||||
```
|
||||
## 2.导入Sql
|
||||
- 创建sql文件
|
||||
```bash
|
||||
nano epusdt.sql
|
||||
```
|
||||
然后复制下面的
|
||||
```sql
|
||||
-- auto-generated definition
|
||||
use epusdt;
|
||||
create table orders
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
trade_id varchar(32) not null comment 'epusdt订单号',
|
||||
order_id varchar(32) not null comment '客户交易id',
|
||||
block_transaction_id varchar(128) null comment '区块唯一编号',
|
||||
actual_amount decimal(19, 4) not null comment '订单实际需要支付的金额,保留4位小数',
|
||||
amount decimal(19, 4) not null comment '订单金额,保留4位小数',
|
||||
token varchar(50) not null comment '所属钱包地址',
|
||||
status int default 1 not null comment '1:等待支付,2:支付成功,3:已过期',
|
||||
notify_url varchar(128) not null comment '异步回调地址',
|
||||
redirect_url varchar(128) null comment '同步回调地址',
|
||||
callback_num int default 0 null comment '回调次数',
|
||||
callback_confirm int default 2 null comment '回调是否已确认? 1是 2否',
|
||||
created_at timestamp null,
|
||||
updated_at timestamp null,
|
||||
deleted_at timestamp null,
|
||||
constraint orders_order_id_uindex
|
||||
unique (order_id),
|
||||
constraint orders_trade_id_uindex
|
||||
unique (trade_id)
|
||||
);
|
||||
## 2.创建数据库
|
||||
当前版本无需手动导入 SQL 文件。创建数据库并配置连接后,Epusdt 启动时会自动创建和升级所需表结构。
|
||||
|
||||
create index orders_block_transaction_id_index
|
||||
on orders (block_transaction_id);
|
||||
|
||||
-- auto-generated definition
|
||||
create table wallet_address
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
token varchar(50) not null comment '钱包token',
|
||||
status int default 1 not null comment '1:启用 2:禁用',
|
||||
created_at timestamp null,
|
||||
updated_at timestamp null,
|
||||
deleted_at timestamp null
|
||||
)
|
||||
comment '钱包表';
|
||||
|
||||
create index wallet_address_token_index
|
||||
on wallet_address (token);
|
||||
```
|
||||
`ctrl+x` 退出,按 `Y`保存 再按回车就好了
|
||||
- 创建数据库
|
||||
```bash
|
||||
mysql
|
||||
@@ -76,10 +26,6 @@ GRANT ALL ON [这里替换为数据库名].* TO '[这里替换为用户名]'@'lo
|
||||
FLUSH PRIVILEGES;
|
||||
EXIT
|
||||
```
|
||||
- 导入sql文件
|
||||
```bash
|
||||
mysql -u[用户名] -p[密码] < epusdt.sql
|
||||
```
|
||||
## 3.配置反向代理
|
||||
```bash
|
||||
nano /etc/nginx/sites-enabled/epusdt
|
||||
|
||||
Reference in New Issue
Block a user