提交 | 用户 | 时间
|
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 |
} |