Esempio n. 1
0
 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()
Esempio n. 2
0
    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)