レシートの検証で sandbox.itunes.apple.com/verifyReceipt に POST リクエストを投げてたんだけど(この度はアプリ内実装ではなくサーバサイドのPHPプログラム)、cURL によるレスポンスが空っていう現象に遭遇。

リリーステストをしたのは数ヶ月前で、その時は何の問題もなく検証結果( receipt, status = 0 )を受け取ってたよ(´・ω・`)

複数のサービスを詰め込んでる開発環境ってヤツは困り者ですな…。


結論から言うと cURL の CA 証明書の検証で認証エラーが起こってる
なお、この問題は解決に至っておらず(開発環境が自由じゃないから放置プレイ)、認証しないことでレスポンスの受け取りだけ確認してオッケーとした。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // サーバ証明書の検証を行わないオプションをセット


Jailbreakしてるの実機が原因か?とか考えて昨日リストアしたっていうのに問題は変わらなかったw

てか、iOS 5からシミュレータでも確認できんのかな?

テストアカウントも課金コースの登録も正常だし、そもそもレシートはちゃんと受けてる訳で、その検証だけが出来ないっていう状況。

POST の方法を変えて file_get_contents() にて POST してみると…


レスポンス正常に受け取るし! 


receipt, status 共に問題なし。なんてこったい、原因が cURL だなんて…。

cURL の connection をデバッグしてみたら、結論に述べた証明書の検証でエラーが起こってたっていうね。

オプションを指定して証明書の検証を行わないと cURL でも問題なく。


原因の切り分けに経験不足が祟ったー。

証明書のディレクトリとか指定してみたけど結果は変わらないし、まぁその指定も適切じゃない気もするし、なんかサーバ設定が悪さしてる?んだろうね(万が一、Apple Developer がおかしいなんてこともある)
 

プログラムからサーバまで幅広い知識が求められるっていうのは、、、分業を成せない現状があるからで、その辺を担ってくれるほどの人員と会社の成長を遂げるしかないのか。