// 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();
|
}
|