예제 #1
0
def alipay_callback():
    data = request.form.to_dict()
    _LOGGER.info('alipay callback form: %s' % data)
    signature = data.pop('sign')
    if alipay_official.check_data(data, signature):
        orderid = data['out_trade_no']
        amount = float(data['total_amount'])
        succeed_pay('', int(orderid), amount, extend=json.dumps(data))
        alipayid = data['app_id'].strip()
        if float(incr_alipay_today_amount(alipayid, amount)) > _EVERY_DAY_MAX:
            fresh_overload_alipay_set(alipayid)
        notify_merchant(orderid)
        return 'success'
    else:
        return 'fail'
예제 #2
0
def wanhong_callback():
    data = request.form
    _LOGGER.info('wanhong callback: %s' % data)
    if not wanhong.verify_sign(data):
        _LOGGER.info('wanhong callback verify sign false')
        return 'fail'
    respCode = data['respCode']
    amount = Decimal(data['transAmt']) / 100
    originid = data['serialId']
    orderid = data['orderNo']
    if respCode == '0000':
        succeed_pay(originid, int(orderid), amount, extend=json.dumps(data))
        notify_merchant(orderid)
    else:
        fail_pay(originid, orderid, amount, extend=data)
    return 'success'
예제 #3
0
def sand_callback():
    _LOGGER.info('sand callback form: %s' % request.form)

    data = request.form['data']
    req_dct = json.loads(data)
    sign = request.form['sign']
    # if not sand.verify_sign(data, sign):  # 验签有问题
    #     _LOGGER.info("sand verify sign error: %s" % request.form)
    #     return 'respCode=111111'

    orderid = req_dct['body']['orderCode']
    amount = int(req_dct['body']['buyerPayAmount']) / 100.0
    succeed_pay('', int(orderid), amount, extend=data)
    notify_merchant(orderid)

    return 'respCode=000000'
예제 #4
0
def keda_callback():
    """
    {"orderCode":"1617773825225665536","date":"mw+xc48bhv4v2ByZHA6wOJcCSV/xum3FiNahHgNYth2YZhUlJOLqPLfJnsRVT9DwijxSemMFMfTc\nkp24wgv1cKmuyp9zdzvoJlcjtvOuBkBygbeE87IjqVYqWZ0tNsW9GOJiswNxRmo4AF7d+TJ1Kf/wRnF4TEgQLqH0MLDriH2yx5kntdvp0GDa6KZcue+8oIhevOhRcR3k8fpOK9KAAg=="}
    """
    resp_data = request.data
    _LOGGER.info(resp_data)
    json_data = json.loads(resp_data)
    orderid = int(json_data['orderCode'])
    crypto_data = json_data['date']
    pay_detail = keda.decrypto(crypto_data)

    amount = Decimal(pay_detail["totalFee"]) / 100
    # FIXME: 支付宝和微信返回不一样
    result = pay_detail.get("state") or pay_detail['tradeState']

    if result in ('SUCCESS', 'TRADE_SUCCESS'):
        succeed_pay('', int(orderid), amount, extend=json.dumps(pay_detail))
        notify_merchant(orderid)
    else:
        fail_pay('', orderid, amount, extend=pay_detail)
    return 'SUCCESS'
예제 #5
0
def guangda_callback():
    """
    json loads body后的格式
    {u'acctCat': u'06',
     u'acquirerType': u'wechat',
     u'currency': u'CNY',
     u'custId': u'170822185829458',
     u'reqId': u'1000005',
     u'totalAmount': u'1',
     u'transAmount': u'1',
     u'transId': 708301706522270082,
     u'transResult': u'2',
     u'transTime': u'20170830170256',
     u'transType': u'1',
     u'uuid': u'ofCcf0y1wyICkeYS57V23wx6QSiQ',
     u'walletOrderId': u'1708300013436934',
     u'walletTransId': u'4000752001201708309139290722'}
    """
    try:
        body, sign = request.form['body'], request.form['sign']
        if guangda.verify_sign(body, sign):
            pay_detail = json.loads(body)
            orderid = pay_detail['reqId']
            amount = Decimal(pay_detail['totalAmount']) / 100
            originid = pay_detail['transId']  # 上游的订单号
            result = pay_detail['transResult']
            if result == '2':
                succeed_pay(originid, orderid, amount, extend=body)
                notify_merchant(orderid)
            else:
                fail_pay(originid, orderid, amount, extend=body)
            return 'SUCCESS'
        else:
            _LOGGER.info('sign error')
            return 'FAIL'
    except Exception as e:
        _LOGGER.exception('pay callback error')
        return 'FAIL'
예제 #6
0
def swiftpass_callback():
    data = request.data
    _LOGGER.info('swiftpass callback: %s' % data)
    data = xmltodict.parse(data)['xml']
    data = dict(data)
    sign = data.pop('sign')
    if not swiftpass.check_sign(data, sign):
        _LOGGER.info('swiftpass callback verify sign false')
        return 'fail'
    status = data.get('status')
    result_code = data.get('result_code')
    pay_result = data.get('pay_result')
    originid = data.get('399540514434201711104298061303')
    orderid = data.get('out_trade_no')
    if status == '0' and result_code == '0':
        amount = Decimal(data['total_fee']) / 100
        if pay_result == '0':
            succeed_pay(originid, orderid, amount, extend=json.dumps(data))
            notify_merchant(orderid)
        else:
            fail_pay(originid, orderid, amount, extend=json.dumps(data))
    else:
        _LOGGER.error('swiftpass callback order data error')
    return 'success'