iPhoneアプリ、アイテム課金のレシート送信部分サンプル
ノイズまみれですが、こんな感じで申請出そうと思います。
しかしまだ前回の更新がストアに反映されてないので、それが終わるまでバージョンアップできませんw
2か所送信してるのは、開発と本番両方送信しないと審査はじかれるらしいから。果たしてうまくいくだろうか。
作ってるゲームアプリ → http://goo.gl/knd4G8
function sendVerifyReceipt(t:Transaction):void{ purchaseLog = purchaseLog + "identifier:"+t.identifier+"\n"; purchaseLog = purchaseLog + "date:"+t.date+"\n"; purchaseLog = purchaseLog + "receipt:"+t.receipt+"\n"; analiticsEvent("Purachase_iOS_sendVerifyReceipt", productId, _so_data.userHash+"@"+_so_data.userName+"_"+purchaseLog); var encodedReceipt:String = Base64.encode(t.receipt); //レシートデータをAppleサーバーに問い合わせる際 //サンドボックス用のURL(https://sandbox.itunes.apple.com/verifyReceipt) //本番用のURL (https://buy.itunes.apple.com/verifyReceipt)の2種類が存在します。 var req:URLRequest = new URLRequest("https://sandbox.itunes.apple.com/verifyReceipt"); req.method = URLRequestMethod.POST; req.data = "{\"receipt-data\" : \""+ encodedReceipt+"\"}"; var loader:URLLoader = new URLLoader(req); loader.load(req); loader.addEventListener(Event.COMPLETE,function(e:Event):void{ //Toast2("★★LOAD COMPLETE: " + loader.data, root, NaN); analiticsEvent("Purachase_iOS_dev_LOAD COMPLETE", productId, _so_data.userHash+"@"+_so_data.userName+"_"+loader.data.toString()); if(loader.data.toString().length > 100){ purchaseLog = purchaseLog + "verifyReceipt:"+loader.data+"\n"; callBack(); endLoader(); savePurchaseLog(purchaseLog); } removeEvents(); }); loader.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent){ // Toast2("開発のIOエラーです e="+e + "/e.text = "+e.text+"/#2032 ストリームエラーなら、Wifiや電波の設定ミス? "); analiticsEvent("Purachase_iOS_dev_IO_ERROR", productId, _so_data.userHash+"@"+_so_data.userName+"_"+e.text); purchaseLog = purchaseLog + "IO_ERROR:"+e.text+"\n"; callBack(); endLoader(); savePurchaseLog(purchaseLog); removeEvents(); }); //本番用の通信 var req2:URLRequest = new URLRequest("https://buy.itunes.apple.com/verifyReceipt"); req2.method = URLRequestMethod.POST; req2.data = "{\"receipt-data\" : \""+ encodedReceipt+"\"}"; var loader2:URLLoader = new URLLoader(req2); // loader2.load(req2); loader2.addEventListener(Event.COMPLETE,function(e:Event):void{ //Toast2("★★本番: " + loader2.data); analiticsEvent("Purachase_iOS_honban_LOAD COMPLETE", productId, _so_data.userHash+"@"+_so_data.userName+"_"+loader2.data.toString()); if(loader2.data.toString().length > 100){ ////Toast2("★★LOAD COMPLETE: " + loader2.data, root, NaN); purchaseLog = purchaseLog + "verifyReceipt:"+loader2.data+"\n"; callBack(); endLoader(); savePurchaseLog(purchaseLog); } removeEvents(); }); loader2.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent){ //trace("IOエラーです ="+url + "/e.text = "+e.text+"/#2032 ストリームエラーなら、Wifiや電波の設定ミス? "); Toast2("本番のIOエラーです e="+e + "/e.text = "+e.text+"/#2032 ストリームエラーなら、Wifiや電波の設定ミス? "); analiticsEvent("Purachase_iOS_honban_IO_ERROR", productId, _so_data.userHash+"@"+_so_data.userName+"_"+e.text); purchaseLog = purchaseLog + "IO_ERROR:"+e.text+"\n"; callBack(); endLoader(); savePurchaseLog(purchaseLog); removeEvents(); }); ins.finishTransaction(t.identifier); }