Documentation
¶
Index ¶
- Constants
- Variables
- type APIClient
- type AppAccountSetter
- type AutoRenewStatus
- type AutoRenewSubscriptionStatus
- type Cert
- type ConsumptionRequestBody
- type ConsumptionSender
- type Environment
- type Error
- type ExtendReasonCode
- type ExtendRenewalDateRequest
- type FirstSendAttemptResult
- type HistoryResponse
- type IAPAPIClient
- type IAPType
- type JWSDecodedHeader
- type JWSRenewalInfoDecodedPayload
- func (J JWSRenewalInfoDecodedPayload) GetAudience() (jwt.ClaimStrings, error)
- func (J JWSRenewalInfoDecodedPayload) GetExpirationTime() (*jwt.NumericDate, error)
- func (J JWSRenewalInfoDecodedPayload) GetIssuedAt() (*jwt.NumericDate, error)
- func (J JWSRenewalInfoDecodedPayload) GetIssuer() (string, error)
- func (J JWSRenewalInfoDecodedPayload) GetNotBefore() (*jwt.NumericDate, error)
- func (J JWSRenewalInfoDecodedPayload) GetSubject() (string, error)
- type JWSTransaction
- func (J JWSTransaction) GetAudience() (jwt.ClaimStrings, error)
- func (J JWSTransaction) GetExpirationTime() (*jwt.NumericDate, error)
- func (J JWSTransaction) GetIssuedAt() (*jwt.NumericDate, error)
- func (J JWSTransaction) GetIssuer() (string, error)
- func (J JWSTransaction) GetNotBefore() (*jwt.NumericDate, error)
- func (J JWSTransaction) GetSubject() (string, error)
- type LastTransactionsItem
- type MassExtendRenewalDateRequest
- type MassExtendRenewalDateStatusResponse
- type NotificationGetter
- type NotificationHistoryRequest
- type NotificationHistoryResponseItem
- type NotificationHistoryResponses
- type NotificationSender
- type OfferDiscountType
- type OrderLookupResponse
- type RefundLookupResponse
- type SendAttemptItem
- type SendTestNotificationResponse
- type StatusResponse
- type StoreAPIClient
- type StoreClient
- func (a *StoreClient) Do(ctx context.Context, method string, url string, body io.Reader) (int, []byte, error)
- func (a *StoreClient) ExtendSubscriptionRenewalDate(ctx context.Context, originalTransactionId string, ...) (statusCode int, err error)
- func (a *StoreClient) ExtendSubscriptionRenewalDateForAll(ctx context.Context, body MassExtendRenewalDateRequest) (statusCode int, err error)
- func (a *StoreClient) GetALLSubscriptionStatuses(ctx context.Context, originalTransactionId string, query *url.Values) (rsp *StatusResponse, err error)
- func (a *StoreClient) GetAllNotificationHistory(ctx context.Context, body NotificationHistoryRequest, duration time.Duration) (responses []NotificationHistoryResponseItem, err error)
- func (a *StoreClient) GetNotificationHistory(ctx context.Context, body NotificationHistoryRequest, paginationToken string) (rsp *NotificationHistoryResponses, err error)
- func (a *StoreClient) GetRefundHistory(ctx context.Context, originalTransactionId string) (responses []*RefundLookupResponse, err error)
- func (a *StoreClient) GetSubscriptionRenewalDataStatus(ctx context.Context, productId, requestIdentifier string) (statusCode int, rsp *MassExtendRenewalDateStatusResponse, err error)
- func (a *StoreClient) GetTestNotificationStatus(ctx context.Context, testNotificationToken string) (int, []byte, error)
- func (a *StoreClient) GetTransactionHistory(ctx context.Context, transactionId string, query *url.Values) (responses []*HistoryResponse, err error)
- func (a *StoreClient) GetTransactionInfo(ctx context.Context, transactionId string) (rsp *TransactionInfoResponse, err error)
- func (a *StoreClient) LookupOrderID(ctx context.Context, orderId string) (rsp *OrderLookupResponse, err error)
- func (a *StoreClient) ParseJWSEncodeString(jwsEncode string) (interface{}, error)
- func (a *StoreClient) ParseSignedTransaction(transaction string) (*JWSTransaction, error)
- func (a *StoreClient) ParseSignedTransactions(transactions []string) ([]*JWSTransaction, error)
- func (a *StoreClient) SendConsumptionInfo(ctx context.Context, originalTransactionId string, body ConsumptionRequestBody) (statusCode int, err error)
- func (a *StoreClient) SendRequestTestNotification(ctx context.Context) (int, []byte, error)
- func (a *StoreClient) SetAppAccountToken(ctx context.Context, originalTransactionId string, ...) (statusCode int, err error)
- type StoreConfig
- type SubscriptionExtender
- type SubscriptionGetter
- type SubscriptionGroupIdentifierItem
- type Token
- type TransactionInfoResponse
- type TransactionParser
- type TransactionReason
- type UpdateAppAccountTokenRequest
Constants ¶
const ( TransactionReasonPurchase = "PURCHASE" TransactionReasonRenewal = "RENEWAL" )
const ( UndeclaredExtendReasonCode = iota CustomerSatisfaction OtherReasons ServiceIssueOrOutage )
const ( SubscriptionActive AutoRenewSubscriptionStatus = 1 SubscriptionExpired AutoRenewSubscriptionStatus = 2 SubscriptionRetryPeriod AutoRenewSubscriptionStatus = 3 SubscriptionGracePeriod AutoRenewSubscriptionStatus = 4 SubscriptionRevoked AutoRenewSubscriptionStatus = 5 AutoRenewStatusOff AutoRenewStatus = 0 AutoRenewStatusOn AutoRenewStatus = 1 )
const ( HostSandBox = "https://api.storekit-sandbox.itunes.apple.com" HostProduction = "https://api.storekit.itunes.apple.com" PathLookUp = "/inApps/v1/lookup/{orderId}" PathTransactionHistory = "/inApps/v2/history/{transactionId}" PathTransactionHistoryV1 = "/inApps/v1/history/{originalTransactionId}" PathTransactionInfo = "/inApps/v1/transactions/{transactionId}" PathRefundHistory = "/inApps/v2/refund/lookup/{originalTransactionId}" PathGetALLSubscriptionStatus = "/inApps/v1/subscriptions/{originalTransactionId}" PathConsumptionInfo = "/inApps/v1/transactions/consumption/{originalTransactionId}" PathExtendSubscriptionRenewalDate = "/inApps/v1/subscriptions/extend/{originalTransactionId}" PathExtendSubscriptionRenewalDateForAll = "/inApps/v1/subscriptions/extend/mass/" PathGetStatusOfSubscriptionRenewalDate = "/inApps/v1/subscriptions/extend/mass/{productId}/{requestIdentifier}" PathGetNotificationHistory = "/inApps/v1/notifications/history" PathRequestTestNotification = "/inApps/v1/notifications/test" PathGetTestNotificationStatus = "/inApps/v1/notifications/test/{testNotificationToken}" PathSetAppAccountToken = "/inApps/v1/transactions/{originalTransactionId}/appAccountToken" )
Variables ¶
var ( // Retryable errors AccountNotFoundRetryableError = newError(4040002, "Account not found. Please try again.") AppNotFoundRetryableError = newError(4040004, "App not found. Please try again.") GeneralInternalRetryableError = newError(5000001, "An unknown error occurred. Please try again.") OriginalTransactionIdNotFoundRetryableError = newError(4040006, "Original transaction id not found. Please try again.") // Errors AccountNotFoundError = newError(4040001, "Account not found.") AppNotFoundError = newError(4040003, "App not found.") GeneralInternalError = newError(5000000, "An unknown error occurred.") GeneralBadRequestError = newError(4000000, "Bad request.") InvalidAppIdentifierError = newError(4000002, "Invalid request app identifier.") InvalidEmptyStorefrontCountryCodeListError = newError(4000027, "Invalid request. If provided, the list of storefront country codes must not be empty.") InvalidExtendByDaysError = newError(4000009, "Invalid extend by days value.") InvalidExtendReasonCodeError = newError(4000010, "Invalid extend reason code.") InvalidOriginalTransactionIdError = newError(4000008, "Invalid original transaction id.") InvalidRequestIdentifierError = newError(4000011, "Invalid request identifier.") InvalidRequestRevisionError = newError(4000005, "Invalid request revision.") InvalidRevokedError = newError(4000030, "Invalid request. The revoked parameter is invalid.") InvalidStatusError = newError(4000031, "Invalid request. The status parameter is invalid.") InvalidStorefrontCountryCodeError = newError(4000028, "Invalid request. A storefront country code was invalid.") InvalidTransactionIdError = newError(4000006, "Invalid transaction id.") OriginalTransactionIdNotFoundError = newError(4040005, "Original transaction id not found.") RateLimitExceededError = newError(4290000, "Rate limit exceeded.") StatusRequestNotFoundError = newError(4040009, "The server didn't find a subscription-renewal-date extension request for this requestIdentifier and productId combination.") SubscriptionExtensionIneligibleError = newError(4030004, "Forbidden - subscription state ineligible for extension.") SubscriptionMaxExtensionError = newError(4030005, "Forbidden - subscription has reached maximum extension count.") TransactionIdNotFoundError = newError(4040010, "Transaction id not found.") // Notification test and history errors InvalidEndDateError = newError(4000016, "Invalid request. The end date is not a timestamp value represented in milliseconds.") InvalidNotificationTypeError = newError(4000018, "Invalid request. The notification type or subtype is invalid.") InvalidPaginationTokenError = newError(4000014, "Invalid request. The pagination token is invalid.") InvalidStartDateError = newError(4000015, "Invalid request. The start date is not a timestamp value represented in milliseconds.") InvalidTestNotificationTokenError = newError(4000020, "Invalid request. The test notification token is invalid.") InvalidInAppOwnershipTypeError = newError(4000026, "Invalid request. The in-app ownership type parameter is invalid.") InvalidProductIdError = newError(4000023, "Invalid request. The product id parameter is invalid.") InvalidProductTypeError = newError(4000022, "Invalid request. The product type parameter is invalid.") InvalidSortError = newError(4000021, "Invalid request. The sort parameter is invalid.") InvalidSubscriptionGroupIdentifierError = newError(4000024, "Invalid request. The subscription group identifier parameter is invalid.") MultipleFiltersSuppliedError = newError(4000019, "Invalid request. Supply either a transaction id or a notification type, but not both.") PaginationTokenExpiredError = newError(4000017, "Invalid request. The pagination token is expired.") ServerNotificationURLNotFoundError = newError(4040007, "No App Store Server Notification URL found for provided app. Check that a URL is configured in App Store Connect for this environment.") StartDateAfterEndDateError = newError(4000013, "Invalid request. The end date precedes the start date or the dates are the same.") StartDateTooFarInPastError = newError(4000012, "Invalid request. The start date is earlier than the allowed start date.") TestNotificationNotFoundError = newError(4040008, "Either the test notification token is expired or the notification and status are not yet available.") InvalidAccountTenureError = newError(4000032, "Invalid request. The account tenure field is invalid.") InvalidAppAccountTokenError = newError(4000033, "Invalid request. The app account token field must contain a valid UUID or an empty string.") InvalidConsumptionStatusError = newError(4000034, "Invalid request. The consumption status field is invalid.") InvalidCustomerConsentedError = newError(4000035, "Invalid request. The customer consented field is required and must indicate the customer consented") InvalidDeliveryStatusError = newError(4000036, "Invalid request. The delivery status field is invalid") InvalidLifetimeDollarsPurchasedError = newError(4000037, "Invalid request. The lifetime dollars purchased field is invalid") InvalidLifetimeDollarsRefundedError = newError(4000038, "Invalid request. The lifetime dollars refunded field is invalid") InvalidPlatformError = newError(4000039, "Invalid request. The platform field is invalid") InvalidPlayTimeError = newError(4000040, "Invalid request. The playtime field is invalid") InvalidSampleContentProvidedError = newError(4000041, "Invalid request. The sample content provided field is invalid") InvalidUserStatusError = newError(4000042, "Invalid request. The user status field is invalid") InvalidTransactionNotConsumableError = newError(4000043, "Invalid request. The transaction id parameter must represent a consumable in-app purchase") InvalidTransactionTypeNotSupportedError = newError(4000047, "Invalid request. The transaction id doesn't represent a supported in-app purchase type") AppTransactionIdNotSupportedError = newError(4000048, "Invalid request. Invalid request. App transactions aren't supported by this endpoint") InvalidAppAccountTokenUUIDError = newError(4000183, "Invalid request. The app account token field must be a valid UUID") FamilyTransactionNotSupportedError = newError(4000185, "Invalid request. Family Sharing transactions aren't supported by this endpoint") TransactionIdIsNotOriginalTransactionIdError = newError(4000187, "Invalid request. The transaction ID provided is not an original transaction ID") )
All Error lists in https://developer.apple.com/documentation/appstoreserverapi/error_codes.
var ( ErrAuthKeyInvalidPem = errors.New("token: AuthKey must be a valid .p8 PEM file") ErrAuthKeyInvalidType = errors.New("token: AuthKey must be of type ecdsa.PrivateKey") )
Authorize Tokens For App Store Server API Request Doc: https://developer.apple.com/documentation/appstoreserverapi/generating_tokens_for_api_requests
Functions ¶
This section is empty.
Types ¶
type APIClient ¶
type APIClient struct {
// contains filtered or unexported fields
}
func NewAPIClient ¶
func NewAPIClient(config StoreConfig) *APIClient
type AppAccountSetter ¶
type AutoRenewStatus ¶
type AutoRenewStatus int32
type AutoRenewSubscriptionStatus ¶
type AutoRenewSubscriptionStatus int32
type ConsumptionRequestBody ¶
type ConsumptionRequestBody struct {
AccountTenure int32 `json:"accountTenure"`
AppAccountToken string `json:"appAccountToken"`
ConsumptionStatus int32 `json:"consumptionStatus"`
CustomerConsented bool `json:"customerConsented"`
DeliveryStatus int32 `json:"deliveryStatus"`
LifetimeDollarsPurchased int32 `json:"lifetimeDollarsPurchased"`
LifetimeDollarsRefunded int32 `json:"lifetimeDollarsRefunded"`
Platform int32 `json:"platform"`
PlayTime int32 `json:"playTime"`
SampleContentProvided bool `json:"sampleContentProvided"`
UserStatus int32 `json:"userStatus"`
RefundPreference int32 `json:"refundPreference"`
}
ConsumptionRequestBody https://developer.apple.com/documentation/appstoreserverapi/consumptionrequest
type ConsumptionSender ¶
type Environment ¶
type Environment string
const ( Sandbox Environment = "Sandbox" Production Environment = "Production" )
Environment https://developer.apple.com/documentation/appstoreserverapi/environment
type Error ¶
type Error struct {
// contains filtered or unexported fields
}
func (*Error) ErrorMessage ¶
func (*Error) RetryAfter ¶
type ExtendReasonCode ¶
type ExtendReasonCode int32
https://developer.apple.com/documentation/appstoreserverapi/extendreasoncode
type ExtendRenewalDateRequest ¶
type ExtendRenewalDateRequest struct {
ExtendByDays int32 `json:"extendByDays"`
ExtendReasonCode ExtendReasonCode `json:"extendReasonCode"`
RequestIdentifier string `json:"requestIdentifier"`
}
ExtendRenewalDateRequest https://developer.apple.com/documentation/appstoreserverapi/extendrenewaldaterequest
type FirstSendAttemptResult ¶
type FirstSendAttemptResult string
https://developer.apple.com/documentation/appstoreserverapi/firstsendattemptresult
const ( FirstSendAttemptResultSuccess FirstSendAttemptResult = "SUCCESS" FirstSendAttemptResultCircularRedirect FirstSendAttemptResult = "CIRCULAR_REDIRECT" FirstSendAttemptResultInvalidResponse FirstSendAttemptResult = "INVALID_RESPONSE" FirstSendAttemptResultNoResponse FirstSendAttemptResult = "NO_RESPONSE" FirstSendAttemptResultOther FirstSendAttemptResult = "OTHER" FirstSendAttemptResultPrematureClose FirstSendAttemptResult = "PREMATURE_CLOSE" FirstSendAttemptResultSocketIssue FirstSendAttemptResult = "SOCKET_ISSUE" FirstSendAttemptResultTimedOut FirstSendAttemptResult = "TIMED_OUT" FirstSendAttemptResultTlsIssue FirstSendAttemptResult = "TLS_ISSUE" FirstSendAttemptResultUnsupportedCharset FirstSendAttemptResult = "UNSUPPORTED_CHARSET" FirstSendAttemptResultUnsupportedHTTPRESPONSECODE FirstSendAttemptResult = "UNSUCCESSFUL_HTTP_RESPONSE_CODE" )
type HistoryResponse ¶
type HistoryResponse struct {
AppAppleId int64 `json:"appAppleId"`
BundleId string `json:"bundleId"`
Environment Environment `json:"environment"`
HasMore bool `json:"hasMore"`
Revision string `json:"revision"`
SignedTransactions []string `json:"signedTransactions"`
}
HistoryResponse https://developer.apple.com/documentation/appstoreserverapi/historyresponse
type IAPAPIClient ¶
type IAPAPIClient interface {
Verify(ctx context.Context, transactionId string) (*TransactionInfoResponse, error)
}
IAPAPIClient is an interface to call validation API in App Store Server API
type IAPType ¶
type IAPType string
IAPType https://developer.apple.com/documentation/appstoreserverapi/type
type JWSDecodedHeader ¶
type JWSDecodedHeader struct {
Alg string `json:"alg,omitempty"`
Kid string `json:"kid,omitempty"`
X5C []string `json:"x5c,omitempty"`
}
JWSDecodedHeader https://developer.apple.com/documentation/appstoreserverapi/jwsdecodedheader
type JWSRenewalInfoDecodedPayload ¶
type JWSRenewalInfoDecodedPayload struct {
AppAccountToken string `json:"appAccountToken,omitempty"`
AppTransactionId string `json:"appTransactionId,omitempty"`
AutoRenewProductId string `json:"autoRenewProductId"`
AutoRenewStatus AutoRenewStatus `json:"autoRenewStatus"`
Environment Environment `json:"environment"`
ExpirationIntent int32 `json:"expirationIntent"`
GracePeriodExpiresDate int64 `json:"gracePeriodExpiresDate"`
IsInBillingRetryPeriod *bool `json:"isInBillingRetryPeriod"`
OfferIdentifier string `json:"offerIdentifier"`
OfferType int32 `json:"offerType"`
OfferPeriod string `json:"offerPeriod"`
OriginalTransactionId string `json:"originalTransactionId"`
PriceIncreaseStatus *int32 `json:"priceIncreaseStatus"`
ProductId string `json:"productId"`
RecentSubscriptionStartDate int64 `json:"recentSubscriptionStartDate"`
RenewalDate int64 `json:"renewalDate"`
SignedDate int64 `json:"signedDate"`
RenewalPrice int64 `json:"renewalPrice,omitempty"`
Currency string `json:"currency,omitempty"`
OfferDiscountType OfferDiscountType `json:"offerDiscountType,omitempty"`
EligibleWinBackOfferIds []string `json:"eligibleWinBackOfferIds,omitempty"`
}
JWSRenewalInfoDecodedPayload https://developer.apple.com/documentation/appstoreserverapi/jwsrenewalinfodecodedpayload
func (JWSRenewalInfoDecodedPayload) GetAudience ¶
func (J JWSRenewalInfoDecodedPayload) GetAudience() (jwt.ClaimStrings, error)
GetAudience implements jwt.Claims.
func (JWSRenewalInfoDecodedPayload) GetExpirationTime ¶
func (J JWSRenewalInfoDecodedPayload) GetExpirationTime() (*jwt.NumericDate, error)
GetExpirationTime implements jwt.Claims.
func (JWSRenewalInfoDecodedPayload) GetIssuedAt ¶
func (J JWSRenewalInfoDecodedPayload) GetIssuedAt() (*jwt.NumericDate, error)
GetIssuedAt implements jwt.Claims.
func (JWSRenewalInfoDecodedPayload) GetIssuer ¶
func (J JWSRenewalInfoDecodedPayload) GetIssuer() (string, error)
GetIssuer implements jwt.Claims.
func (JWSRenewalInfoDecodedPayload) GetNotBefore ¶
func (J JWSRenewalInfoDecodedPayload) GetNotBefore() (*jwt.NumericDate, error)
GetNotBefore implements jwt.Claims.
func (JWSRenewalInfoDecodedPayload) GetSubject ¶
func (J JWSRenewalInfoDecodedPayload) GetSubject() (string, error)
GetSubject implements jwt.Claims.
type JWSTransaction ¶
type JWSTransaction struct {
AppTransactionId string `json:"appTransactionId,omitempty"`
TransactionID string `json:"transactionId,omitempty"`
OriginalTransactionId string `json:"originalTransactionId,omitempty"`
WebOrderLineItemId string `json:"webOrderLineItemId,omitempty"`
BundleID string `json:"bundleId,omitempty"`
ProductID string `json:"productId,omitempty"`
SubscriptionGroupIdentifier string `json:"subscriptionGroupIdentifier,omitempty"`
PurchaseDate int64 `json:"purchaseDate,omitempty"`
OriginalPurchaseDate int64 `json:"originalPurchaseDate,omitempty"`
ExpiresDate int64 `json:"expiresDate,omitempty"`
Quantity int32 `json:"quantity,omitempty"`
Type IAPType `json:"type,omitempty"`
AppAccountToken string `json:"appAccountToken,omitempty"`
InAppOwnershipType string `json:"inAppOwnershipType,omitempty"`
SignedDate int64 `json:"signedDate,omitempty"`
OfferType int32 `json:"offerType,omitempty"`
OfferPeriod string `json:"offerPeriod,omitempty"`
OfferIdentifier string `json:"offerIdentifier,omitempty"`
RevocationDate int64 `json:"revocationDate,omitempty"`
RevocationReason *int32 `json:"revocationReason,omitempty"`
IsUpgraded bool `json:"isUpgraded,omitempty"`
Storefront string `json:"storefront,omitempty"`
StorefrontId string `json:"storefrontId,omitempty"`
TransactionReason TransactionReason `json:"transactionReason,omitempty"`
Environment Environment `json:"environment,omitempty"`
Price int64 `json:"price,omitempty"`
Currency string `json:"currency,omitempty"`
OfferDiscountType OfferDiscountType `json:"offerDiscountType,omitempty"`
}
JWSTransaction https://developer.apple.com/documentation/appstoreserverapi/jwstransaction
func (JWSTransaction) GetAudience ¶
func (J JWSTransaction) GetAudience() (jwt.ClaimStrings, error)
GetAudience implements jwt.Claims.
func (JWSTransaction) GetExpirationTime ¶
func (J JWSTransaction) GetExpirationTime() (*jwt.NumericDate, error)
GetExpirationTime implements jwt.Claims.
func (JWSTransaction) GetIssuedAt ¶
func (J JWSTransaction) GetIssuedAt() (*jwt.NumericDate, error)
GetIssuedAt implements jwt.Claims.
func (JWSTransaction) GetIssuer ¶
func (J JWSTransaction) GetIssuer() (string, error)
GetIssuer implements jwt.Claims.
func (JWSTransaction) GetNotBefore ¶
func (J JWSTransaction) GetNotBefore() (*jwt.NumericDate, error)
GetNotBefore implements jwt.Claims.
func (JWSTransaction) GetSubject ¶
func (J JWSTransaction) GetSubject() (string, error)
GetSubject implements jwt.Claims.
type LastTransactionsItem ¶
type LastTransactionsItem struct {
OriginalTransactionId string `json:"originalTransactionId"`
Status AutoRenewSubscriptionStatus `json:"status"`
SignedRenewalInfo string `json:"signedRenewalInfo"`
SignedTransactionInfo string `json:"signedTransactionInfo"`
}
type MassExtendRenewalDateRequest ¶
type MassExtendRenewalDateRequest struct {
RequestIdentifier string `json:"requestIdentifier"`
ExtendByDays int32 `json:"extendByDays"`
ExtendReasonCode int32 `json:"extendReasonCode"`
ProductId string `json:"productId"`
StorefrontCountryCodes []string `json:"storefrontCountryCodes"`
}
MassExtendRenewalDateRequest https://developer.apple.com/documentation/appstoreserverapi/massextendrenewaldaterequest
type MassExtendRenewalDateStatusResponse ¶
type MassExtendRenewalDateStatusResponse struct {
RequestIdentifier string `json:"requestIdentifier"`
Complete bool `json:"complete"`
CompleteDate int64 `json:"completeDate,omitempty"`
FailedCount int64 `json:"failedCount,omitempty"`
SucceededCount int64 `json:"succeededCount,omitempty"`
}
MassExtendRenewalDateStatusResponse https://developer.apple.com/documentation/appstoreserverapi/massextendrenewaldatestatusresponse
type NotificationGetter ¶
type NotificationGetter interface {
GetAllNotificationHistory(ctx context.Context, body NotificationHistoryRequest, duration time.Duration) (responses []NotificationHistoryResponseItem, err error)
GetNotificationHistory(ctx context.Context, body NotificationHistoryRequest, paginationToken string) (rsp *NotificationHistoryResponses, err error)
GetTestNotificationStatus(ctx context.Context, testNotificationToken string) (int, []byte, error)
}
type NotificationHistoryRequest ¶
type NotificationHistoryRequest struct {
StartDate int64 `json:"startDate"`
EndDate int64 `json:"endDate"`
NotificationType appstore.NotificationTypeV2 `json:"notificationType,omitempty"`
NotificationSubtype appstore.SubtypeV2 `json:"notificationSubtype,omitempty"`
OnlyFailures bool `json:"onlyFailures"`
TransactionId string `json:"transactionId,omitempty"`
// Use transactionId instead.
// Deprecated.
OriginalTransactionId string `json:"originalTransactionId,omitempty"`
}
NotificationHistoryRequest https://developer.apple.com/documentation/appstoreserverapi/notificationhistoryrequest
type NotificationHistoryResponseItem ¶
type NotificationHistoryResponseItem struct {
SignedPayload string `json:"signedPayload"`
FirstSendAttemptResult FirstSendAttemptResult `json:"firstSendAttemptResult"`
SendAttempts []SendAttemptItem `json:"sendAttempts"`
}
NotificationHistoryResponseItem https://developer.apple.com/documentation/appstoreserverapi/notificationhistoryresponseitem
type NotificationHistoryResponses ¶
type NotificationHistoryResponses struct {
HasMore bool `json:"hasMore"`
PaginationToken string `json:"paginationToken"`
NotificationHistory []NotificationHistoryResponseItem `json:"notificationHistory"`
}
NotificationHistoryResponses https://developer.apple.com/documentation/appstoreserverapi/notificationhistoryresponse
type NotificationSender ¶
type OfferDiscountType ¶
type OfferDiscountType string
const ( OfferDiscountTypeFreeTrial OfferDiscountType = "FREE_TRIAL" OfferDiscountTypePayAsYouGo OfferDiscountType = "PAY_AS_YOU_GO" OfferDiscountTypePayUpFront OfferDiscountType = "PAY_UP_FRONT" )
type OrderLookupResponse ¶
type OrderLookupResponse struct {
Status int `json:"status"`
SignedTransactions []string `json:"signedTransactions"`
}
OrderLookupResponse https://developer.apple.com/documentation/appstoreserverapi/orderlookupresponse
type RefundLookupResponse ¶
type RefundLookupResponse struct {
HasMore bool `json:"hasMore"`
Revision string `json:"revision"`
SignedTransactions []string `json:"signedTransactions"`
}
RefundLookupResponse same as the RefundHistoryResponse https://developer.apple.com/documentation/appstoreserverapi/refundhistoryresponse
type SendAttemptItem ¶
type SendAttemptItem struct {
AttemptDate int64 `json:"attemptDate"`
SendAttemptResult FirstSendAttemptResult `json:"sendAttemptResult"`
}
SendAttemptItem https://developer.apple.com/documentation/appstoreserverapi/sendattemptitem
type SendTestNotificationResponse ¶
type SendTestNotificationResponse struct {
TestNotificationToken string `json:"testNotificationToken"`
}
SendTestNotificationResponse https://developer.apple.com/documentation/appstoreserverapi/sendtestnotificationresponse
type StatusResponse ¶
type StatusResponse struct {
Environment Environment `json:"environment"`
AppAppleId int64 `json:"appAppleId"`
BundleId string `json:"bundleId"`
Data []SubscriptionGroupIdentifierItem `json:"data"`
}
StatusResponse https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses
type StoreAPIClient ¶
type StoreAPIClient interface {
SubscriptionGetter
SubscriptionExtender
TransactionParser
NotificationGetter
NotificationSender
ConsumptionSender
AppAccountSetter
Do(ctx context.Context, method string, url string, body io.Reader) (int, []byte, error)
}
type StoreClient ¶
type StoreClient struct {
Token *Token
// contains filtered or unexported fields
}
func NewStoreClient ¶
func NewStoreClient(config *StoreConfig) *StoreClient
NewStoreClient create a appstore server api client
func NewStoreClientWithHTTPClient ¶
func NewStoreClientWithHTTPClient(config *StoreConfig, httpClient *http.Client) *StoreClient
NewStoreClientWithHTTPClient NewWithClient creates an App Store server api client with a custom http client.
func (*StoreClient) Do ¶
func (a *StoreClient) Do(ctx context.Context, method string, url string, body io.Reader) (int, []byte, error)
Do Per doc: https://developer.apple.com/documentation/appstoreserverapi#topics
func (*StoreClient) ExtendSubscriptionRenewalDate ¶
func (a *StoreClient) ExtendSubscriptionRenewalDate(ctx context.Context, originalTransactionId string, body ExtendRenewalDateRequest) (statusCode int, err error)
ExtendSubscriptionRenewalDate https://developer.apple.com/documentation/appstoreserverapi/extend_a_subscription_renewal_date
func (*StoreClient) ExtendSubscriptionRenewalDateForAll ¶
func (a *StoreClient) ExtendSubscriptionRenewalDateForAll(ctx context.Context, body MassExtendRenewalDateRequest) (statusCode int, err error)
ExtendSubscriptionRenewalDateForAll https://developer.apple.com/documentation/appstoreserverapi/extend_subscription_renewal_dates_for_all_active_subscribers
func (*StoreClient) GetALLSubscriptionStatuses ¶
func (a *StoreClient) GetALLSubscriptionStatuses(ctx context.Context, originalTransactionId string, query *url.Values) (rsp *StatusResponse, err error)
GetALLSubscriptionStatuses https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses
func (*StoreClient) GetAllNotificationHistory ¶
func (a *StoreClient) GetAllNotificationHistory(ctx context.Context, body NotificationHistoryRequest, duration time.Duration) (responses []NotificationHistoryResponseItem, err error)
GetAllNotificationHistory returns all the NotificationHistoryResponseItem using the paginationToken on behalf of you.
func (*StoreClient) GetNotificationHistory ¶
func (a *StoreClient) GetNotificationHistory(ctx context.Context, body NotificationHistoryRequest, paginationToken string) (rsp *NotificationHistoryResponses, err error)
GetNotificationHistory https://developer.apple.com/documentation/appstoreserverapi/get_notification_history Note: Notification history is available starting on June 6, 2022. Use a startDate of June 6, 2022 or later in your request.
func (*StoreClient) GetRefundHistory ¶
func (a *StoreClient) GetRefundHistory(ctx context.Context, originalTransactionId string) (responses []*RefundLookupResponse, err error)
GetRefundHistory https://developer.apple.com/documentation/appstoreserverapi/get_refund_history
func (*StoreClient) GetSubscriptionRenewalDataStatus ¶
func (a *StoreClient) GetSubscriptionRenewalDataStatus(ctx context.Context, productId, requestIdentifier string) (statusCode int, rsp *MassExtendRenewalDateStatusResponse, err error)
GetSubscriptionRenewalDataStatus https://developer.apple.com/documentation/appstoreserverapi/get_status_of_subscription_renewal_date_extensions
func (*StoreClient) GetTestNotificationStatus ¶
func (a *StoreClient) GetTestNotificationStatus(ctx context.Context, testNotificationToken string) (int, []byte, error)
GetTestNotificationStatus https://developer.apple.com/documentation/appstoreserverapi/get_test_notification_status
func (*StoreClient) GetTransactionHistory ¶
func (a *StoreClient) GetTransactionHistory(ctx context.Context, transactionId string, query *url.Values) (responses []*HistoryResponse, err error)
GetTransactionHistory https://developer.apple.com/documentation/appstoreserverapi/get_transaction_history
func (*StoreClient) GetTransactionInfo ¶
func (a *StoreClient) GetTransactionInfo(ctx context.Context, transactionId string) (rsp *TransactionInfoResponse, err error)
GetTransactionInfo https://developer.apple.com/documentation/appstoreserverapi/get_transaction_info
func (*StoreClient) LookupOrderID ¶
func (a *StoreClient) LookupOrderID(ctx context.Context, orderId string) (rsp *OrderLookupResponse, err error)
LookupOrderID https://developer.apple.com/documentation/appstoreserverapi/look_up_order_id
func (*StoreClient) ParseJWSEncodeString ¶
func (a *StoreClient) ParseJWSEncodeString(jwsEncode string) (interface{}, error)
ParseJWSEncodeString parse the jws encode string, such as JWSTransaction and JWSRenewalInfoDecodedPayload
func (*StoreClient) ParseSignedTransaction ¶
func (a *StoreClient) ParseSignedTransaction(transaction string) (*JWSTransaction, error)
ParseSignedTransaction parse one jws singed transaction for API like GetTransactionInfo
func (*StoreClient) ParseSignedTransactions ¶
func (a *StoreClient) ParseSignedTransactions(transactions []string) ([]*JWSTransaction, error)
ParseSignedTransactions parse the jws singed transactions Per doc: https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.6
func (*StoreClient) SendConsumptionInfo ¶
func (a *StoreClient) SendConsumptionInfo(ctx context.Context, originalTransactionId string, body ConsumptionRequestBody) (statusCode int, err error)
SendConsumptionInfo https://developer.apple.com/documentation/appstoreserverapi/send_consumption_information
func (*StoreClient) SendRequestTestNotification ¶
SendRequestTestNotification https://developer.apple.com/documentation/appstoreserverapi/request_a_test_notification
func (*StoreClient) SetAppAccountToken ¶
func (a *StoreClient) SetAppAccountToken(ctx context.Context, originalTransactionId string, body UpdateAppAccountTokenRequest) (statusCode int, err error)
SetAppAccountToken https://developer.apple.com/documentation/appstoreserverapi/set-app-account-token
type StoreConfig ¶
type StoreConfig struct {
KeyContent []byte // Loads a .p8 certificate
KeyID string // Your private key ID from App Store Connect (Ex: 2X9R4HXF34)
BundleID string // Your app’s bundle ID
Issuer string // Your issuer ID from the Keys page in App Store Connect (Ex: "57246542-96fe-1a63-e053-0824d011072a")
Sandbox bool // default is Production
TokenIssuedAtFunc func() int64 // The token’s creation time func. Default is current timestamp.
TokenExpiredAtFunc func() int64 // The token’s expiration time func. Default is one hour later.
// internal variables
HostDebug string // can be used to override the host for testing
}
type SubscriptionExtender ¶
type SubscriptionGetter ¶
type SubscriptionGetter interface {
GetALLSubscriptionStatuses(ctx context.Context, originalTransactionId string, query *url.Values) (rsp *StatusResponse, err error)
GetRefundHistory(ctx context.Context, originalTransactionId string) (responses []*RefundLookupResponse, err error)
GetSubscriptionRenewalDataStatus(ctx context.Context, productId, requestIdentifier string) (statusCode int, rsp *MassExtendRenewalDateStatusResponse, err error)
GetTransactionHistory(ctx context.Context, transactionId string, query *url.Values) (responses []*HistoryResponse, err error)
GetTransactionInfo(ctx context.Context, transactionId string) (rsp *TransactionInfoResponse, err error)
LookupOrderID(ctx context.Context, orderId string) (rsp *OrderLookupResponse, err error)
}
type SubscriptionGroupIdentifierItem ¶
type SubscriptionGroupIdentifierItem struct {
SubscriptionGroupIdentifier string `json:"subscriptionGroupIdentifier"`
LastTransactions []LastTransactionsItem `json:"lastTransactions"`
}
type Token ¶
type Token struct {
sync.Mutex
KeyContent []byte // Loads a .p8 certificate
KeyID string // Your private key ID from App Store Connect (Ex: 2X9R4HXF34)
BundleID string // Your app’s bundle ID
Issuer string // Your issuer ID from the Keys page in App Store Connect (Ex: "57246542-96fe-1a63-e053-0824d011072a")
Sandbox bool // default is Production
IssuedAtFunc func() int64 // The token’s creation time func. Default is current timestamp.
ExpiredAtFunc func() int64 // The token’s expiration time func.
// internal variables
AuthKey *ecdsa.PrivateKey // .p8 private key
Bearer string // Authorized bearer token
ExpiredAt int64 // The token’s expiration time, in UNIX time
}
Token represents an Apple Provider Authentication Token (JSON Web Token).
func (*Token) GenerateIfExpired ¶
GenerateIfExpired checks to see if the token is about to expire and generates a new token.
func (*Token) WithConfig ¶
func (t *Token) WithConfig(c *StoreConfig)
type TransactionInfoResponse ¶
type TransactionInfoResponse struct {
SignedTransactionInfo string `json:"signedTransactionInfo"`
}
TransactionInfoResponse https://developer.apple.com/documentation/appstoreserverapi/transactioninforesponse
type TransactionParser ¶
type TransactionParser interface {
ParseSignedTransactions(transactions []string) ([]*JWSTransaction, error)
ParseJWSEncodeString(jwsEncode string) (interface{}, error)
ParseSignedTransaction(transaction string) (*JWSTransaction, error)
}
type TransactionReason ¶
type TransactionReason string
TransactionReason indicates the cause of a purchase transaction, https://developer.apple.com/documentation/appstoreservernotifications/transactionreason
type UpdateAppAccountTokenRequest ¶
type UpdateAppAccountTokenRequest struct {
AppAccountToken string `json:"appAccountToken"`
}