Skip to content

Commit

Permalink
增加查单接口,能量租用改为租用10分钟能量,节省归集成本
Browse files Browse the repository at this point in the history
  • Loading branch information
Light committed Oct 4, 2024
1 parent 4b5542b commit 017fa79
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 9 deletions.
51 changes: 50 additions & 1 deletion Wiki/docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ URL: `创建订单`接口传递的`NotifyUrl`字段内的URL
### ②按照ASCII排序后拼接
`ActualAmount=15&Amount=34.91&BaseCurrency=CNY&BlockChainName=TRON&BlockTransactionId=375859c36dc5f5d227b10912b5ec70d36dd34446028064956cb60cdbb74432f5&Currency=TRX&CurrencyName=TRX&FromAddress=TYYjzt6AWhe9hAg9DrhiYXEWKDksyohgQa&Id=63234df7-55bf-93fc-0010-67be493c0c27&OutOrderId=E6COE6FGZMO5AXSK&PayTime=2022-09-15 16:08:39&Status=1&ToAddress=TLUF41C386CMU1Wc8pTSCE4QaiZ2xkhTCb`

异步通知密钥为`666`
假设异步通知密钥为`666`

拼接密钥后
`ActualAmount=15&Amount=34.91&BaseCurrency=CNY&BlockChainName=TRON&BlockTransactionId=375859c36dc5f5d227b10912b5ec70d36dd34446028064956cb60cdbb74432f5&Currency=TRX&CurrencyName=TRX&FromAddress=TYYjzt6AWhe9hAg9DrhiYXEWKDksyohgQa&Id=63234df7-55bf-93fc-0010-67be493c0c27&OutOrderId=E6COE6FGZMO5AXSK&PayTime=2022-09-15 16:08:39&Status=1&ToAddress=TLUF41C386CMU1Wc8pTSCE4QaiZ2xkhTCb666`
Expand All @@ -146,3 +146,52 @@ URL: `创建订单`接口传递的`NotifyUrl`字段内的URL
`a8f9d179a8d2798c8b5bb90c31db2c9e`

对比POST中的`Signature`是否与此值一致


## 3. 查单接口

URL: `/Query?Id=[订单Id]&Signature=[签名]`

类型: `GET`

示例返回
```json
{
"success": false,
"message": "订单不存在!"
}
```
```json
{
"success": true,
"message": "订单信息获取成功!",
"data": {
"id": "66f9d5a8-d9c7-0224-004f-a16a1c068e08",
......
}
}
```

| 字段 | 类型 |说明 |
| ---- | ---- | ---- |
| **此接口返回订单表所有字段** |
| **可参考回调数据的字段,也可查阅源代码** |

### 查单接口 `Signature` 计算说明
### ①示例参数
```
/Query?Id=66f9d5a8-d9c7-0224-004f-a16a1c068e08
```
### ②按照ASCII排序后拼接
`Id=66f9d5a8-d9c7-0224-004f-a16a1c068e08`

假设异步通知密钥为:`666`

拼接密钥后
`Id=66f9d5a8-d9c7-0224-004f-a16a1c068e08666`

### ③计算MD5
`baa261cc6af3f5efbed15e17a285f653`

### ④最终请求参数为
`/Query?Id=66f9d5a8-d9c7-0224-004f-a16a1c068e08&Signature=baa261cc6af3f5efbed15e17a285f653`
18 changes: 13 additions & 5 deletions src/TokenPay/BgServices/CollectionTRONService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,24 @@ public class CollectionTRONService : BaseScheduledService
/// <summary>
/// 消耗能量数量(请勿修改)
/// </summary>
private long DefaultNeedEnergy => _configuration.GetValue("Collection:NeedEnergy", 31895);
private long DefaultNeedEnergy => _configuration.GetValue("Collection:NeedEnergy", 64285);
/// <summary>
/// 最低租赁能量数量(请勿修改)
/// </summary>
private long EnergyMinValue => _configuration.GetValue("Collection:EnergyMinValue", 32000);
private long EnergyMinValue => _configuration.GetValue("Collection:EnergyMinValue", 64400);
/// <summary>
/// 当前能量单价(请勿修改)
/// </summary>
private decimal EnergyPrice => _configuration.GetValue("Collection:EnergyPrice", 210m);
/// <summary>
/// 租赁能量时长(请勿修改)
/// </summary>
private int RentDuration => _configuration.GetValue("Collection:RentDuration", 10);
/// <summary>
/// 租赁能量时长单位(请勿修改)
/// </summary>
private string RentTimeUnit => _configuration.GetValue("Collection:RentTimeUnit", "m")!;
/// <summary>
/// 归集收款地址
/// </summary>
private string Address => _configuration.GetValue<string>("Collection:Address")!;
Expand Down Expand Up @@ -186,7 +194,7 @@ await _bot.SendTextMessageAsync(@$"归集收款地址余额
list.Where(x => x.USDT > MinUSDT).Sum(x => x.USDT));
Func<int, Task<(decimal, string)>> GetPrice = async (int ResourceValue) =>
{
var resp = await energyApi.OrderPrice(ResourceValue);
var resp = await energyApi.OrderPrice(ResourceValue, RentDuration, RentTimeUnit);
_logger.LogInformation("能量价格预估:{@result}", resp);
if (resp != null && resp.Code == 0)
{
Expand Down Expand Up @@ -344,8 +352,8 @@ await _bot.SendTextMessageAsync(@$"归集TRX成功!
PayAddress = mainWallet.Address,
PayAmount = amountTrx,
ReceiveAddress = wallet.Address,
RentDuration = 1,
RentTimeUnit = "h",
RentDuration = RentDuration,
RentTimeUnit = RentTimeUnit,
ResourceValue = (int)NeedEnergy,
SignedTxn = txn!
};
Expand Down
37 changes: 35 additions & 2 deletions src/TokenPay/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,39 @@ public async Task<IActionResult> Pay(Guid Id)
ViewData["ExpireTime"] = order.CreateTime.AddSeconds(ExpireTime);
return View(order);
}
[HttpGet]
[ApiExplorerSettings(IgnoreApi = false)]
public async Task<IActionResult> Query(Guid Id, string Signature)
{
if (_env.IsProduction())
{
if (!VerifySignature(new
{
Id,
Signature
}))
{
return Json(new ReturnData
{
Message = "签名验证失败!"
});
}
}
var order = await _repository.Where(x => x.Id == Id).FirstAsync();
if (order == null)
{
return Json(new ReturnData
{
Message = "订单不存在!"
});
}
return Json(new ReturnData<TokenOrders>
{
Success = true,
Message = "订单信息获取成功!",
Data = order,
});
}
[Route("/{action}/{id}")]
public async Task<IActionResult> Check(Guid Id)
{
Expand All @@ -132,7 +165,7 @@ public async Task<IActionResult> Check(Guid Id)
}
return Content(order.Status.ToString());
}
private bool VerifySignature(CreateOrderViewModel model)
private bool VerifySignature(object model)
{
if (model == null) return false;
var dic = new SortedDictionary<string, string?>();
Expand Down Expand Up @@ -266,7 +299,7 @@ public async Task<IActionResult> CreateOrder([FromBody] CreateOrderViewModel mod
});
}

public SortedDictionary<string, object?> ToPayDic(TokenOrders order)
private SortedDictionary<string, object?> ToPayDic(TokenOrders order)
{
var BaseCurrency = _configuration.GetValue<string>("BaseCurrency", "CNY");
var ExpireTime = _configuration.GetValue("ExpireTime", 10 * 60);
Expand Down
2 changes: 1 addition & 1 deletion src/TokenPay/Helper/EnergyApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public EnergyApi(ILogger logger, IConfiguration configuration)
/// 价格估算
/// </summary>
/// <returns></returns>
public async Task<EnergyResponse<OrderPriceData>> OrderPrice(int resource_value, int rent_duration = 1, string rent_time_unit = "h")
public async Task<EnergyResponse<OrderPriceData>> OrderPrice(int resource_value, int rent_duration = 10, string rent_time_unit = "m")
{
var result = await client
.Request("OrderPrice")
Expand Down

0 comments on commit 017fa79

Please sign in to comment.