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