111 lines
3.3 KiB
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": "₩"
|
|
// }
|