コード例 #1
0
ファイル: meituan.py プロジェクト: lescpsn/lescpsn
    def charge_order(self, meituan_order_id):
        order_info = self.master.hgetall(
            "meituan:{0}".format(meituan_order_id))
        if not order_info:
            print("无法查询到订单({0})的详细信息,充值失败".format(meituan_order_id))
            return (False, "fail", "no_order_info")

        product_dict = self.get_product_dict()
        if order_info['product_id'] not in product_dict:
            print("无法查询到订单({0})的充值产品信息,充值失败".format(meituan_order_id))
            return (False, "fail", "no_product_fino")

        try:
            face_value = product_dict.get(
                order_info['product_id']).get('value')

            downstream = self.application.config['downstream'][self.USER_ID]
            code = json.dumps({
                'request_no': meituan_order_id,
                'contract_id': '100001',
                'order_id': meituan_order_id,
                'plat_offer_id': order_info['product_id'],
                'phone_id': order_info['mobile'],
                'facevalue': int(face_value),
            })

            iv = downstream['iv']
            passphrase = downstream['pass']
            aes = AES.new(passphrase, AES.MODE_CBC, iv)

            b = aes.encrypt(padding(code))
            encrypted = base64.b64encode(b).decode('utf8')

            body = json.dumps({'partner_no': self.USER_ID, 'code': encrypted})

            url = 'http://{shard}/data/order'.format(shard=downstream['shard'])

            http_client = AsyncHTTPClient()
            request = HTTPRequest(url=url, method='POST', body=body)
            response = yield http_client.fetch(request)

            if response.code == 200:
                resp = json.loads(response.body.decode('utf8'))

                result = resp['orderstatus']
                if result != 'processing':
                    print('订单({0})充值失败:{1}({2})'.format(
                        meituan_order_id, escape_data_result(result), result))
                    return (False, "fail", "charge_fail")
                else:
                    return (True, "checked", "checked")

        except Exception as e:
            print(meituan_order_id, " exception:", e)
            return (False, "fail", "exception")

        return (False, "fail", "unknown")
コード例 #2
0
def decode_status(order):
    if order.get('product') == 'data':
        if order.get('back_result') is None and order.get('result') == '00000':
            return '充值中'
        else:
            return escape_data_result(
                order.get('back_result') or order.get('result'))
    else:
        return escape_fee_result(
            order.get('back_result') or order.get('result'))
コード例 #3
0
ファイル: query.py プロジェクト: lescpsn/lescpsn
def decode_status(order):
    if order.product == 'data':
        if order.back_result is None and order.result == '00000':
            return '充值中'
        else:
            return escape_data_result(order.back_result or order.result)
    elif order.product == 'sinopec':
        return escape_sinopec_result(order.back_result or order.result)
    else:
        return escape_fee_result(order.back_result or order.result)
コード例 #4
0
 def decode_status(order):
     if order['product'] == 'data':
         if order['back_result'] is None and order['result'] == '00000':
             return '充值中'
         else:
             return escape_data_result(order['back_result']
                                       or order['result'])
     elif order['product'] == 'sinopec':
         return escape_sinopec_result(order['back_result']
                                      or order['result'])
     else:
         return escape_fee_result(order['back_result'] or order['result'])
コード例 #5
0
    def post(self):
        args = self.json_args

        http_client = AsyncHTTPClient()

        try:
            db1 = self.application.glados_client.GLaDOS.order

            order_id = args['id']

            order = yield db1.find_one(order_id)

            up_order_list = order.get('up_order', [])
            product = order.get('product')

            detail_list = []

            for up_order in up_order_list:
                up_info = {'title': '上游订单'}
                content_list = []
                up_info['content'] = content_list

                content_list.append({
                    'k': '上游订单号',
                    'v': up_order.get('up_order_id') or '无'
                })
                content_list.append({'k': '渠道', 'v': up_order.get('route')})
                content_list.append({
                    'k':
                    '请求时间',
                    'v':
                    str(up_order.get('up_req_time') or '暂无')
                })
                content_list.append({
                    'k':
                    '返回时间',
                    'v':
                    str(up_order.get('up_resp_time') or '暂无')
                })
                content_list.append({
                    'k':
                    '回调时间',
                    'v':
                    str(up_order.get('up_back_time') or '暂无')
                })
                content_list.append({
                    'k': '订单结果',
                    'v': up_order.get('up_result', '暂无')
                })

                if up_order.get('up_back_result'):
                    if product == 'fee':
                        content_list.append({
                            'k':
                            '充值结果',
                            'v':
                            escape_fee_result(up_order.get('up_back_result'))
                        })
                    elif product == 'data':
                        content_list.append({
                            'k':
                            '充值结果',
                            'v':
                            escape_data_result(up_order.get('up_back_result'))
                        })
                else:
                    content_list.append({'k': '充值结果', 'v': '暂无'})

                detail_list.append(up_info)  # 返回页面

                if up_order.get('route') == 'machado':

                    base_url = self.application.config['connection'][
                        'forrestal_query']
                    base_url += '/cmcc_fee/query_order?requ_type=by_order_id&order_id=' + order_id

                    data = yield get_route(base_url)
                    if data.get('status') == 'ok':
                        forrestal_order = data['data']['order_list'][0]

                        card_info = {'title': '卡充信息', 'content': []}
                        card_info['content'].append({
                            'k':
                            '手机',
                            'v':
                            forrestal_order.get('mobile', '无')
                        })
                        card_info['content'].append({
                            'k':
                            '卡号',
                            'v':
                            forrestal_order.get('card_id', '无')
                        })
                        card_info['content'].append({
                            'k':
                            '结果',
                            'v':
                            decode_agent(forrestal_order.get('result'))
                        })
                        detail_list.append(card_info)

                        agent_index = 1
                        for agent in forrestal_order.get('agents'):
                            agent_info = {'title': '拨打 #' + str(agent_index)}
                            agent_info['content'] = content_list = []

                            content_list.append({
                                'k': '话机号码',
                                'v': agent.get('agent')
                            })
                            content_list.append({
                                'k':
                                '结果',
                                'v':
                                decode_agent(agent.get('result'))
                            })
                            content_list.append({
                                'k': '时间',
                                'v': str(agent.get('tsp'))
                            })
                            detail_list.append(agent_info)
                            agent_index += 1

            self.finish(json.dumps({'up_detail': detail_list}))

        except Exception:
            request_log.exception('QUERY CHAIN')
            self.send_error(500)

        finally:
            http_client.close()
コード例 #6
0
    def post(self, path_args):
        user_id = self.current_user['partner_id']
        prod = self.json_args['prod']
        number = self.json_args['number']

        downstream = self.application.config['downstream'][user_id]

        if 'master' in downstream:
            master_id = downstream['master']
        else:
            master_id = user_id

        key = 'product:{master_id}:data:{prod}'.format(master_id=master_id, prod=prod)

        product = self.master.hmget(key, ['offer', 'value'])
        if product[0] is None:
            self.write_error(405)
            return

        order_id = self.order_id()

        code = json.dumps({
            'request_no': order_id,
            'contract_id': '100001',
            'order_id': order_id,
            'plat_offer_id': product[0],
            'phone_id': number,
            'facevalue': int(product[1]),
        })

        iv = downstream['iv']
        passphrase = downstream['pass']
        aes = AES.new(passphrase, AES.MODE_CBC, iv)

        b = aes.encrypt(padding(code))
        encrypted = base64.b64encode(b).decode('utf8')

        body = json.dumps({'partner_no': user_id, 'code': encrypted})

        url = 'http://{shard}/data/order'.format(shard=downstream['shard'])

        http_client = AsyncHTTPClient()
        try:
            request = HTTPRequest(url=url, method='POST', body=body)
            response = yield http_client.fetch(request)

            if response.code == 200:
                resp = json.loads(response.body.decode('utf8'))

                result = resp['result_code']
                request_no = resp.get('request_no')
                if result == '00000':
                    msg = {'status': 'ok', 'msg': '充值请求发送成功', 'sp_order_id': request_no}

                    self.master.hmset('latest:%s' % user_id, {'prod': prod, 'number': number})
                else:
                    msg = {'status': 'fail',
                           'msg': '充值请求发送失败,错误原因:{info}({result})'.format(
                               info=escape_data_result(result),
                               result=result),
                           'sp_order_id': request_no}

        except Exception as e:
            print(e)
            msg = {'status': 'fail'}
        finally:
            http_client.close()

        self.write(json.dumps(msg))