Skip to content

Commit f3323ac

Browse files
authored
Merge pull request #5 from getmimo/fix-api-client
Fix Api client targeting wrong URL & Fix data type of subscription status response
2 parents 282be2d + 7fe4698 commit f3323ac

File tree

3 files changed

+49
-14
lines changed

3 files changed

+49
-14
lines changed

src/AppStoreServerApiClient.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public Task<SubscriptionStatusResponse> GetAllSubscriptionStatuses(string transa
4141
{
4242
//Call to https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses
4343

44-
string path = $"v1/subscriptions/{transactionId}";
44+
string path = $"/inApps/v1/subscriptions/{transactionId}";
4545

4646
return this.MakeRequest<SubscriptionStatusResponse>(path, HttpMethod.Get)!;
4747
}
@@ -62,7 +62,7 @@ public Task<SubscriptionStatusResponse> GetAllSubscriptionStatuses(string transa
6262
queryParameters.Add("paginationToken", paginationToken);
6363
}
6464

65-
string path = $"v1/notifications/history";
65+
const string path = "/inApps/v1/notifications/history";
6666

6767
return this.MakeRequest<NotificationHistoryResponse>(
6868
path,
@@ -75,7 +75,7 @@ public Task<SubscriptionStatusResponse> GetAllSubscriptionStatuses(string transa
7575
/// <summary>
7676
/// Get a customer’s in-app purchase transaction history for your app.
7777
/// </summary>
78-
/// <returns>A list of transactions associated with the provided Transaction Id</returns>
78+
/// <returns>A list of transactions associated with the provided Transaction ID</returns>
7979
public Task<TransactionHistoryResponse?> GetTransactionHistory(string transactionId, string revisionToken = "")
8080
{
8181
//Call to https://developer.apple.com/documentation/appstoreserverapi/get_transaction_history
@@ -85,7 +85,7 @@ public Task<SubscriptionStatusResponse> GetAllSubscriptionStatuses(string transa
8585
queryParameters.Add("revision", revisionToken);
8686
}
8787

88-
string path = $"v2/history/{transactionId}";
88+
string path = $"/inApps/v2/history/{transactionId}";
8989

9090
return this.MakeRequest<TransactionHistoryResponse>(path, HttpMethod.Get, queryParameters);
9191
}
@@ -101,9 +101,9 @@ public Task<SubscriptionStatusResponse> GetAllSubscriptionStatuses(string transa
101101
/// </remarks>
102102
public Task SendConsumptionData(string transactionId, ConsumptionRequest consumptionRequest)
103103
{
104-
string path = $"v1/transactions/consumption/{transactionId}";
104+
string path = $"/inApps/v1/transactions/consumption/{transactionId}";
105105

106-
return this.MakeRequest<object?>(path, HttpMethod.Put, null, consumptionRequest, fetchResponse: false);
106+
return this.MakeRequest<object?>(path, HttpMethod.Put, null, consumptionRequest, false);
107107
}
108108

109109
private static string CreateBearerToken(string keyId, string issuerId, string signingKey, string bundleId)
@@ -142,9 +142,8 @@ private static string CreateBearerToken(string keyId, string issuerId, string si
142142
{
143143
string token = CreateBearerToken(keyId, issuerId, signingKey, bundleId);
144144

145-
Uri url = new(environment.BaseUrl, path);
145+
UriBuilder builder = new(environment.BaseUrl) { Path = path };
146146

147-
var builder = new UriBuilder(url);
148147
if (queryParameters != null && queryParameters.Any())
149148
{
150149
NameValueCollection query = HttpUtility.ParseQueryString(builder.Query);

src/Models/AppStoreDataTypes.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ public class SubscriptionStatusResponse
400400
/// <summary>
401401
/// The unique identifier of the app that the notification applies to.
402402
/// </summary>
403-
public string? AppAppleId { get; set; }
403+
public long AppAppleId { get; set; }
404404

405405
/// <summary>
406406
/// The bundle identifier of the app.

tests/AppStoreServerApiClientTest.cs

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,59 @@ private static AppStoreServerApiClient GetAppStoreServerApiClient(MockHttpMessag
3333
[Fact]
3434
public async Task GetAllSubscriptionStatuses_Success()
3535
{
36+
const string responseData = """
37+
{
38+
"environment" : "Sandbox",
39+
"bundleId" : "com.test.app",
40+
"appAppleId" : 1234567890,
41+
"data" : [ {
42+
"subscriptionGroupIdentifier" : "98765",
43+
"lastTransactions" : [ {
44+
"originalTransactionId" : "123454321",
45+
"status" : 2,
46+
"signedTransactionInfo" : "eyabc",
47+
"signedRenewalInfo" : "eyxyz"
48+
} ]
49+
} ]
50+
}
51+
""";
3652
var mockHttp = new MockHttpMessageHandler();
3753
mockHttp
38-
.When($"{AppStoreEnvironment.LocalTesting.BaseUrl}v1/subscriptions/123456")
39-
.Respond("application/json", "{\"data\":[]}");
54+
.When("https://local-testing-base-url/inApps/v1/subscriptions/123456")
55+
.Respond("application/json", responseData);
4056

4157
AppStoreServerApiClient client = GetAppStoreServerApiClient(mockHttp);
4258
SubscriptionStatusResponse response = await client.GetAllSubscriptionStatuses("123456");
4359

4460
Assert.NotNull(response);
61+
Assert.Equal("Sandbox", response.Environment);
62+
Assert.Equal("com.test.app", response.BundleId);
63+
Assert.Equal(1234567890, response.AppAppleId);
64+
Assert.Collection(
65+
response.Data,
66+
data =>
67+
{
68+
Assert.Equal("98765", data.SubscriptionGroupIdentifier);
69+
Assert.Collection(
70+
data.LastTransactions,
71+
transaction =>
72+
{
73+
Assert.Equal("123454321", transaction.OriginalTransactionId);
74+
Assert.Equal(TransactionsItemSubscriptionStatus.Expired, transaction.Status);
75+
Assert.Equal("eyabc", transaction.SignedTransactionInfo);
76+
Assert.Equal("eyxyz", transaction.SignedRenewalInfo);
77+
}
78+
);
79+
}
80+
);
4581
}
4682

4783
[Fact]
4884
public async Task GetNotificationHistory_Success()
4985
{
5086
var mockHttp = new MockHttpMessageHandler();
5187
mockHttp
52-
.When($"{AppStoreEnvironment.LocalTesting.BaseUrl}v1/notifications/history")
88+
.When($"https://local-testing-base-url/inApps/v1/notifications/history")
5389
.Respond("application/json", "{\"notificationHistory\":[]}");
5490

5591
AppStoreServerApiClient client = GetAppStoreServerApiClient(mockHttp);
@@ -63,7 +99,7 @@ public async Task GetTransactionHistory_Success()
6399
{
64100
var mockHttp = new MockHttpMessageHandler();
65101
mockHttp
66-
.When($"{AppStoreEnvironment.LocalTesting.BaseUrl}v2/history/123456")
102+
.When($"https://local-testing-base-url/inApps/v2/history/123456")
67103
.Respond("application/json", "{\"signedTransactions\":[]}");
68104

69105
AppStoreServerApiClient client = GetAppStoreServerApiClient(mockHttp);
@@ -77,7 +113,7 @@ public async Task SendConsumptionData_Success()
77113
{
78114
var mockHttp = new MockHttpMessageHandler();
79115
mockHttp
80-
.When($"{AppStoreEnvironment.LocalTesting.BaseUrl}v1/transactions/consumption/123456")
116+
.When($"https://local-testing-base-url/inApps/v1/transactions/consumption/123456")
81117
.Respond(System.Net.HttpStatusCode.OK);
82118

83119
AppStoreServerApiClient client = GetAppStoreServerApiClient(mockHttp);

0 commit comments

Comments
 (0)