44 lines
1.6 KiB
Go
44 lines
1.6 KiB
Go
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
|
|
}
|