fix(wxapi): 修复部分接口在安全鉴权模式下签名错误的问题

This commit is contained in:
Fu Diwei
2024-08-15 11:05:11 +08:00
parent 56c1d51838
commit d841ef9b66

View File

@@ -122,7 +122,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Interceptors
return;
string urlpath = GetRequestUrlPath(context.FlurlCall.HttpRequestMessage.RequestUri);
string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString();
long timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds();
string postData = "{}";
string postDataEncrypted;
if (context.FlurlCall.HttpRequestMessage?.Content is not null)
@@ -156,7 +156,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Interceptors
JsonObject jsonObj = JsonObject.Parse(postData)!.AsObject();
jsonObj["_n"] = GenerateSymmetricEncryptionNonce(16);
jsonObj["_appid"] = _appId;
jsonObj["_timestamp"] = timestamp;
jsonObj["_timestamp"] = timestamp; // NOTICE: must be a number
NameValueCollection queryParams = HttpUtility.ParseQueryString(context.FlurlCall.HttpRequestMessage!.RequestUri.Query);
foreach (string? key in queryParams.AllKeys)
@@ -424,11 +424,21 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Interceptors
return Convert.ToBase64String(bytes);
}
private string GenerateSymmetricEncryptionAssociatedData(string urlpath, string appId, long timestamp)
{
return GenerateSymmetricEncryptionAssociatedData(urlpath, appId, timestamp.ToString());
}
private string GenerateSymmetricEncryptionAssociatedData(string urlpath, string appId, string timestamp)
{
return $"{urlpath}|{appId}|{timestamp}|{_symmetricNum}";
}
private string GenerateAymmetricSigningData(string urlpath, string appId, long timestamp, string postdata)
{
return GenerateAymmetricSigningData(urlpath, appId, timestamp.ToString(), postdata);
}
private string GenerateAymmetricSigningData(string urlpath, string appId, string timestamp, string postdata)
{
return $"{urlpath}\n{appId}\n{timestamp}\n{postdata}";