Documentation ¶
Index ¶
- Constants
- Variables
- type Cert
- type ConsumptionRequestBody
- type ExtendReasonCode
- type ExtendRenewalDateRequest
- type FirstSendAttemptResult
- type HistoryResponse
- type JWSDecodedHeader
- type JWSRenewalInfoDecodedPayload
- type JWSTransaction
- type LastTransactionsItem
- type NotificationHistoryRequest
- type NotificationHistoryResponseItem
- type NotificationHistoryResponses
- type OrderLookupResponse
- type RefundLookupResponse
- type SendTestNotificationResponse
- type StatusResponse
- 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) GetALLSubscriptionStatuses(ctx context.Context, originalTransactionId string) (rsp *StatusResponse, err error)
- func (a *StoreClient) GetNotificationHistory(ctx context.Context, body NotificationHistoryRequest) (responses []NotificationHistoryResponseItem, err error)
- func (a *StoreClient) GetRefundHistory(ctx context.Context, originalTransactionId string) (responses []*RefundLookupResponse, err error)
- func (a *StoreClient) GetTestNotificationStatus(ctx context.Context, testNotificationToken string) (int, []byte, error)
- func (a *StoreClient) GetTransactionHistory(ctx context.Context, originalTransactionId string, query *url.Values) (responses []*HistoryResponse, err error)
- func (a *StoreClient) LookupOrderID(ctx context.Context, orderId string) (rsp *OrderLookupResponse, err 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)
- type StoreConfig
- type SubscriptionGroupIdentifierItem
- type Token
Constants ¶
const ( UndeclaredExtendReasonCode = iota CustomerSatisfaction OtherReasons ServiceIssueOrOutage )
const ( HostSandBox = "https://api.storekit-sandbox.itunes.apple.com" HostProduction = "https://api.storekit.itunes.apple.com" PathLookUp = "/inApps/v1/lookup/{orderId}" PathTransactionHistory = "/inApps/v1/history/{originalTransactionId}" PathRefundHistory = "/inApps/v2/refund/lookup/{originalTransactionId}" PathGetALLSubscriptionStatus = "/inApps/v1/subscriptions/{originalTransactionId}" PathConsumptionInfo = "/inApps/v1/transactions/consumption/{originalTransactionId}" PathExtendSubscriptionRenewalDate = "/inApps/v1/subscriptions/extend/{originalTransactionId}" PathGetNotificationHistory = "/inApps/v1/notifications/history" PathRequestTestNotification = "/inApps/v1/notifications/test" PathGetTestNotificationStatus = "/inApps/v1/notifications/test/{testNotificationToken}" )
Variables ¶
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 ConsumptionRequestBody ¶
type ConsumptionRequestBody struct { AccountTenure int `json:"accountTenure"` AppAccountToken string `json:"appAccountToken"` ConsumptionStatus int `json:"consumptionStatus"` CustomerConsented bool `json:"customerConsented"` DeliveryStatus int `json:"deliveryStatus"` LifetimeDollarsPurchased int `json:"lifetimeDollarsPurchased"` LifetimeDollarsRefunded int `json:"lifetimeDollarsRefunded"` Platform int `json:"platform"` PlayTime int `json:"playTime"` SampleContentProvided bool `json:"sampleContentProvided"` UserStatus int `json:"userStatus"` }
ConsumptionRequestBody https://developer.apple.com/documentation/appstoreserverapi/consumptionrequest
type ExtendReasonCode ¶
type ExtendReasonCode int
https://developer.apple.com/documentation/appstoreserverapi/extendreasoncode
type ExtendRenewalDateRequest ¶
type ExtendRenewalDateRequest struct { ExtendByDays int `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" )
type HistoryResponse ¶
type HistoryResponse struct { AppAppleId int `json:"appAppleId"` BundleId string `json:"bundleId"` Environment string `json:"environment"` HasMore bool `json:"hasMore"` Revision string `json:"revision"` SignedTransactions []string `json:"signedTransactions"` }
HistoryResponse https://developer.apple.com/documentation/appstoreserverapi/historyresponse
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 { }
type JWSTransaction ¶
type JWSTransaction struct { 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 int64 `json:"quantity,omitempty"` Type string `json:"type,omitempty"` AppAccountToken string `json:"appAccountToken,omitempty"` InAppOwnershipType string `json:"inAppOwnershipType,omitempty"` SignedDate int64 `json:"signedDate,omitempty"` OfferType int64 `json:"offerType,omitempty"` OfferIdentifier string `json:"offerIdentifier,omitempty"` RevocationDate int64 `json:"revocationDate,omitempty"` RevocationReason int `json:"revocationReason,omitempty"` IsUpgraded bool `json:"isUpgraded,omitempty"` }
JWSTransaction https://developer.apple.com/documentation/appstoreserverapi/jwstransaction
func (JWSTransaction) Valid ¶
func (J JWSTransaction) Valid() error
type LastTransactionsItem ¶
type NotificationHistoryRequest ¶
type NotificationHistoryRequest struct { StartDate int64 `json:"startDate"` EndDate int64 `json:"endDate"` OriginalTransactionId string `json:"originalTransactionId,omitempty"` NotificationType appstore.NotificationTypeV2 `json:"notificationType,omitempty"` NotificationSubtype appstore.SubtypeV2 `json:"notificationSubtype,omitempty"` }
NotificationHistoryRequest https://developer.apple.com/documentation/appstoreserverapi/notificationhistoryrequest
type NotificationHistoryResponseItem ¶
type NotificationHistoryResponseItem struct { SignedPayload string `json:"signedPayload"` FirstSendAttemptResult FirstSendAttemptResult `json:"firstSendAttemptResult"` }
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 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 https://developer.apple.com/documentation/appstoreserverapi/refundlookupresponse
type SendTestNotificationResponse ¶
type SendTestNotificationResponse struct {
TestNotificationToken string `json:"testNotificationToken"`
}
SendTestNotificationResponse https://developer.apple.com/documentation/appstoreserverapi/sendtestnotificationresponse
type StatusResponse ¶
type StatusResponse struct { Environment string `json:"environment"` AppAppleId int `json:"appAppleId"` BundleId string `json:"bundleId"` Data []SubscriptionGroupIdentifierItem `json:"data"` }
StatusResponse https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses
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
NewWithClient creates a appstore 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)
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) GetALLSubscriptionStatuses ¶
func (a *StoreClient) GetALLSubscriptionStatuses(ctx context.Context, originalTransactionId string) (rsp *StatusResponse, err error)
GetALLSubscriptionStatuses https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses
func (*StoreClient) GetNotificationHistory ¶
func (a *StoreClient) GetNotificationHistory(ctx context.Context, body NotificationHistoryRequest) (responses []NotificationHistoryResponseItem, 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) 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, originalTransactionId string, query *url.Values) (responses []*HistoryResponse, err error)
GetTransactionHistory https://developer.apple.com/documentation/appstoreserverapi/get_transaction_history
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) 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
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 }
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 // internal variables AuthKey *ecdsa.PrivateKey // .p8 private key ExpiredAt int64 // The token’s expiration time, in UNIX time. Tokens that expire more than 60 minutes after the time in iat are not valid (Ex: 1623086400) Bearer string // Authorized bearer token }
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)