Files
gocommon/iap/galaxystore.go

111 lines
3.3 KiB
Go

package iap
import (
"encoding/json"
"errors"
"io/ioutil"
"net/http"
"strings"
)
type GalaxyStoreIAPVerifier struct {
ItemId string `json:"itemId"`
PaymentId string `json:"paymentId"`
OrderId string `json:"orderId"`
PackageName string `json:"packageName"`
ItemName string `json:"itemName"`
ItemDesc string `json:"itemDesc"`
PurchaseDate string `json:"purchaseDate"`
PaymentAmount string `json:"paymentAmount"`
Status string `json:"status"`
PaymentMethod string `json:"paymentMethod"`
Mode string `json:"mode"`
ConsumeYN string `json:"consumeYN"`
ConsumeDate string `json:"consumeDate"`
ConsumeDeviceModel string `json:"consumeDeviceModel"`
PassThroughParam string `json:"passThroughParam"`
CurrencyCode string `json:"currencyCode"`
CurrencyUnit string `json:"currencyUnit"`
VerificationLog string
}
func (verifer *GalaxyStoreIAPVerifier) Verify(purchaseId string, paymentId string, developerPayload string, itemId string, packageName string) (bool, error) {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://iap.samsungapps.com/iap/v6/receipt?purchaseID="+purchaseId, nil)
if err != nil {
return false, err
}
req.Header.Add("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
return false, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return false, err
}
json.Unmarshal(body, verifer)
verifer.VerificationLog = string(body)
if verifer.Status != "success" {
return false, errors.New("Status is wrong:" + verifer.Status)
}
if verifer.ItemId != itemId {
return false, errors.New("itemId is different")
}
if verifer.PackageName != packageName {
return false, errors.New("packageName is different")
}
if !strings.EqualFold(verifer.PassThroughParam, developerPayload) {
return false, errors.New("developerPayload is different : " + verifer.PassThroughParam + "/" + developerPayload)
}
if verifer.PaymentId != paymentId {
return false, errors.New("paymentId is different")
}
return true, nil
}
// Owned Item - mItemId: kd_currency_gold_75
// Owned Item - mItemName: Gold x75
// Owned Item - mItemPrice: 1300.000000
// Owned Item - mItemPriceString: ₩1,300
// Owned Item - mCurrencyUnit: ₩
// Owned Item - mCurrencyCode: KRW
// Owned Item - mItemDesc: 75 Gold
// Owned Item - mPaymentId: TPMTID20240208KR32371566
// Owned Item - mPurchaseId: 34c50c9677e8e837e7b7a6eaac37a385fb7e4b36437820825bc7d824647c6aa7
// Owned Item - mPurchaseDate: -2147483648
// Owned Item - mPassThroughParam: testpayload
// {
// "itemId": "kd_currency_gold_75",
// "paymentId": "TPMTID20240208KR32367386",
// "orderId": "P20240208KR32367386",
// "packageName": "com.yjmgames.kingdom.gal",
// "itemName": "Gold x75",
// "itemDesc": "75 Gold",
// "purchaseDate": "2024-02-08 02:33:24",
// "paymentAmount": "1300.0",
// "status": "success",
// "paymentMethod": "Credit Card",
// "mode": "TEST",
// "consumeYN": "Y",
// "consumeDate": "2024-02-08 02:52:10",
// "consumeDeviceModel": "SM-S918N",
// "passThroughParam": "testpayload",
// "currencyCode": "KRW",
// "currencyUnit": "₩"
// }