leopard8352
2023-12-04 8871a733498c8d717714b83bb096b7738224541a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Fill out your copyright notice in the Description page of Project Settings.
 
 
#include "HttpTapCDKey.h"
 
#include "HttpModule.h"
#include "JsonObjectConverter.h"
#include "Taptap.h"
#include "Define/TapCDKeyRequest.h"
#include "Interfaces/IHttpResponse.h"
 
#define TAP_CDKEY_URL TEXT("https://poster-api.xd.cn/api/v1.0/cdk/game/submit-simple")
 
void UHttpTapCDKey::OnProcessRequestComplete(TSharedPtr<IHttpRequest, ESPMode::ThreadSafe> request,
    TSharedPtr<IHttpResponse, ESPMode::ThreadSafe> response, bool arg) const
{
    FTapCDKeyResponse result;
    if (request->GetStatus() == EHttpRequestStatus::Succeeded)
    {
        TAPLOG_D(TEXT("tapcdkey报文:%s"),*response->GetContentAsString())
        if (!FJsonObjectConverter::JsonObjectStringToUStruct(*response->GetContentAsString(),&result))
        {
            TAPLOG_E(TEXT("分析返回报文时,转化json字符串错误!"))
            return;
        }
        HttpTapCDKeyRequestSuccessEventHandle.Broadcast(result,request->GetStatus(),true);
        return;
    }
    HttpTapCDKeyRequestSuccessEventHandle.Broadcast(result,request->GetStatus(),true);
}
 
void UHttpTapCDKey::StartRequest(const FString& key)
{
    const TSharedRef<IHttpRequest> request = FHttpModule::Get().CreateRequest();
    request->SetVerb(TEXT("Post"));
    request->SetURL(TAP_CDKEY_URL);
    request->SetHeader("Content-Type","application/json");
    // Build Struct
 
    FTapCDKeyRequest req;
    req.character_id = CharacterID;
    req.client_id = ClientID;
    req.gift_code = key;
    req.nonce_str = NonceStr;
    req.timestamp = SpawnTimeStamp();
    req.sign = GetSign(req.timestamp);
 
    FString content;
    if (!FJsonObjectConverter::UStructToJsonObjectString(req,content))
    {
        TAPLOG_E(TEXT("请求报文时,转化json字符串错误!"))
        return;
    }
    TAPLOG_D(TEXT("JSON字符串::\n%s"),*content);
 
    const FTCHARToUTF8 convert(*content);
    TArray<uint8> arr((const uint8*)convert.Get(),convert.Length());
    
    request->SetContent(arr);
    request->SetTimeout(TimeOut);
    request->OnProcessRequestComplete().BindUObject(this,&UHttpTapCDKey::OnProcessRequestComplete);
    if (!request->ProcessRequest())
    {
        UE_LOG(LogTemp,Log,TEXT("tapCDKey请求出错"))
    }
}
 
// int64 timestamp = (FDateTime::Now() - FDateTime(1970, 1, 1)).GetTotalMilliseconds();
int64 UHttpTapCDKey::SpawnTimeStamp()
{
    return (FDateTime::Now() - FDateTime(1970, 1, 1)).GetTotalSeconds();
}
FString UHttpTapCDKey::GetSign_Implementation(int64 timestamp) const
{
    FString content;
    content.AppendInt(timestamp);
    content.Append(NonceStr);
    content.Append(ClientID);
 
    // content = TEXT("1655724586abcdeabc");
    const FTCHARToUTF8 convert(*content);
    const auto sign = FSHA1::HashBuffer(convert.Get(),convert.Length());
    return sign.ToString().ToLower();
}