package appstore import ( "encoding/base64" "encoding/json" "fmt" "strings" ) type SignedTansactionInfo struct { TransactionId string `json:"transactionId,omitempty"` OriginalTransactionId string `json:"originalTransactionId,omitempty"` BundleId string `json:"bundleId,omitempty"` ProductId string `json:"productId,omitempty"` PurchaseDate int `json:"purchaseDate,omitempty"` OriginalPurchaseDate int `json:"originalPurchaseDate,omitempty"` Quantity int `json:"quantity,omitempty"` Type string `json:"type,omitempty"` InAppOwnershipType string `json:"inAppOwnershipType,omitempty"` SignedDate int `json:"signedDate,omitempty"` RevocationReason int `json:"revocationReason,omitempty"` RevocationDate int `json:"revocationDate,omitempty"` Environment string `json:"environment,omitempty"` TransactionReason string `json:"transactionReason,omitempty"` Storefront string `json:"storefront,omitempty"` StorefrontId string `json:"storefrontId,omitempty"` } // 解析苹果返回的receiptInof func ParseReceiptInfo(signedPayload string) (*SignedTansactionInfo, error) { segments := strings.Split(signedPayload, ".") payloadBytes, err := base64.RawURLEncoding.DecodeString(segments[1]) if err != nil { return nil, fmt.Errorf("error decoding payload: %w", err) } var info SignedTansactionInfo if err := json.Unmarshal(payloadBytes, &info); err != nil { return nil, fmt.Errorf("error unmarshalling payload: %w", err) } return &info, nil }