def checkPaymentRecord(self): """課金履歴. """ v_player = self.getViewerPlayer() uid = v_player.id kind = BackendApi.check_payment_lostrecords(uid) if kind in ('gacha', 'shop'): # 課金履歴へのリンク. url = OSAUtil.addQuery(UrlMaker.support_paymentlist(), '_kind', kind) self.html_param['url_recov_payment'] = self.makeAppLinkUrl(url) self.__news_num += 1
def checkPayment(self): """課金レコードチェック. """ v_player = self.getViewerPlayer() kind = BackendApi.check_payment_lostrecords(v_player.id) if kind == 'gacha': modellist = BackendApi.get_gachapaymententry_list( v_player.id, False, 1, 0, using=settings.DB_READONLY) def updateGacha(paymentId, status): if status == PaymentData.Status.COMPLETED: # 購入書き込み. self.writePlayPaymentGacha(paymentId) elif status == PaymentData.Status.CANCEL: # キャンセル書き込み. self.writeGachaCancel(paymentId) else: # タイムアウト書き込み. self.writeGachaTimeout(paymentId) update = updateGacha elif kind == 'shop': modellist = BackendApi.get_shoppaymententry_list( v_player.id, False, 1, 0, using=settings.DB_READONLY) def updateShop(paymentId, status): if status == PaymentData.Status.COMPLETED: # 購入書き込み. self.writeBuyItem(paymentId) elif status == PaymentData.Status.CANCEL: # キャンセル書き込み. self.writeBuyCancel(paymentId) else: # タイムアウト書き込み. self.writeBuyTimeOut(paymentId) update = updateShop else: return if not modellist: BackendApi.delete_payment_lostrecords_flag(v_player.id) return paymentId = modellist[0].id status = BackendApi.get_restful_paymentrecord_status(self, paymentId) update(paymentId, status)
def procPayment(self): model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() master = self.getGachaMaster() playcount = self.getGachaPlayCount() seatplaydata = self.getSeatPlayData() is_first = 0 < BackendApi.get_gacha_firstplay_restnum(master, playcount, self.__now, seatplaydata=seatplaydata) continuity = BackendApi.get_gacha_continuity_num(self.getModelMgr(), master, v_player, is_first) stock = BackendApi.get_gacha_stock(model_mgr, master, playcount, using=settings.DB_READONLY) if stock is not None and stock < 1: # これ以上引き抜けない. url = OSAUtil.addQuery(UrlMaker.gacha(), Defines.URLQUERY_GTYPE, Defines.GachaConsumeType.GTYPE_NAMES[master.consumetype]) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return elif master.consumetype == Defines.GachaConsumeType.MINI_SEAT: # ミニシートは1周だけ. seatplaycount = self.getSeatPlayCount() if seatplaycount and 0 < seatplaycount.lap: url = OSAUtil.addQuery(UrlMaker.gacha(), Defines.URLQUERY_GTYPE, Defines.GachaConsumeType.GTYPE_NAMES[master.consumetype]) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return elif not self.checkStep(master, playcount): url = OSAUtil.addQuery(UrlMaker.gacha(), Defines.URLQUERY_GTYPE, Defines.GachaConsumeType.GTYPE_NAMES[master.consumetype]) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # ここまで来たら購入出来るのが確定.. if settings_sub.IS_LOCAL: # ローカル動作確認用に課金トランザクション情報を作成. paymentdata = PaymentData() paymentdata.paymentId = "%s%s" % (v_player.dmmid, OSAUtil.makeSessionID()) paymentdata.status = PaymentData.Status.START item = PaymentItem() item.itemId = master.id item.quantity = 1 paymentdata.paymentItems = [item] url = UrlMaker.gachapay() url = OSAUtil.addQuery(url, 'paymentId', paymentdata.paymentId) url = OSAUtil.addQuery(url, Defines.URLQUERY_STATE, PaymentData.Status.COMPLETED) transactionUrl = self.makeAppLinkUrlRedirect(url) else: kind = BackendApi.check_payment_lostrecords(v_player.id) if kind == 'gacha': modellist = BackendApi.get_gachapaymententry_list(v_player.id, False, 1, 0, using=settings.DB_READONLY) def updateGacha(paymentId, status): if status == PaymentData.Status.COMPLETED: # 購入書き込み. self.writePlayPaymentGacha(paymentId) elif status == PaymentData.Status.CANCEL: # キャンセル書き込み. self.writeGachaCancel(paymentId) elif status == PaymentData.Status.TIMEOUT: # タイムアウト書き込み. self.writeGachaTimeout(paymentId) if modellist: for model in modellist: paymentId = model.id status = BackendApi.get_restful_paymentrecord_status(self, paymentId) updateGacha(paymentId, status) else: BackendApi.delete_payment_lostrecords_flag(v_player.id) data = PaymentPostRequestData() data.callbackUrl = self.makeAppLinkUrl(UrlMaker.gachapay()) data.finishPageUrl = self.makeAppLinkUrl(UrlMaker.gachaanim(master.id, v_player.req_confirmkey)) data.message = master.text price = BackendApi.get_consumevalue(master, continuity, is_first, playcount, seatplaydata=seatplaydata) if self.is_pc: image_url = self.makeAppLinkUrlStatic('img/pc/'+master.pay_thumb_pc) else: image_url = self.makeAppLinkUrlImgMedium(master.pay_thumb) data.addItem(master.id, master.name, price, 1, image_url, master.text) request = self.osa_util.makeApiRequest(ApiNames.PaymentPost, data) self.addAppApiRequest('payment_start', request) ret_data = self.execute_api() paymentresult = ret_data['payment_start'].get() transactionUrl = paymentresult.transactionUrl # PostのレスポンスデータはUrlとステータスしか入ってない... item = PaymentItem() item.itemId = master.id item.quantity = 1 paymentdata = PaymentData() paymentdata.paymentId = paymentresult.paymentId paymentdata.status = paymentresult.status paymentdata.paymentItems = data._paymentItems mgr = db_util.run_in_transaction(Handler.tr_create_entry, v_player, paymentdata, continuity, self.__now) mgr.write_end() self.appRedirect(transactionUrl)