Exemplo n.º 1
0
  	async def prepay(self, ktv_id, openid, order_id, fee=0):
		try:
			 params = {
				"op": "fastpay",
				'erpid': order_id,
				"ktvid": ktv_id,  #这个参数是一定不能丢的
				"paytype": "WX",
				"action": "GZH",
				"other":'namegame',
				"data": json.dumps({
					"paraBody": '您支付了%s' % (fee / 100),
					"paraTotalFee": fee,
					"paraOpenId": openid,
				  }),
			  }

		logging.error('prepay params: %s' % params)

		url = 'http://pay.ktvsky.com/wx'
		http_client = utils.get_async_client()
		request = httpclient.HTTPRequest(url_concat(url, params), method='POST', body='',
							headers={'Connection': 'keep-alive'}, connect_timeout=10,
							request_timeout=10)

		r = await utils.fetch(http_client, request)
		r = json.loads(bytes(r.body).decode())

		logging.info(r)
		ctrl.web.update_namegame_order(data=dict(order_id=order_id, state=3, wx_pay_id=r['order']))
		  	return r
Exemplo n.º 2
0
    async def _request_orders(self, ktv_id, term_id, pay_type, start_date, end_date, page, page_size, has_pn=None):
        if pay_type == 'wechat':
            url = APIS['account_order'].format(ktv_id=ktv_id)
        elif pay_type == 'alipay':
            url = APIS['ali_account_order'].format(ktv_id=ktv_id)
        elif pay_type == 'pos':
            url = APIS['pos_account_order'].format(ktv_id=ktv_id)
        elif pay_type == 'deposit':
            url = APIS['withdraw_history'].format(ktv_id=ktv_id)
        else:
            raise utils.APIError(errcode=10001)

        http_client = utils.get_async_client()

        params = {
            'term_id': term_id,
            'start_date': start_date,
            'end_date': end_date
        }

        if has_pn:
            params.update({
                'pn': page,
                'size': page_size,
                'has_pn': True
            })

        request = utils.http_request(url_concat(url, params))
        response = await http_client.fetch(request)
        orders = json.loads(response.body.decode())
        return orders
Exemplo n.º 3
0
    	async def pay_query(self, order_id, loop=1):
        		logging.info("\n\nloop=%s, order_id=%s"%(loop, order_id))

        		order = ctrl.web.get_by_order(order_id)
        		if not order:
            			raise utils.APIError(errcode=10001)
        		try:
	            		params = {
				"op": "query",
				"ktvid": order['ktv_id'],  # 专用于分享订单的打赏
				"paytype": 'WX',  # ALI or WX
				"data": json.dumps({
					"paraOutTradeNo": order['wx_pay_id'],
				}),
	            		}

	            		url = 'http://pay.ktvsky.com/wx'
	            		http_client = utils.get_async_client()
	            		request = httpclient.HTTPRequest(url_concat(url, params), method='POST', body='',
	                			headers={'Connection': 'keep-alive'}, connect_timeout=10, request_timeout=10)

			res = await utils.fetch(http_client, request)
			res = json.loads(bytes(res.body).decode())
			logging.info(res)

	            		if utils.is_success_pay('wx', res):
	            			ctrl.web.update_namegame_order(data=dict(order_id=order_id, state=2, wx_pay_id=res['transaction_id']))
	            			res['is_pay'] = 1
	            			return res
Exemplo n.º 4
0
 async def update_bank_info(self, ktv_id, args):
     http_client = utils.get_async_client()
     params = urlencode(args)
     request = utils.http_request(APIS['bank'].format(ktv_id=ktv_id), method='POST', body=params)
     response = await http_client.fetch(request)
     response = json.loads(response.body.decode())
     return response
Exemplo n.º 5
0
 async def get_ktv_pos(self, ktv_id):
     req_url = APIS['ktv_pos'].format(ktv_id=ktv_id)
     http_client = utils.get_async_client()
     request = utils.http_request(req_url)
     response = await http_client.fetch(request)
     pos_list = json.loads(response.body.decode())
     return pos_list
Exemplo n.º 6
0
 async def insert_ser_info(self, **params):
     ktv_ser_info = self.api.insert_ser_info(**params)
     tradeno = ktv_ser_info['id']
     params_api = {'op': 'savektvpayinfo', 'tradeno': tradeno}
     http_client = utils.get_async_client()
     http_request = utils.http_request(
         url_concat(APIS['sub_ktv_service_info'], params_api))
     res = await http_client.fetch(http_request)
Exemplo n.º 7
0
 async def get_ser_info(self, ktv_id):
     params = {'ktvid': ktv_id, 'op': 'getktvpayinfo'}
     http_client = utils.get_async_client()
     http_request = utils.http_request(
         url_concat(APIS['ktv_service_info'], params))
     response = await http_client.fetch(http_request)
     response = json.loads(response.body.decode())
     return response['result']
Exemplo n.º 8
0
 async def get_order_by_orderid(self, pay_type, order_id):
     http_client = utils.get_async_client()
     params = {'order_id': order_id}
     request = utils.http_request(
         url_concat(APIS['order'].format(pay_type=pay_type), params))
     response = await http_client.fetch(request)
     order_info = json.loads(response.body.decode())
     return order_info['order']
Exemplo n.º 9
0
 async def update_ktv(self, ktv_id, args):
     http_client = utils.get_async_client()
     req_url = '{url}/kinfo/{ktv_id}'.format(url=COMMON_URL, ktv_id=ktv_id)
     params = json.dumps(args)
     request = utils.http_request(req_url, method='PUT', body=params)
     response = await http_client.fetch(request)
     response = json.loads(response.body.decode())
     return response
Exemplo n.º 10
0
 async def withdraw_money(self, ktv_id, is_extra=0):
     http_client = utils.get_async_client()
     params = urlencode({
         'is_extra': is_extra
     })
     http_request = utils.http_request(APIS['withdraw'].format(ktv_id=ktv_id), method='POST', body=params)
     response = await http_client.fetch(http_request)
     response = json.loads(response.body.decode())
     return response
Exemplo n.º 11
0
    async def post_pay(self, store_id, order_no, bill_id, auth_code, paytype):
        key = 'query_order_%s_%s' % (order_no, bill_id)
        self.ctrl.rs.delete(key)
        if bill_id:
            orders = self.get_bills_ctl(store_id, [bill_id])
        else:
            orders = self.get_orders(store_id, [order_no])

        if not orders:
            raise utils.APIError(errcode=10001)
        order = orders[0]
        total_fee = order['money']

        url = WX_PAY_URL.format(paytype=paytype)
        pay_params = {
            'op':
            'fastpay',
            'ktvid':
            store_id,
            'date':
            str(datetime.datetime.now().date()),
            'action':
            'MICROPAY',
            'data':
            json.dumps({
                'ktv_id': store_id,
                'erp_id': order_no,
                'paraTotalFee': total_fee if not options.debug else 1,
                'paraAuthCode': auth_code,
                'paraBody': 'body',
                'paraBillCreateIp': '',
            }),
            'erp_id':
            order_no,
            'time':
            int(datetime.datetime.now().timestamp())
        }
        try:
            http_client = utils.get_async_client()
            request = utils.http_request(url_concat(url, pay_params),
                                         method='POST',
                                         body='')

            res = await utils.fetch(http_client, request)
            res = json.loads(res.body.decode())
            logging.info('query order result: %s' % res)
            return res
        except Exception as e:
            logging.error(e)
            return {}
Exemplo n.º 12
0
 async def _get_openid(self, code):
     key = 'code_%s' % code
     v = ctrl.rs.get(key)
     if v:
         return v.decode()
     url = FETCH_OPENID_URL.format(appid=WX_CONF['appid'],
                                   secret=WX_CONF['appsecret'],
                                   code=code)
     http_client = utils.get_async_client()
     request = utils.http_request(url)
     response = await http_client.fetch(request)
     response = json.loads(response.body.decode())
     logging.info(response)
     ctrl.rs.set(key, response['openid'], 10 * 60)
     return response['openid']
Exemplo n.º 13
0
    async def get_user_info(self, openid):
        try:
            access_token = await utils.async_common_api(
                '/wx/token', dict(flag=1))
        except Exception as e:
            logging.error(e)
            raise

        url = FETCH_USERINFO_URL_V2.format(
            access_token=access_token['accec_token'], openid=openid)
        http_client = utils.get_async_client()
        request = utils.http_request(url)
        response = await http_client.fetch(request)
        response = json.loads(response.body.decode())
        return response
Exemplo n.º 14
0
    async def get_per_data(self, ktv_id, stm='', etm=''):
        params = {'stm': stm, 'etm': etm}
        http_client = utils.get_async_client()
        http_request = self.gen_request_ctl('getPayWayInfo', ktv_id, params)

        key = self.get_pay_prop_key_ctl(ktv_id, stm, etm)
        data = self.ctrl.rs.get(key)

        if data:
            return pickle.loads(data)

        try:
            response = await http_client.fetch(http_request)
            data = json.loads(response.body.decode())
            assert int(data['code']) == 1
            self.ctrl.rs.set(key, pickle.dumps(data), A_MINUTE)
            return data
        except:
            return {}
Exemplo n.º 15
0
    async def pay_query(self,
                        store_id,
                        order_no,
                        bill_id,
                        paytype='wx',
                        loop=1):
        logging.info('query order loop %s' % loop)
        key = 'query_order_%s_%s' % (order_no, bill_id)
        v = self.ctrl.rs.get(key)
        if v:
            v = eval(v)
            return v

        is_room = False
        orders = []
        if bill_id:
            orders = self.get_bills_ctl(store_id, [bill_id])
        else:
            orders = self.get_orders(store_id, [order_no])

        if not orders:
            raise utils.APIError(errcode=10001)
        order = orders[0]
        if bill_id and order['bill_no'].startswith('KT'):
            is_room = True

        url = WX_PAY_URL.format(paytype=paytype)
        pay_params = {
            'op': 'query',
            'ktvid': store_id,
            'date': str(datetime.datetime.now().date()),
            'action': 'MICROPAY',
            'data': json.dumps({'paraOutTradeNo': order['pay_id']}),
            'erp_id': order_no,
            'time': int(datetime.datetime.now().timestamp())
        }
        try:
            http_client = utils.get_async_client()
            request = utils.http_request(url_concat(url, pay_params),
                                         method='POST',
                                         body='')

            res = await utils.fetch(http_client, request)
            res = json.loads(res.body.decode())
            logging.info('query order order_no: %s, bill_id: %s result: %s' %
                         (order_no, bill_id, res))
            if utils.is_success_pay(paytype, res):
                pl = self.ctrl.rs.pipeline(transaction=True)
                pl.set(key, res).expire(key, 15 * 60).execute()
                self.success_pay_ctl(store_id, order_no, bill_id, paytype,
                                     is_room)
            elif loop > 0:
                IOLoop.current().add_timeout(time.time() + 10,
                                             self.pay_query_ctl, store_id,
                                             order_no, bill_id, paytype,
                                             loop - 1)
            return res
        except Exception as e:
            logging.error(e)
            if loop > 0:
                IOLoop.current().add_timeout(time.time() + 10,
                                             self.pay_query_ctl, store_id,
                                             order_no, bill_id, paytype,
                                             loop - 1)
            return {}
Exemplo n.º 16
0
 async def get_bank_info(self, ktv_id):
     http_client = utils.get_async_client()
     request = utils.http_request(APIS['withdraw_account'].format(ktv_id=ktv_id))
     response = await http_client.fetch(request)
     bank_info = json.loads(response.body.decode())
     return bank_info