コード例 #1
0
def make_success(order_no):
    from app.models import Order
    order = Order.objects.get(order_no=order_no)
    if order.status !=  STATUS_WAITING_ISSUE:
        print "状态不对"
        return
    if order.crawl_source == "hn96520":
        print "源站订单号:", order.raw_order_no
        code1 = raw_input("请输入取票密码:")
        code = raw_input("请再次输入取票密码:")
        if code1 != code:
            print "两次输入密码不一致"
            return
        dx_info = {
            "time": order.drv_datetime.strftime("%Y-%m-%d %H:%M"),
            "start": order.line.s_sta_name,
            "end": order.line.d_sta_name,
            "code": code,
            'raw_order': order.raw_order_no,
        }
        dx_tmpl = DUAN_XIN_TEMPL[SOURCE_HN96520]
        code_list = ["%s" % (code)]
        msg_list = [dx_tmpl % dx_info]
        print msg_list[0]
        order.modify(status=STATUS_ISSUE_SUCC,
                        pick_code_list=code_list,
                        pick_msg_list=msg_list)
        order.on_issue_success()
        from tasks import issued_callback
        issued_callback.delay(order.order_no)
コード例 #2
0
ファイル: views.py プロジェクト: matengfei000/busweb
def make_fail(order_no):
    order = Order.objects.get(order_no=order_no)
    content = request.form["content"]
    if order.status not in [7]:
        return jsonify({"code": 1, "msg": "非下单重试的单不允许失败"})
    if not content:
        return jsonify({"code": 0, "msg":"内容不能为空"})
    order.add_trace(OT_REMARK, "%s:%s" % (current_user.username, content))
    order.modify(status=5)
    now = dte.now()
    order.line.modify(left_tickets=0, update_datetime=now, refresh_datetime=now)
    issued_callback.delay(order.order_no)
    return jsonify({"code": 1, "msg": "修改成功"})
コード例 #3
0
ファイル: views.py プロジェクト: matengfei000/busweb
 def post(self, order_no):
     order = Order.objects.get_or_404(order_no=order_no)
     status = int(request.form.get("status"))
     desc = request.form.get("desc",'')
     action = request.form.get("action", "set")
     if order.status in [STATUS_ISSUE_SUCC, STATUS_ISSUE_ING, STATUS_LOCK_FAIL]:
         return jsonify({"code": 0, "msg": "%s不允许修改"%STATUS_MSG[order.status]})
     if not desc and status != STATUS_LOCK_RETRY:
         return jsonify({"code": 0, "msg": "描述不能为空"})
     msg = "%s修改订单状态:%s=>%s 描述:%s" % (current_user.username,STATUS_MSG[order.status], STATUS_MSG[status], desc)
     order.add_trace(OT_MODIFY_ORDER_STATUS, msg)
     order.modify(status=status)
     if status in [STATUS_LOCK_FAIL, STATUS_ISSUE_FAIL]:
         now = dte.now()
         if status == STATUS_LOCK_FAIL:
             order.line.modify(left_tickets=0, update_datetime=now, refresh_datetime=now)
         issued_callback.delay(order.order_no)
         return jsonify({"code": 1, "msg": "修改订单状态成功"})
     access_log.info("[modify_order_status] %s", msg)
     return jsonify({"code":1, "msg": "修改订单状态成功"})
コード例 #4
0
ファイル: views.py プロジェクト: matengfei000/busweb
def fangbian_callback():
    try:
        order_log.info("[fanbian-callback] %s", request.get_data())
        args = json.loads(request.get_data())
        data = args["data"]
        service_id = args["serviceID"]
        code = args["code"]
        order = Order.objects.get(order_no=data["merchantOrderNo"])
        if service_id == "B001":    # 锁票回调
            raw_order = data["ticketOrderNo"]
            if code == 2100:
                order.modify(status=STATUS_ISSUE_ING, raw_order_no=raw_order)
                order.on_issueing(reason="code:%s, message:%s" % (code, args["message"]))
            else:
                order.modify(status=STATUS_ISSUE_FAIL, raw_order_no=raw_order)
                order.on_issue_fail(reason="code:%s, message:%s" % (code, args["message"]))
                issued_callback.delay(order.order_no)
        elif service_id == "B002":
            if code == 2102:
                msg = urllib.unquote(data["exData"].decode("gbk").encode('utf-8')).replace(u"【", "").replace(u"】", " ")
                order.modify(status=STATUS_ISSUE_SUCC,
                            pick_code_list=[""],
                            pick_msg_list=[msg])
                order.on_issue_success()
                issued_callback.delay(order.order_no)
            else:
                order.modify(status=STATUS_ISSUE_FAIL)
                order.on_issue_fail(reason="code:%s, message:%s" % (code, args["message"]))
                issued_callback.delay(order.order_no)
    except:
        order_log.error("%s\n%s", "".join(traceback.format_exc()), locals())
        return "error"
    return "success"
コード例 #5
0
ファイル: dgky.py プロジェクト: matengfei000/busweb
 def get_pay_page(self, order, valid_code="", session=None, pay_channel="alipay" ,**kwargs):
     if order.status == STATUS_WAITING_ISSUE:
         res = self.request_order_detail(order)
         if not res:
             msg = u'未获取源站订单号,不允许支付'
             order.modify(status=STATUS_LOCK_RETRY,
                          line=Line.objects.get(line_id=order.line.check_compatible_lines().get("gdsw", "")),
                          crawl_source='gdsw')
             order.on_lock_retry(reason=msg)
             order.reload()
             return {"flag": "error", "content": '重新打开'}
         else:
             r = requests.get(order.pay_url)
             content = r.content.decode('gbk')
             res = re.findall(r"alert\('(.*?)'\);", content)
             if res:
                 errmsg = res[0]
                 if u'不可预售' in errmsg:
                     self.close_line(order.line, reason=errmsg)
                     order.modify(status=STATUS_LOCK_FAIL)
                     order.on_lock_fail(reason=errmsg)
                     issued_callback.delay(order.order_no)
                     return {"flag": "error", "content": '锁票失败'}
                 else:
                     order.modify(status=STATUS_LOCK_RETRY)
                     order.on_lock_retry(reason=errmsg)
                     return {"flag": "error", "content": '重新打开'}
             else:
                 order.update(pay_channel='alipay')
                 return {"flag": "url", "content": order.pay_url}
                 #return {"flag": "html", "content": content}
     if order.status in [STATUS_LOCK_RETRY, STATUS_WAITING_LOCK]:
         self.lock_ticket(order)
     order.reload()
     if order.status == STATUS_WAITING_ISSUE:
         return {"flag": "error", "content": '重新打开'}
コード例 #6
0
    def refresh_issue(self, order, force=False):
        """
        出票刷新主流程,子类不用重写
        """
        old_status = order.status
        if not self.need_refresh_issue(order, force=force):
            return
        order_log.info("[issue-refresh-start] order:%s", order.order_no)
        ret = self.do_refresh_issue(order)
        order.reload()
        code = ret["result_code"]

        code_status_mapping = {
            0: old_status,
            1: STATUS_ISSUE_SUCC,
            2: STATUS_ISSUE_FAIL,
            3: STATUS_GIVE_BACK,
            4: STATUS_ISSUE_ING,
        }
        if code_status_mapping.get(code, "") == old_status or code == 0:
            order_log.info("[issue-refresh-result] keeping order:%s, msg:%s",
                           order.order_no, ret["result_msg"])
            return
        elif code == 1:  # 出票成功
            msg_list = ret["pick_msg_list"] or order.pick_msg_list
            code_list = ret["pick_code_list"] or order.pick_code_list
            if not code_list:  # 最初设计要求msg_list和code_list长度必须一致
                code_list = [""] * len(msg_list)

            msg = msg_list and msg_list[0] or ""
            order_log.info(
                "[issue-refresh-result] order: %s succ. msg:%s, pick_msg: %s",
                order.order_no, ret["result_msg"], msg)
            order.modify(status=STATUS_ISSUE_SUCC,
                         pick_code_list=code_list,
                         pick_msg_list=msg_list)
            order.on_issue_success()
            issued_callback.delay(order.order_no)
        elif code == 2:  # 出票失败
            order_log.info("[issue-refresh-result] order: %s fail. msg:%s",
                           order.order_no, ret["result_msg"])
            order.modify(status=STATUS_ISSUE_FAIL)
            order.on_issue_fail(ret["result_msg"])
            issued_callback.delay(order.order_no)
        elif code == 3:  # 源站已退款
            order_log.info(
                "[issue-refresh-result] order: %s give back. msg:%s",
                order.order_no, ret["result_msg"])
            order.modify(status=STATUS_GIVE_BACK)
            issued_callback.delay(order.order_no)
            order.on_give_back()
        elif code == 4:  # 正在出票
            order_log.info("[issue-refresh-result] order: %s issueing. msg:%s",
                           order.order_no, ret["result_msg"])
            order.modify(status=STATUS_ISSUE_ING)
            order.on_issueing()
        elif code == 5:  # 超时过期, 进入锁票重试
            order_log.info("[issue-refresh-result] order: %s expire. msg:%s",
                           order.order_no, ret["result_msg"])
            order.modify(pay_order_no="", raw_order_no="", lock_info={})
            self.lock_ticket_retry(order, reason=ret["result_msg"])
        else:
            order_log.error(
                "[issue-refresh-result] order: %s error, 未处理状态 status:%s",
                order.order_no, code)
コード例 #7
0
ファイル: scqcp.py プロジェクト: matengfei000/busweb
    def get_pay_page(self,
                     order,
                     valid_code="",
                     session=None,
                     pay_channel="alipay",
                     bank='',
                     **kwargs):
        rebot = order.get_lock_rebot()
        headers = rebot.http_header()
        new_headers = headers
        if new_headers.has_key('Content-Type'):
            del new_headers['Content-Type']
        is_login = rebot.test_login_status()
        msg = ''
        if not is_login:
            for i in range(3):
                msg = rebot.login()
                if msg == "OK":
                    is_login = True
                    break
        if not is_login:
            if msg in u'用户名或密码错误':
                order.change_lock_rebot()
                order.reload()
            rebot = order.get_lock_rebot()
            rebot.modify(ip='')
            return {"flag": "error", "content": "账号自动登陆失败,请再次重试!"}

        if order.status in [STATUS_LOCK_RETRY, STATUS_WAITING_LOCK]:
            self.lock_ticket(order)
        order.reload()

        if order.status == STATUS_WAITING_ISSUE:
            app_rebot = ScqcpAppRebot.objects.get(
                telephone=order.source_account)
            res = self.send_order_request_by_web(order, app_rebot)
            if res:
                if res.get('drv_date', '') != order.drv_datetime.strftime(
                        "%Y-%m-%d %H:%M:%S"):
                    errmsg = '时间不一致,不允许支付!'
                    self.close_line(order.line, reason=errmsg)
                    order.modify(status=STATUS_LOCK_FAIL)
                    order.on_lock_fail(reason=errmsg)
                    issued_callback.delay(order.order_no)
                    return {"flag": "error", "content": errmsg}
            else:
                msg = 'web未获取到支付信息'
                self.lock_ticket_retry(order, reason=msg)
                return {"flag": "error", "content": '请重试!'}
            r = rebot.http_get(order.pay_url,
                               headers=new_headers,
                               cookies=json.loads(rebot.cookies),
                               timeout=30)
            if "车票已过期" in r.content or "无相关支付信息" in r.content:
                msg = '车票已过期或者无相关支付信息'
                self.lock_ticket_retry(order, reason=msg)
                return {"flag": "error", "content": '请重试!'}
#             r_url = urllib2.urlparse.urlparse(r.url)
#             if r_url.path in ["/error.html", "/error.htm"]:
#                 self.lock_ticket_retry(order)
#                 return {"flag": "error", "content": ''}
            sel = etree.HTML(r.content)
            plateform = pay_channel
            try:
                data = dict(
                    payid=sel.xpath("//input[@name='payid']/@value")[0],
                    bank=
                    bank,  #,'BOCB2C',#sel.xpath("//input[@id='s_bank']/@value")[0],
                    plate=sel.xpath("//input[@id='s_plate']/@value")[0],
                    plateform=plateform,
                    qr_pay_mode=0,
                    discountCode=sel.xpath(
                        "//input[@id='discountCode']/@value")[0])
            except:
                rebot.modify(ip="")
                rebot.modify(cookies="{}")
                return {"flag": "error", "content": "请重试!"}
            info_url = "http://scqcp.com:80/ticketOrder/middlePay.html"
            cookies = json.loads(rebot.cookies)
            r = rebot.http_post(info_url,
                                data=data,
                                headers=headers,
                                cookies=cookies,
                                timeout=60)
            cookies.update(dict(r.cookies))
            #             sel = etree.HTML(r.content)
            try:
                data = self.extract_alipay(r.content)
                pay_money = float(data["total_fee"])
                pay_order_no = data["out_trade_no"]
                if order.pay_money != pay_money or order.pay_order_no != pay_order_no:
                    order.modify(pay_money=pay_money,
                                 pay_order_no=pay_order_no,
                                 pay_channel='yh')
                jump_url = "https://mapi.alipay.com/gateway.do?_input_charset=utf-8"
                headers.update({
                    "Host":
                    "mapi.alipay.com",
                    "Referer":
                    "http://scqcp.com/ticketOrder/middlePay.html",
                    "Content-Type":
                    "application/x-www-form-urlencoded"
                })
                res = rebot.http_post(jump_url,
                                      data=urllib.urlencode(data),
                                      headers=headers,
                                      cookies=cookies)
                if u'fastpayLoginForm' not in res.content.decode('gbk'):
                    rebot.modify(ip="")
                    rebot.modify(cookies="{}")
                    return {"flag": "error", "content": "请重试!"}
            except:
                rebot.modify(ip="")
                rebot.modify(cookies="{}")
                return {"flag": "error", "content": "请重试!"}
            return {"flag": "html", "content": r.content}
        return {"flag": "error", "content": "锁票失败, 请重试!"}