def procShopDo(self, master_id, buy_count, payment_id): """ショップ実行. 決済情報を確認して課金レコードを作成. """ try: mid = int(master_id) buynum = int(buy_count) if not (0 < buynum <= Defines.BUY_NUM_MAX): raise except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) self.set_shop_masterid(mid) now = OSAUtil.get_now() # プレイヤー情報. v_player = self.getViewerPlayer() # 購入可能かをチェック. master = self.getShopMaster() buydata = self.getShopBuyData(True) if buydata is None: mgr = db_util.run_in_transaction(Handler.tr_write_buydata, v_player.id, master.id) mgr.write_end() buydata = mgr.get_wrote_model(ShopItemBuyData, ShopItemBuyData.makeID(v_player.id, master.id)) sku_id = '%s%s' % (Handler.PAYMENT_TYPE_SHOP, master_id) item = PaymentItem() item.itemId = sku_id item.unitPrice = master.price item.quantity = buynum self.checkPaymentRecord(payment_id, [item]) if self.response.isEnd: return model_mgr = self.getModelMgr() if not BackendApi.check_buyable_shopitem(model_mgr, v_player, master, buydata, buynum, now, using=settings.DB_READONLY): if settings_sub.IS_LOCAL: raise CabaretError(u'購入できない') # リダイレクトせずにステータス500を返す #url = UrlMaker.shop() #self.appRedirect(self.makeAppLinkUrlRedirect(url)) self.response.clear() self.response.set_status(500) self.response.end() return # ここまで来たら購入出来るのが確定.. item.itemId = master.id paymentdata = PaymentData() paymentdata.paymentId = payment_id paymentdata.status = PaymentData.Status.START paymentdata.paymentItems = [item] mgr = db_util.run_in_transaction(Handler.tr_create_entry_shop, v_player, paymentdata, now) mgr.write_end()
def process(self): self.__args = self.getUrlArgs('/shopdo/') try: mid = int(self.__args.get(0)) buynum = int(self.request.get(Defines.URLQUERY_NUMBER)) if not (0 < buynum <= Defines.BUY_NUM_MAX): raise except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) self.set_masterid(mid) self.__now = OSAUtil.get_now() # プレイヤー情報. v_player = self.getViewerPlayer() # 購入可能かをチェック. master = self.getShopMaster() buydata = self.getShopBuyData(True) if buydata is None: mgr = db_util.run_in_transaction(Handler.tr_write_buydata, v_player.id, master.id) mgr.write_end() buydata = mgr.get_wrote_model( ShopItemBuyData, ShopItemBuyData.makeID(v_player.id, master.id)) model_mgr = self.getModelMgr() if not BackendApi.check_buyable_shopitem(model_mgr, v_player, master, buydata, buynum, self.__now, using=settings.DB_READONLY): if settings_sub.IS_LOCAL: raise CabaretError(u'購入できない') url = UrlMaker.shop() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return if master.consumetype == Defines.ShopConsumeType.PAYMENT: self.proc_payment(master, buynum) else: self.proc_free(master, buynum)