예제 #1
0
 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
예제 #2
0
    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)
예제 #3
0
    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)