LoginSignup
1
1

More than 5 years have passed since last update.

in-app purchaseの自動更新購読型(Auto-Renewing subscription)の期限切れについて(Go言語)

Last updated at Posted at 2017-04-07

in-app purchaseの自動更新購読型の期限切れを調べるプログラムを書いた際にミリ秒と秒を間違えてハマったのでメモです。

ハマったところ

expires_date_msのフィールドの値と現在時刻のミリ秒の値を比較して期限切れ有無を調べるプログラムを書いたけどGo言語のtime.Now().Unix()の値は秒だった。
Goのドキュメントをよく読んでなかったせいで妙にハマってしまった・・・。

対処

expires_date_msの値を1000で割って比較する。
ruby製の課金ライブラリveniceもミリ秒を秒に直して使用してる様子。
https://github.com/nomad/venice/blob/d2d94b04cfd544c80b61377871763420e23a54d3/lib/venice/in_app_receipt.rb#L55

環境と使ったライブラリ

言語
Go 1.7.4
ライブラリ:
dogenzaka/go-iap
※レシート検証APIへレシートをポストするためのライブラリ。今回はAppStoreのレシート検証APIを叩くために使用

APIで返ってくるレシートの形式

{
      "quantity": "1",
      "product_id": "com.test.autorenewable",
      "transaction_id": "1000000288220000",
      "original_transaction_id": "1000000288220000",
      "is_trial_period": "false",
      "app_item_id": "",
      "version_external_identifier": "",
      "web_order_line_item_id": "1000000034760000",
      "purchase_date": "2017-04-06 10:14:19 Etc/GMT",
      "purchase_date_ms": "1491473659000",
      "purchase_date_pst": "2017-04-06 03:14:19 America/Los_Angeles",
      "original_purchase_date": "2017-04-06 10:09:20 Etc/GMT",
      "original_purchase_date_ms": "1491473360000",
      "original_purchase_date_pst": "2017-04-06 03:09:20 America/Los_Angeles",
      "expires_date": "2017-04-06 10:19:19 Etc/GMT",
      "expires_date_ms": "1491473959000",
      "expires_date_pst": "2017-04-06 03:19:19 America/Los_Angeles",
      "cancellation_date": "",
      "cancellation_date_ms": "",
      "cancellation_date_pst": ""
}

書いたプログラム

// タイムゾーンをEtc/GMTにします。
loc, err := time.LoadLocation("Etc/GMT")
if err != nil {
    loc = time.FixedZone("Etc/GMT", 9*60*60)
}
// レシートの期限が切れていないか確認
// receipt.ExpiresDateMsがexpires_date_msになります。
if i, err := strconv.ParseInt(receipt.ExpiresDateMs, 10, 64); err != nil || time.Now().In(loc).Unix() > (i/1000) {
  // ここにレシートの期限が切れていた場合の処理を書きます。
}

注意

書いといてなんですが、課金処理はいまいち自信なしです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1