Exemple #1
0
    def doSztyPayH5Callback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doSztyPayH5Callback', rparam)
        clientip = TyContext.RunHttp.get_client_ip()
        szty_config = TyContext.Configure.get_global_item_json('shuzitianyu_h5_config', {})
        callback_ip = str(szty_config['callback_ip'])
        if clientip != callback_ip:
            TyContext.ftlog.error('doSztyPayH5Callback->ip auth failed. '
                                  'callback ip', clientip, 'expected', callback_ip)
            return 'error'

        try:
            orderPlatformId = rparam['orderid']
            mobileId = rparam.get('mob', '')
            state = int(rparam['state'])
            price = int(rparam['price'])
        except Exception as e:
            TyContext.ftlog.error('doSztyPayH5Callback->param error !! rparam=',
                                  rparam, 'Exception:', e)
            return 'error'

        TyContext.ftlog.debug('doSztyPayH5Callback orderId', orderPlatformId)
        if state == 0:
            PayHelper.set_order_mobile(orderPlatformId, mobileId)
            isOk = PayHelper.callback_ok(orderPlatformId, price / 100.0, rparam)
            return 'ok'
        else:
            PayHelper.callback_error(orderPlatformId, '支付失败', rparam)
            return 'error'
Exemple #2
0
    def doCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        transdata = rparam['transdata']
        transdata = json.loads(transdata)
        sign = rparam['sign']
        appid = transdata['appid']
        signtype = rparam['signtype']
        coolpad_keys = TyContext.Configure.get_global_item_json(
            'coolpad_keys', {})
        pubkey = coolpad_keys[appid]['publicKey']
        try:
            orderPlatformId = transdata['cporderid']
            # total_fee = transdata['money']
            result = transdata['result']
        except Exception as e:
            TyContext.ftlog.error('doCoolpadPayCallback->ERROR, exception', e,
                                  'rparam', transdata)
            return 'error'
        if not cls._verify_sign(rparam, sign, pubkey):
            errinfo = '支付失败'
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
            return 'failed'

        if result != 0:
            errinfo = '支付失败'
            TyContext.ftlog.error(
                'doCoolpadPayCallback->ERROR, exception, result not 0')
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
            return 'failed'
        PayHelper.callback_ok(orderPlatformId, -1, rparam)
        return 'success'
Exemple #3
0
    def doSztyPayCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        clientip = TyContext.RunHttp.get_client_ip()
        sztyconfig = TyContext.Configure.get_global_item_json(
            'shuzitianyu_config', {})
        callback_ip = str(sztyconfig['callback_ip'])
        if clientip != callback_ip:
            TyContext.ftlog.error('doSztyPayCallback->ERROR, ip error !! ip =',
                                  clientip)
            return 'error'

        try:
            shortorderPlatformId = rparam['linkid'][7:]
            mobileId = rparam.get('mobile', '')
            status = int(rparam['status'])
        except:
            TyContext.ftlog.error(
                'doSztyPayCallback->ERROR, param error !! rparam=', rparam)
            return 'error'

        orderPlatformId = ShortOrderIdMap.get_long_order_id(
            shortorderPlatformId)
        rparam['chargeType'] = 'shuzitianyu'
        if status == 1:
            PayHelper.set_order_mobile(orderPlatformId, mobileId)
            isOk = PayHelper.callback_ok(orderPlatformId, -1, rparam)
            # Youyifu will resend the callback if the response is NOT 'success'
            return 'success'
        else:
            PayHelper.callback_error(orderPlatformId, '支付失败', rparam)
            return 'success'
Exemple #4
0
    def doUcDjCallback(cls, rpath):
        body = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.debug('TuYouPayUcDj->doUcDjCallback Request data: ',
                              body)
        rparam = TyContext.strutil.loads(body, decodeutf8=True)
        try:
            data = rparam['data']
            orderPlatformId = data['orderId']
            state = data['orderStatus']
            total_fee = data['amount']
            sign = rparam['sign']
            thirdorderid = data['tradeId']
        except:
            TyContext.ftlog.error(
                'TuYouPayUcDj->doUcDjCallback ERROR, param error !! rparam=',
                rparam)
            return 'FAILURE'
        # 签名校验
        if not cls.__verify_sign(data, sign):
            TyContext.ftlog.error(
                'TuYouPayUcDj->doUcDjCallback verify error !!')
            return 'FAILURE'
        # 充值状态校验
        if state != 'S':
            TyContext.ftlog.info(
                'TuYouPayUcDj->doUcDjCallback charge failed. fail reason:',
                data['failedDesc'])
            PayHelper.callback_error(orderPlatformId, data['failedDesc'],
                                     rparam)
            return 'SUCCESS'

        data['third_orderid'] = thirdorderid
        total_fee = float(total_fee)
        PayHelper.callback_ok(orderPlatformId, total_fee, data)
        return 'SUCCESS'
Exemple #5
0
    def doPayAiSiCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug('TuYouPayAiSi->rparam', rparam)
        try:
            orderPlatformId = rparam['billno']
            total_fee = float(rparam['amount'])
            status = int(rparam['status'])
            sign = rparam['sign']
            third_orderid = rparam['order_id']
            appid = rparam['app_id']
        except Exception as e:
            TyContext.ftlog.error('TuYouPayAiSi->doPayAiSiCallback Error: ', e)
            return 'fail'

        # 验签
        if not cls.VerifySign(sign, rparam):
            TyContext.ftlog.error(
                'TuYouPayMiDaShi->doMiDaShiPayCallback Verify sign ERROR!')
            return 'fail'

        rparam['third_orderid'] = third_orderid
        rparam['chargeType'] = 'aisi'
        if status == 0:
            PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
            return 'success'
        elif status == 1:
            return 'success'
        else:
            errinfo = '支付失败'
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
            return 'fail'
Exemple #6
0
    def doYdjdCallback(self, rpath):
        xmldata = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.debug('TuYouPayYdjd.doYdjdCallback in xmldata=',
                              xmldata)
        notifys = {'xml': xmldata, 'chargeType': 'ydjd'}

        try:
            xmlroot = ElementTree.fromstring(xmldata)
            ret = xmlroot.find('hRet').text
            status = xmlroot.find('status').text
            userId = xmlroot.find('userId').text
            contentId = xmlroot.find('contentId').text
            consumeCode = xmlroot.find('consumeCode').text
            orderPlatformId = xmlroot.find('cpparam').text[2:]
        except Exception as e:
            msg = 'failure'
            TyContext.ftlog.error('TuYouPayYdjd.doYdjdCallback:', msg, e)
            return TuYouPayYdjd.XML_RET % (1, msg)

        notifys['pay_appid'] = contentId
        notifys['third_prodid'] = consumeCode
        notifys['third_userid'] = userId

        if ret != '0' or status != '1800':
            msg = 'ret(%s) is not 0 or status(%s) is not 1800' % (ret, status)
            TyContext.ftlog.error('TuYouPayYdjd.doYdjdCallback:', msg)
            PayHelper.callback_error(orderPlatformId, msg, notifys)
            return TuYouPayYdjd.XML_RET % (1, 'failure')

        isOk = PayHelper.callback_ok(orderPlatformId, -1, notifys)
        if isOk:
            return TuYouPayYdjd.XML_RET % (0, 'successful')
        else:
            return TuYouPayYdjd.XML_RET % (1, 'failure')
Exemple #7
0
 def doMeizuPayCallback(cls, rpath):
     rparam = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.info('doMeizuPayCallback rparam', rparam)
     cp_order_id = None
     try:
         cp_order_id = rparam['cp_order_id']
         total_price = float(rparam['total_price'])
         trade_status = rparam['trade_status']
     except Exception as e:
         TyContext.ftlog.error('doMeizuCallback param error, exception', e,
                               'cp_order_id', cp_order_id)
         return json.dumps({
             'code': 900000,
             'message': '参数不匹配',
             'redirect': '',
             'value': None
         })
     if not cls._check_sign(rparam):
         TyContext.ftlog.error('TuYouPayMeizu _check_sign failed',
                               cp_order_id)
         return json.dumps({
             'code': 900000,
             'message': '签名错误',
             'redirect': '',
             'value': None
         })
     if trade_status == '3':
         PayHelper.callback_ok(cp_order_id, total_price, rparam)
         return json.dumps({
             'code': 200,
             'message': '充值成功',
             'redirect': '',
             'value': None
         })
     elif trade_status == '4':
         PayHelper.callback_error(cp_order_id, '订单取消', rparam)
         return json.dumps({
             'code': 900000,
             'message': '',
             'redirect': '',
             'value': None
         })
     elif trade_status == '1' or trade_status == '2':
         return json.dumps({
             'code': 90000,
             'message': '订单处理中',
             'redirect': '',
             'value': None
         })
     elif trade_status == '5':
         return json.dumps({
             'code': 90000,
             'message': '订单异常取消',
             'redirect': '',
             'value': None
         })
Exemple #8
0
    def doLenovoDanjiCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doLenovoDanjiCallback->rparam=', rparam)
        try:
            transdata = rparam['transdata']
            verifyData = transdata
            signStr = rparam['sign']
            transdata = json.loads(transdata)
            TyContext.ftlog.debug(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback transdata: ',
                transdata)
            orderPlatformId = transdata['cpprivate']
            appid = transdata['appid']
            total_fee = transdata['money']
            result = transdata['result']
            paytype = transdata['paytype']
        except Exception as e:
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR:', e)
            return 'FAILURE'

        if '0' != str(result):
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR, sign error !! rparam=',
                rparam, 'sign=', sign)
            PayHelper.callback_error(orderPlatformId, '支付失败', transdata)
            return 'FAILURE'

        appkeyconfig = TyContext.Configure.get_global_item_json(
            'lenovodanji_config', {})
        if not appkeyconfig:
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkeyconfig by lenovodanji_config'
            )
            return 'FAILURE'

        for item in appkeyconfig:
            if 0 == cmp(appid, item['appId']):
                lenovodanji_prikey_str = item['appKey']
                break
        else:
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkey by appid:',
                appid)
            return 'FAILURE'

        if not cls.verifySign(lenovodanji_prikey_str, verifyData, signStr):
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR, sign error')
            return 'FAILURE'

        transdata['sub_paytype'] = paytype
        PayHelper.callback_ok(orderPlatformId,
                              float(total_fee) / 100, transdata)
        return 'SUCCESS'
Exemple #9
0
    def doCardCallback(cls, rpath):
        rparam = PayHelper.getArgsDict()
        TyContext.ftlog.info('cls.doCardCallback->rparam=', rparam)

        version = rparam['version']
        merId = rparam['merId']
        payMoney = rparam['payMoney']
        orderId = rparam['orderId']
        payResult = rparam['payResult']
        privateField = rparam['privateField']
        payDetails = rparam['payDetails']
        md5String = rparam['md5String']
        # signString = rparam['signString']

        if merId != cls.szf_merId:
            TyContext.ftlog.error('cls.doCardCallback-> its not my merId ! merId=', merId, 'my=', cls.szf_merId)
            return 'error'

        cardMoney = rparam.get('cardMoney')
        if cardMoney:
            combineString = version + "|" + merId + "|" + payMoney + "|" + cardMoney + "|" + orderId + "|" + payResult + "|" + privateField + "|" + payDetails + "|" + cls.szf_privateKey
        else:
            combineString = version + merId + payMoney + orderId + payResult + privateField + payDetails + cls.szf_privateKey

        isOk = PayHelper.verify_md5(md5String, combineString)
        if not isOk:
            TyContext.ftlog.error('cls.doCardCallback-> md5 error ! md5String=', md5String, 'combineString=',
                                  combineString)
            return 'error'

        platformOrderId = privateField
        rparam['chargeType'] = 'shenzhoufu.card'

        if payResult != '1':
            # 长连接通知,客户端支付失败
            TyContext.ftlog.error('cls.doCardCallback error, charge return error !!!')
            errcode = 0
            if 'errcode' in rparam:
                errcode = int(rparam['errcode'])
            errorInfo = ''
            if errcode in cls.szf_call_back_code:
                errorInfo = cls.szf_call_back_code[errcode]
            else:
                errorInfo = '神州付-未知错误'
            errorInfo = errorInfo.decode('utf-8')
            PayHelper.callback_error(platformOrderId, errorInfo, rparam)
            return orderId

        total_fee = float(payMoney) / 100
        isOK = PayHelper.callback_ok(platformOrderId, total_fee, rparam)
        if isOK:
            return orderId
        else:
            return 'error'
Exemple #10
0
    def doKuaiYongPingGuoPayCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  rparam', rparam)

        '''
        uid = rparam['uid']
        subject = rparam['subject']
        version = rparam['version']
        '''

        thirdId = rparam['orderid']
        platformOrderId = rparam['dealseq']
        encryptData = rparam['notify_data']
        sign = rparam['sign']

        verifySign = ''.join([k + '=' + str(rparam[k]) + '&' for k in sorted(rparam.keys()) if k != 'sign'])
        verifySign = verifySign[0:-1]
        TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  verifySign', verifySign)
        # 公钥验签
        if not _verify_with_publickey_pycrypto(verifySign, sign, _kuaiyongpingguo_pubkey_py):
            TyContext.ftlog.error('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback public verify fail')
            return 'failed'

        # 公钥解密:加载.so文件,python嵌入动态库
        decryptData = rsa_decrypto_with_publickey(encryptData, KUAIYONGPINGGUO_PUB_KEY, 1)
        TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  decryptData', decryptData)

        # 将dealseq=20130219160809567&fee=0 .01&payresult=0转化为dict结构.
        responseStatus = {}
        attr = decryptData.split('&')
        for param in attr:
            params = param.split('=')
            responseStatus[params[0]] = params[1]
        TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  responseStatus', responseStatus)

        rparam['third_orderid'] = thirdId
        rparam['chargeType'] = 'kuaiyongpingguo'
        if 0 == int(responseStatus['payresult']):
            total_fee = int(float(responseStatus['fee']))
            chargeKey = 'sdk.charge:' + platformOrderId
            chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey, 'charge')
            chargeInfo = json.loads(chargeInfo)
            # 当返回的fee和商品定价不一致时,采用商品本身的价格
            TyContext.ftlog.debug('TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  chargeInfo', chargeInfo,
                                  chargeInfo['chargeTotal'], total_fee)
            # if chargeInfo['chargeTotal'] != total_fee:
            #    total_fee = chargeInfo['chargeTotal']

            PayHelper.callback_ok(platformOrderId, total_fee, rparam)
            return 'success'
        else:
            errinfo = '支付失败'
            PayHelper.callback_error(platformOrderId, errinfo, rparam)
            return 'failed'
Exemple #11
0
    def doAliCallback(self, rpath):
        rparam = PayHelper.getArgsDict()
        TyContext.ftlog.info('doAliCallback->args=', rparam)

        sign = rparam['sign']
        notify_data = rparam['notify_data']
        mock = rparam.get('mock', '')
        # 签名校验
        if not rsaVerify('notify_data=' + notify_data, sign, mock=mock):
            TyContext.ftlog.error(
                'TuyouPayTuyou.doAliCallback rsa verify error !!')
            return 'error'

        xmlroot = ElementTree.fromstring(notify_data)
        trade_status = xmlroot.find('trade_status').text
        total_fee = float(xmlroot.find('total_fee').text)
        subject = xmlroot.find('subject').text
        out_trade_no = xmlroot.find('out_trade_no').text
        trade_no = xmlroot.find('trade_no').text
        nodeTime = xmlroot.find('notify_reg_time')
        if not nodeTime:
            nodeTime = xmlroot.find('gmt_create')
        if nodeTime:
            notify_reg_time = nodeTime.text
        else:
            notify_reg_time = 'not know'

        platformOrderId = out_trade_no
        notifys = {
            'status': trade_status,
            'total_fee': total_fee,
            'subject': subject,
            'out_trade_no': out_trade_no,
            'notify_reg_time': notify_reg_time,
            'trade_no': trade_no,
            'sign': sign,
            'notify_data': notify_data,
            'chargeType': 'tuyou.ali',
            'third_orderid': trade_no
        }

        if trade_status == 'TRADE_CLOSED':
            PayHelper.callback_error(platformOrderId, 'TRADE_CLOSED', notifys)
            return 'success'

        if trade_status != 'TRADE_FINISHED':
            return 'success'

        isOK = PayHelper.callback_ok(platformOrderId, total_fee, notifys)
        if isOK:
            return 'success'
        else:
            return 'error'
Exemple #12
0
    def doAiGameMsgCallback(self, rpath):
        notifys = TyContext.RunHttp.convertArgsToDict()
        cpparam = notifys.get('cpparam', '')
        if not cpparam:
            appkeys = '62d55e5d5d47f5d0121d2049d6893bc1'
            return self._doAiGameMsgCallbackNew(appkeys, rpath)

        resultcode = notifys.get('resultCode', '')
        resultmsg = notifys.get('resultMsg', '')
        try:
            order_paytype = notifys['payType']
            notifys['sub_paytype'] = order_paytype
        except:
            order_paytype = ''
        validatecode = notifys.get('validatecode', '')

        # 限制ip请求
        # clientIp = TyContext.RunHttp.get_client_ip()
        # TyContext.ftlog.info('TuYouPayAiGame.doAiGameMsgCallback in clientIp=', clientIp)
        # iplist = clientIp.split('.')
        # if len(iplist) != 4 or iplist[0] != '202' or iplist[1] != '102' or iplist[2] != '39' :
        #    return cpparam

        if resultcode == '' or resultmsg == '' or cpparam == '' or order_paytype != 'isagSmsPay' or validatecode == '':
            return TuYouPayAiGame.XML_RET % ('1', cpparam)

        tSign = resultcode + cpparam
        m = md5()
        m.update(tSign)
        vSign = m.hexdigest()
        if validatecode != vSign:
            TyContext.ftlog.info(
                'doAiGameMsgCallback->ERROR, sign error !! sign=',
                validatecode, 'vSign=', vSign)
            return TuYouPayAiGame.XML_RET % ('1', cpparam)

        # 解密得到原始游戏订单号
        orderPlatformId = cpparam
        TyContext.ftlog.info('doAiGameMsgCallback orderPlatformId=',
                             orderPlatformId)
        notifys['chargeType'] = 'aigame.msg'
        if resultcode == '00':
            PayHelper.callback_ok(orderPlatformId, -1, notifys)
        else:
            PayHelper.callback_error(orderPlatformId,
                                     'resultCode(%s) not 0' % resultcode,
                                     notifys)
        return TuYouPayAiGame.XML_RET % ('0', cpparam)
Exemple #13
0
    def doiToolsPayCallback(cls, rpath):
        postData = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback postData: ', postData)
        paramslist = postData.split('&')
        params = {}
        for k in paramslist:
            paramdata = k.split('=')
            params[paramdata[0]] = paramdata[1]
        TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback postParams: ', params)

        for k in params.keys():
            params[k] = urllib.unquote(params[k])
        TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback postParams_urldecode: ', params)

        pristr = params['notify_data']
        sign = params['sign']
        data = rsa_decrypto_with_publickey(pristr, iTools_pubkey_str, 1)
        TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback iTools callback data: ', data)
        rparam = json.loads(data)
        TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback notify_data: ', rparam)
        try:
            orderPlatformId = rparam['order_id_com']
            amount = rparam['amount']
            account = rparam['account']
            third_orderid = rparam['order_id']
            result = rparam['result']
            user_id = rparam['user_id']
        except:
            TyContext.ftlog.error('TuYouPayiTools->doiToolsPayCallback Get params in iTools callback ERROR!')
            return 'fail'
        if 0 != cmp('success', result):
            TyContext.ftlog.error('TuYouPayiTools->doiToolsPayCallback Charge failed!')
            errormsg = 'user use ' + account + ' charge ' + result
            PayHelper.callback_error(orderPlatformId, errormsg, rparam)

        # veriry_result = cls.rsa_verify(data, sign, iTools_pubkey_str)
        veriry_result = _verify_with_publickey_pycrypto(data, sign, _iTools_pubkey_py)
        if not veriry_result:
            TyContext.ftlog.error(
                'TuYouPayiTools->doiToolsPayCallback Verify failed! data: %s, sign: %s, iTools_pubkey_str: %s'
                % (data, sign, iTools_pubkey_str))
            return 'fail'

        rparam['third_orderid'] = third_orderid
        PayHelper.callback_ok(orderPlatformId, amount, rparam)
        TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback user %s charge % successed! ' % (user_id, amount))
        return 'success'
Exemple #14
0
    def doMaopaoPayCallback(cls, rpath):

        rparam = TyContext.RunHttp.convertArgsToDict()

        maopaoInfo = {}
        maopaoInfo['orderId'] = rparam['orderId']
        maopaoInfo['skyId'] = rparam['skyId']
        maopaoInfo['resultCode'] = rparam['resultCode']
        maopaoInfo['payNum'] = rparam['payNum']
        maopaoInfo['cardType'] = rparam['cardType']
        maopaoInfo['realAmount'] = rparam['realAmount']
        maopaoInfo['payTime'] = rparam['payTime']
        maopaoInfo['failure'] = rparam['failure']
        maopaoInfo['signMsg'] = rparam['signMsg']

        rparam['third_orderid'] = maopaoInfo['payNum']
        rparam['chargeType'] = 'maopao'

        maopaoConfig = TyContext.Configure.get_global_item_json('maopao_config', {})
        md5key = maopaoConfig['md5key']

        signParams = rparam['orig_uri']
        signInfo = signParams[signParams.find('?') + 1:signParams.find('signMsg') - 1] + '&' + 'key' + '=' + md5key

        TyContext.ftlog.info('doMaopaoCallback signInfo', signInfo)

        total_fee = int(maopaoInfo['realAmount']) / 100
        orderPlatformId = maopaoInfo['orderId']

        sign = cls._cal_sign(signInfo)
        TyContext.ftlog.debug('doMaopaoCallback  sign', sign, 'signMsg', maopaoInfo['signMsg'], 'signInfo', signInfo)

        if sign == maopaoInfo['signMsg']:
            if int(maopaoInfo['realAmount']) > 0:
                PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
                TyContext.ftlog.info('doMaopaoCallback->SUCCESSFUL rparam', rparam)
                return 'result=0'
            else:
                errinfo = '支付失败'
                PayHelper.callback_error(orderPlatformId, errinfo, rparam)
                TyContext.ftlog.error('doMaopaoCallback->ERROR, failDesc', errinfo, 'rparam', rparam)
        else:
            errinfo = '签名校验失败'
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
            TyContext.ftlog.error('doMaopaoCallback->ERROR, failDesc', errinfo, 'rparam', rparam)
        return 'result=0'
Exemple #15
0
    def doAliCallback(self, rpath):
        rparam = PayHelper.getArgsDict()
        TyContext.ftlog.info('doAliCallbackNew->args=', rparam)

        sign = rparam['sign']
        notify_data = self.createLinkString(rparam)
        # TyContext.ftlog.info('doAliCallbackNew->notify_data=', notify_data)
        # TyContext.ftlog.info('doAliCallbackNew->sign=', sign)
        # 签名校验
        if not rsaVerify(notify_data, sign, 'shediao'):
            TyContext.ftlog.error(
                'TuyouPayTuyou.doAliCallback rsa verify error !!')
            return 'error'

        trade_status = rparam['trade_status']
        total_fee = rparam['total_fee']
        subject = rparam['subject']
        out_trade_no = rparam['out_trade_no']
        trade_no = rparam['trade_no']

        platformOrderId = out_trade_no
        notifys = {
            'status': trade_status,
            'total_fee': total_fee,
            'subject': subject,
            'out_trade_no': out_trade_no,
            'trade_no': trade_no,
            'sign': sign,
            'notify_data': notify_data,
            'chargeType': 'shediao.ali',
            'third_orderid': trade_no
        }

        if trade_status == 'TRADE_CLOSED':
            PayHelper.callback_error(platformOrderId, 'TRADE_CLOSED', notifys)
            return 'success'

        if trade_status != 'TRADE_FINISHED':
            return 'success'

        isOK = PayHelper.callback_ok(platformOrderId, total_fee, notifys)
        if isOK:
            return 'success'
        else:
            return 'error'
Exemple #16
0
    def doGeFuPayCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doGeFuPayCallback->rparam', rparam)
        try:
            orderPlatformId = rparam['orderno']
            total_fee = float(rparam['fee']) / 100
            reqTime = rparam['reqtime']
            status = rparam['status']
            mobileId = rparam.get('mobilenum')
            sign = rparam['sign']

        except Exception as e:
            TyContext.ftlog.error('doGeFuPayCallback->ERROR, exception', e,
                                  'rparam', rparam)
            return 'error'

        pathType = TyContext.RunHttp.get_request_path()
        chargeType = pathType.find('gefusdk')
        if chargeType != -1:
            thirdPartyId = '43'
            rparam['chargeType'] = 'gefusdk'
        else:
            thirdPartyId = '32'
            rparam['chargeType'] = 'gefu'

        gefuconfig = TyContext.Configure.get_global_item_json(
            'gefupay_config', {})
        md5key = gefuconfig[thirdPartyId]['md5key']
        paramsIn = rparam['fee'] + rparam['orderno'] + rparam['reqtime']
        if not cls._verify_sign(paramsIn, sign, md5key):
            TyContext.ftlog.error('do_gefupay_callback->ERROR  invalid sign',
                                  sign)
            return 'error'

        PayHelper.set_order_mobile(orderPlatformId, mobileId)
        if status == 'success':
            PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
            return 'success'

        errinfo = '支付失败'
        PayHelper.callback_error(orderPlatformId, errinfo, rparam)
        return 'failed'
Exemple #17
0
    def doLinkYunUnionCallback(cls, rpath):
        rparam = PayHelper.getArgsDict()
        TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionCallback->args=',
                             rparam)
        try:
            mobileId = rparam['mobile']
            serviceid = rparam['serviceid']
            orderPlatformId = str(rparam['orderid'])[2:]
            msgcontent = rparam['msgcontent']
            sign = rparam['sign']

            # 效验sign
            isOk = PayHelper.verify_md5(sign, mobileId, '#', serviceid, '#',
                                        msgcontent, '#', cls.sign_skey)
            if isOk:
                # 对凌云充值的订单,把手机号补充到订单信息里
                orderPlatformId = ShortOrderIdMap.get_long_order_id(
                    orderPlatformId)
                TyContext.RunMode.get_server_link(orderPlatformId)
                PayHelper.set_order_mobile(orderPlatformId, mobileId)
                operator = PayHelper.get_mobile_operator(mobileId)
                if operator == 'chinaunicom':
                    rparam['chargeType'] = 'linkyununion'
                elif operator == 'chinatelecom':
                    rparam['chargeType'] = 'linkyundx'
                else:
                    TyContext.ftlog.error(
                        cls.__name__,
                        'doLinkYunUnionCallback->ERROR get_mobile_operator for',
                        mobileId)
                if msgcontent == '0:0':
                    PayHelper.callback_ok(orderPlatformId, -1, rparam)
                    return '0'
                else:
                    PayHelper.callback_error(orderPlatformId, '', rparam)
        except:
            TyContext.ftlog.exception()
        TyContext.ftlog.info(cls.__name__,
                             'doLinkYunUnionCallback->ERROR, rparam=', rparam)
        return '0'
Exemple #18
0
    def callback(cls, rpath):
        success = 0
        try:
            rparam = PayHelper.getArgsDict()
            TyContext.ftlog.info(cls.__name__, 'callback rparam=', rparam)

            platformOrderId = rparam['platformOrderId']
            sign = rparam['sign']
            result = rparam['result']

            isOK = PayHelper.verify_md5(sign, platformOrderId, result, cls.sign_skey)
            if isOK:
                if result == '1':
                    isBackOk = PayHelper.callback_ok(platformOrderId, -1, rparam)
                    if isBackOk:
                        success = 1
                else:
                    PayHelper.callback_error(platformOrderId, '', rparam)
        except:
            TyContext.ftlog.exception()

        return '{"result":{"success":%d,"platformOrderId":"%s"}}' % (success, platformOrderId)
Exemple #19
0
    def callback(cls, rpath):
        try:
            rparam = PayHelper.getArgsDict()
            TyContext.ftlog.info(cls.__name__, 'callback->rparam=', rparam)

            orderPlatformId = rparam['mer_trade_code']
            if orderPlatformId.find('-') > 0:
                orderPlatformId = orderPlatformId[0:orderPlatformId.find('-')]

            mer_code = rparam['mer_code']
            bank_pay_flag = rparam['bank_pay_flag']
            sign = rparam['sign']
            total_fee = rparam.get('pay_amount', rparam.get('rec_amount', -1))
            try:
                total_fee = float(total_fee)
            except:
                TyContext.ftlog.error(cls.__name__,
                                      'callback fee error. total_fee',
                                      total_fee)
                total_fee = -1

            del rparam['sign']

            vSign = cls.__build_my_sign__(rparam)
            if sign != vSign:
                raise Exception('sign not equal')

            rparam['sign'] = sign

            if mer_code != cls.merchant_code:
                raise Exception('mer_code is not me !!!')

            rparam['third_orderid'] = rparam['gateway_trade_code']
            if bank_pay_flag == 'success':
                chargeType = cls.bank_code2charge_type_dict.get(
                    rparam.get('bank_code', ''), None)
                if chargeType:
                    rparam['chargeType'] = chargeType

                isOk = PayHelper.callback_ok(orderPlatformId, total_fee,
                                             rparam)
            else:
                bank_pay_flag = bank_pay_flag.decode('utf-8')
                isOk = PayHelper.callback_error(orderPlatformId, bank_pay_flag,
                                                rparam)
            if isOk:
                return 'success'
        except:
            TyContext.ftlog.exception()

        return 'error'
Exemple #20
0
    def doZhuowangCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug('doZhuowangCallback start, rparam=', rparam)

        try:
            sts = rparam['sts']
            shortorderid = rparam['cmd'].split(',')[-1]
        except:
            TyContext.ftlog.error(
                'doZhuowangCallback->ERROR, param error !! rparam=', rparam)
            return 'error'

        orderPlatformId = ShortOrderIdMap.get_long_order_id(shortorderid)
        mobileId = rparam.get('usernumber', 'na')
        PayHelper.set_order_mobile(orderPlatformId, mobileId)
        rparam['third_orderid'] = rparam.get('tnsid', 'na')
        rparam['sub_paytype'] = rparam.get('feetype', 'na')
        if int(sts) != 0:
            errinfo = 'sts(%s) not 0' % sts
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
        else:
            total_fee = float(rparam['feecode']) / 100
            isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        return '0'  # success
Exemple #21
0
class TuYouPayJinritoutiao(object):
    @classmethod
    def charge_data(cls, chargeinfo):
        chargeinfo['chargeData'] = {'fake': ''}
        TyContext.ftlog.debug('TuYouPayJinRiTouTiao charge_data chargeinfo',
                              chargeinfo)

    @classmethod
    def doJinritoutiaoCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doJinritoutiaoCallback rparam', rparam)

        try:
            total_fee = int(rparam['total_fee'])
            trade_status = rparam['trade_status']
            orderPlatformId = rparam['out_trade_no']
            appid = rparam['client_id']

        except Exception as e:
            TyContext.ftlog.error(
                'doJinritoutiaoCallback param error, '
                'exception', e)
            return 'error'

        configs = TyContext.Configure.get_global_item_json(
            'jinritoutiao_config', {})
        try:
            config = configs[appid]
            public_key = _import_rsa_key_(config['pay_ras_pub_key'])
        except Exception, e:
            TyContext.ftlog.error(
                'doJinritoutiaoCallback config or public_key invalid', e)
            return 'error'

        if not cls._check_ras_code(public_key, rparam):
            TyContext.ftlog.error(
                'doJinritoutiaoCallback check rsa sign error', orderPlatformId)
            return 'error'
        if trade_status != '3' and trade_status != '0':
            TyContext.ftlog.error('doJinritoutiaoCallback trade_status ',
                                  trade_status)
            PayHelper.callback_error(orderPlatformId, '支付失败', rparam)
            return 'error'
        PayHelper.callback_ok(orderPlatformId, total_fee / 100.0, rparam)
        return 'success'
Exemple #22
0
    def doYdMmCallback(cls, rpath):
        xmldata = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.info('TuYouPayYdMmWeak.doYdMmCallback in xmldata=',
                             ''.join(xmldata.splitlines()))
        orderPlatformId = ''
        try:
            xmlroot = ElementTree.fromstring(xmldata)

            # orderPlatformId = xmlroot.find('OrderId').text
            orderPlatformId = xmlroot.find(
                '{http://www.monternet.com/dsmp/schemas/}ExData').text
            if not orderPlatformId:
                TyContext.ftlog.info(
                    'TuYouPayYdMmWeak.doYdMmCallback->ERROR, orderPlatformId error !! xmldata=',
                    xmldata)
                return TuYouPayYdMmWeak.XML_RET % ('1')

            OrderID = xmlroot.find(
                '{http://www.monternet.com/dsmp/schemas/}OrderID').text
            #             TradeID = xmlroot.find('{http://www.monternet.com/dsmp/schemas/}TradeID').text
            #             ActionTime = xmlroot.find('{http://www.monternet.com/dsmp/schemas/}ActionTime').text
            AppID = xmlroot.find(
                '{http://www.monternet.com/dsmp/schemas/}AppID').text
            PayCode = xmlroot.find(
                '{http://www.monternet.com/dsmp/schemas/}PayCode').text
            ChannelID = xmlroot.find(
                '{http://www.monternet.com/dsmp/schemas/}ChannelID').text
            TotalPrice = xmlroot.find(
                '{http://www.monternet.com/dsmp/schemas/}TotalPrice'
            ).text  # 单位:分
            MD5Sign = xmlroot.find(
                '{http://www.monternet.com/dsmp/schemas/}MD5Sign').text

        except Exception as e:
            TyContext.ftlog.info(
                'TuYouPayYdMmWeak.doYdMmCallback->xmldata error', e)
            return TuYouPayYdMmWeak.XML_RET % ('1')

        notifys = {
            'xml': xmldata,
            'chargeType': 'ydmm',
            'pay_appid': AppID,
            'third_orderid': OrderID,
            'third_prodid': PayCode
        }

        ProvinceID = xmlroot.find(
            '{http://www.monternet.com/dsmp/schemas/}ProvinceID')
        FeeMSISDN = xmlroot.find(
            '{http://www.monternet.com/dsmp/schemas/}FeeMSISDN')
        OrderType = xmlroot.find(
            '{http://www.monternet.com/dsmp/schemas/}OrderType')
        ReturnStatus = xmlroot.find(
            '{http://www.monternet.com/dsmp/schemas/}ReturnStatus')
        if OrderType is None or OrderType.text == '0':
            TyContext.ftlog.info('doYdMmCallback->isTestOrder: OrderID',
                                 OrderID, 'platformOrder', orderPlatformId,
                                 'OrderType', OrderType.text)
            notifys['isTestOrder'] = True
        if FeeMSISDN is not None:
            notifys['third_userid'] = FeeMSISDN.text
        if ProvinceID is not None:
            notifys['third_provid'] = ProvinceID.text

        if OrderID == '0' * len(OrderID):
            errorMessage = cls.StatusMessage(ReturnStatus)
            TyContext.ftlog.info(
                'TuYouPayYdMmWeak.doYdMmCallback->ERROR, failed order: OrderID: [%s], message: [%s]',
                (OrderID, errorMessage))
            PayHelper.callback_error(orderPlatformId, errorMessage, notifys)
            # 需要回0,否则ydmm会一直重试
            return TuYouPayYdMmWeak.XML_RET % ('0')

        if not cls._check_sign(AppID, OrderID, ChannelID, PayCode, MD5Sign,
                               orderPlatformId):
            order = PlatformOrder(orderPlatformId)
            TyContext.ftlog.error(
                'doYdMmCallback check sign failed, might be config error: orderid',
                orderPlatformId, 'userId', order.userid, 'clientId',
                order.clientid, 'buttonId', order.buttonid, 'AppID', AppID,
                'PayCode', PayCode)
            return TuYouPayYdMmWeak.XML_RET % ('1')

        isOk = PayHelper.callback_ok(orderPlatformId,
                                     float(TotalPrice) / 100.0, notifys)
        # 需要回0,否则ydmm会一直重试
        return TuYouPayYdMmWeak.XML_RET % ('0')
Exemple #23
0
    def doLianTongWoCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info(
            'TuYouPayLianTongWo.doLianTongWoCallback->rparam=', rparam)

        # 订单验证处理
        if 'serviceid' in rparam and rparam['serviceid'] == 'validateorderid':
            return cls._validate_orderid(rparam)

        # 成功回调处理
        xmldata = TyContext.RunHttp.get_body_content()
        # xmldata = '<callbackReq><orderid>XXX</orderid><ordertime>XXX</ordertime>
        # <cpid>XXX</cpid><appid>XXX</appid><fid>XXX</fid><consumeCode>XXX</consumeCode>
        # <payfee>XXX</payfee><payType>XXX</payType><hRet>XXX</hRet>
        # <status>XXX</status><signMsg>XXX</signMsg></callbackReq>'
        TyContext.ftlog.info(
            'TuYouPayLianTongWo.doLianTongWoCallback in xmldata=', xmldata)

        try:
            xmlroot = ElementTree.fromstring(xmldata)

            orderid = xmlroot.find('orderid').text
            if len(orderid) == 24:
                orderPlatformId = orderid[10:]
            else:
                orderPlatformId = orderid

            ordertime = xmlroot.find('ordertime').text
            cpid = xmlroot.find('cpid').text

            if xmlroot.find('appid').text:
                appid = xmlroot.find('appid').text
            else:
                # appid = '905608778920130929155624363800'
                appid = ''

            # appid = xmlroot.find('appid').text
            if appid is None:
                appid = ''
            fid = xmlroot.find('fid').text
            consumeCode = xmlroot.find('consumeCode').text
            payfee = int(xmlroot.find('payfee').text)  # 单位:分
            payType = int(xmlroot.find('payType').text)
            hRet = int(xmlroot.find('hRet').text)
            status = xmlroot.find('status').text
            signMsg = xmlroot.find('signMsg').text
        except Exception as e:
            TyContext.ftlog.info(
                'TuYouPayLianTongWo.doLianTongWoCallback->ERROR, exception', e)
            return TuYouPayLianTongWo.XML_ERRO

        appInfo = cls._get_order_info(orderPlatformId)
        clientId = appInfo.get('clientId', '')

        # tSign = 'orderid='+orderPlatformId+'&ordertime='+ordertime+'&cpid='+cpid
        # +'&appid='+appid+'&fid='+fid+'&consumeCode='+consumeCode
        # +'&payfee='+str(payfee)+'&payType='+str(payType)+'&hRet='+str(hRet)
        # +'&status='+status+'&Key='+TuYouPayLianTongWo.appkeys[str(appid)]
        TyContext.ftlog.debug('TuYouPayLianTongWo.doLianTongWoCallback ->',
                              orderid, ordertime, cpid, appid, fid,
                              consumeCode, payfee, payType, hRet, status,
                              TuYouPayLianTongWo.appkeys)
        tSign = 'orderid=' + orderid + '&ordertime=' + ordertime + '&cpid=' + cpid + '&appid=' + appid + \
                '&fid=' + fid + '&consumeCode=' + consumeCode + '&payfee=' + str(payfee) + '&payType=' + str(payType) + \
                '&hRet=' + str(hRet) + '&status=' + status + '&Key=' + TuYouPayLianTongWo._get_appkey(cpid, clientId)
        vSign = cls._calc_md5_sign(tSign)

        if signMsg != vSign:
            TyContext.ftlog.info(
                'TuYouPayLianTongWo.doLianTongWoCallback->ERROR, sign error !! sign=',
                signMsg, 'vSign=', vSign)
            return TuYouPayLianTongWo.XML_ERRO

        # TyContext.ftlog.info('TuYouPayLianTongWo.doLianTongWoCallback in orderPlatformId=', orderPlatformId, 'hRet=', hRet, 'status=', status)
        notifys = {
            'xml': xmldata,
            'chargeType': 'liantong.wo',
            'pay_appid': appid if appid else 'na',
            'sub_paytype': payType,
            'third_prodid': consumeCode
        }
        provinceid = TyContext.RedisPayData.execute(
            'HGET', 'liantongwo:' + str(orderPlatformId), 'provinceid')
        if provinceid:
            notifys['third_provid'] = provinceid
        # 联通集成其他短信支付以后status码会出现其他值,
        if str(hRet) == '0':  # and str(status) == '00000' :
            isOk = PayHelper.callback_ok(orderPlatformId, -1, notifys)
            if isOk:
                retXml = TuYouPayLianTongWo.XML_OK
            else:
                retXml = TuYouPayLianTongWo.XML_ERRO
        else:
            PayHelper.callback_error(orderPlatformId,
                                     str(hRet) + '|' + str(status), notifys)
            retXml = TuYouPayLianTongWo.XML_OK

        return retXml
Exemple #24
0
    def doAiDongManCallback(cls, rpath):
        xmlData = TyContext.RunHttp.getRequestParam('requestData', '')
        xmlroot = ElementTree.fromstring(xmlData)
        TyContext.ftlog.info('doAiDongManCallback rparam xmlData', xmlData)

        params = OrderedDict()

        params['Behavior'] = xmlroot.find('Behavior').text
        params['Trade_status'] = xmlroot.find('Trade_status').text
        params['Trade_no'] = xmlroot.find('Trade_no').text
        params['Buyer_id'] = xmlroot.find('Buyer_id').text
        params['Extension'] = xmlroot.find('Extension').text

        sign = params['Behavior'] + params['Trade_status'] + params['Trade_no'] + params['Buyer_id'] + params[
            'Extension']

        params['Product_id'] = xmlroot.find('Product_id').text
        params['Product_name'] = xmlroot.find('Product_name').text
        params['Price'] = int(float(xmlroot.find('Price').text))
        params['App_id'] = xmlroot.find('App_id').text
        params['sign'] = xmlroot.find('Sign').text.replace(' ', '+')
        params['sign'] = ''.join(params['sign'].split())

        TyContext.ftlog.info('doAiDongManCallback params', params)

        aidongmanconfig = TyContext.Configure.get_global_item_json('aidongmanpay_config', {})
        if aidongmanconfig:
            cls.encryptKey = aidongmanconfig['3des']['encryptKey']

        # 采用3des加密
        padByte = chr(int(8 - len(sign) % 8))
        ivBytes = ''
        ivSource = aidongmanconfig['3des']['iv']
        for i in ivSource:
            ivBytes = ivBytes + chr(int(i))

        tripelDes = triple_des(unhexlify(cls.encryptKey), mode=CBC, pad=padByte, IV=ivBytes, padmode=PAD_NORMAL)
        sign = tripelDes.encrypt(sign)
        sign = base64.b64encode(sign)

        plantformId = params['Extension'][23:]
        TradeNo = xmlroot.find('Trade_no').text

        params['chargeType'] = 'aidongman'
        params['third_orderid'] = params['Trade_no']

        PayHelper.set_order_mobile(plantformId, params['Buyer_id'])

        TyContext.ftlog.info('doAiDongManCallback sign', sign, 'params[sign]', params['sign'])

        ResponseBody = ElementTree.Element('ResponseBody')
        Trade_no = ElementTree.SubElement(ResponseBody, 'Trade_no')
        Status = ElementTree.SubElement(ResponseBody, 'Status')
        Trade_no.text = str(TradeNo)
        Status.text = '1'
        mo = ElementTree.tostring(ResponseBody)
        if sign == params['sign']:
            if int(params['Trade_status']) == 0 or int(params['Trade_status']) == 1:
                PayHelper.callback_ok(plantformId, float(params['Price']), params)
                Status.text = '0'
                mo = ElementTree.tostring(ResponseBody)
                TyContext.ftlog.info('doAiDongManCallback->SUCCESS rparams', params, 'mo', mo)
                return mo
            else:
                errinfo = '爱动漫支付失败'
                PayHelper.callback_error(plantformId, errinfo, params)
                TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc', errinfo, 'rparams', params, 'mo', mo)
                return mo
        else:
            errinfo = '签名校验失败'
            PayHelper.callback_error(plantformId, errinfo, params)
            TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc', errinfo, 'rparams', params)

        return mo
Exemple #25
0
    def do_yipay_callback(cls, paytype):
        rparam = TyContext.RunHttp.convertArgsToDict()
        try:
            orderPlatformId = rparam['app_orderid']
            mobileId = rparam.get('phone', '')
            if not mobileId and 'phone' in rparam.keys():
                del rparam['phone']
            sign = rparam['sign']
            merc_id = rparam['merc_id']
            status = int(rparam['status'])
            user_id = rparam['userid']
            is_monthly = int(rparam['is_monthly'])
        except Exception as e:
            TyContext.ftlog.error('do_yipay_callback->ERROR, exception', e,
                                  'rparam', rparam)
            return 'error'

        # 签名校验
        appkey_config = TyContext.Configure.get_global_item_json(
            'yipay_appkey_config', {})
        try:
            appkey = appkey_config[merc_id]
        except:
            TyContext.ftlog.error(
                'do_yipay_callback appkey not configed'
                ' for merc_id', merc_id)
            return 'error'
        if not cls._verify_sign(rparam, sign, appkey):
            return 'error'

        rec_amount = rparam['rec_amount']
        pay_amount = rparam['pay_amount']
        if rec_amount != pay_amount:
            TyContext.ftlog.error('do_yipay_callback pay_amount', pay_amount,
                                  'not equal to rec_amount', rec_amount)
        total_fee = float(pay_amount) / 100
        rparam['third_orderid'] = rparam['orderid']
        rparam['sub_paytype'] = rparam['ch_type']
        rparam['chargeType'] = paytype
        rparam['mobileId'] = mobileId
        if status == 1:
            PayHelper.set_order_mobile(orderPlatformId, mobileId)
            # 判断用户购买的是不是包月会员
            if 2 == is_monthly:
                TyContext.ftlog.debug(
                    'TuYouPayYi->doYiPayCallback User [%s] buy monthly goods.'
                    % user_id)
                # 修改用户表,将用户状态置为会员状态
                '''
                if 'message' in rparam:
                    message = rparam['message']
                else:
                    TyContext.ftlog.info('TuYouPayYi->doYiPayCallback ERROR, Doesn\'t has message parameter.'
                                          'userid: [%s], platformorderid: [%s], third_id: [%s]'
                                          % (user_id, orderPlatformId, rparam['third_orderid']))
                    message = '退订请联系会员退订专用电话: 4008-098-000'
                '''
                message = '退订请联系会员退订专用电话: 4008-098-000'
                # 记录购买会员的appId、clientId
                chargeKey = 'sdk.charge:' + orderPlatformId
                chargeInfo = TyContext.RedisPayData.execute(
                    'HGET', chargeKey, 'charge')
                if chargeInfo == None:
                    chargeInfo = {}
                else:
                    chargeInfo = TyContext.strutil.loads(chargeInfo,
                                                         decodeutf8=True)

                appId = chargeInfo.get('appId', 9999)
                clientId = chargeInfo.get('clientId', '')
                diamondId = chargeInfo.get('diamondId', '')

                TyContext.RedisUser.execute(
                    user_id, 'HMSET', 'user:'******'isYouyifuVipUser',
                    '1', 'youyifuVipMsg', message, 'bugYouyifuVipAppid', appId,
                    'bugYouyifuVipClientid', clientId,
                    'bugYouyifuVipDiamondid', diamondId)

                # 这个参数用来告诉游戏服务器,这个商品是一件优易付的会员包月商品
                rparam['isYouyifuMonthVip'] = '1'
                PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
                cls.reportBi(Order.SUBSCRIBE, rparam)
                TyContext.ftlog.info(
                    'TuYouPayYi->doYiPayCallback user %s has subscribed Monthly VIP.'
                    % user_id)
            else:
                PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
            return 'success'
        elif status == 3:
            # 包月退订,修改用户表,将用户状态置为非会员状态,并通知游戏服用户退订
            status = cls._NotifyGameServerUnsubscribe(orderPlatformId, user_id)
            if not status:
                TyContext.ftlog.error(
                    'TuYouPayYi->doYiPayCallback Notify Game server user [%s] unsubscribed ERROR!'
                    % user_id)
                return 'success'
            try:
                TyContext.MySqlSwap.checkUserDate(user_id)
            except:
                TyContext.ftlog.error(
                    'TuYouPayYi->doYiPayCallback get cold data')
            TyContext.RedisUser.execute(user_id, 'HSET', 'user:'******'isYouyifuVipUser', '0')
            cls.reportBi(Order.UNSUBSCRIBE, rparam)
            return 'success'
        else:
            errinfo = '支付失败' + str(rparam.get('status_desc', ''))
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
            return 'success'
Exemple #26
0
    def doAnZhiCallback(cls, rpath):
        postData = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.debug(
            'TuYouPayAnZhi->doAnZhiCallback original postData is:', postData)

        paramslist = postData.split('&')
        rparam = {}
        for k in paramslist:
            paramdata = k.split('=')
            rparam[paramdata[0]] = paramdata[1]
        TyContext.ftlog.debug(
            'TuYouPayAnZhi->doAnZhiCallback parame list(Before urldecode) is: ',
            rparam)

        for k in rparam.keys():
            rparam[k] = unquote(rparam[k])
        TyContext.ftlog.debug(
            'TuYouPayAnZhi->doAnZhiCallback parame list(After urldecode) is: ',
            rparam)

        if 'data' in rparam and 'appId' in rparam:
            data = rparam['data']
            appId = rparam['appId']
        else:
            TyContext.ftlog.error(
                'TuYouPayAnZhi->doAnZhiCallback ERROR There doesn\'t has data or appId in post data.'
            )
            return 'failed'

        anzhiconfig = TyContext.Configure.get_global_item_json(
            'anzhi_config', {})
        if anzhiconfig:
            for item in anzhiconfig:
                if 0 == cmp(item['appId'], appId):
                    cls.encryptKey = item['appsecret']
                    break
            else:
                TyContext.ftlog.error(
                    'TuYouPayAnZhi->doAnZhiCallback ERROR Cann\'t find appsecert, appId is: ',
                    appId)
                return 'success'
        else:
            TyContext.ftlog.error(
                'TuYouPayAnZhi->doAnZhiCallback ERROR cann\'t find anzhi_config.'
            )
            return 'success'

        try:
            # 先用base64解码,再采用3des解密
            tripelDes = triple_des(cls.encryptKey.encode('ascii'),
                                   mode=ECB,
                                   padmode=PAD_NORMAL)
            data = tripelDes.decrypt(base64.b64decode(data))
            data = "".join([data.rsplit("}", 1)[0], "}"])
            TyContext.ftlog.debug('TuYouPayAnZhi->doAnZhiCallback Data is: ',
                                  data)
            params = json.loads(data)
            params['third_orderid'] = params['orderId']  # 三方订单号
            orderPlatformId = params['cpInfo']  # 途游订单号
            orderAmount = params['orderAmount']  # 商品金额(分)
            code = int(params['code'])  # 订单状态 成功:1
            TyContext.ftlog.info('TuYouPayAnZhi->doAnZhiCallback params: ',
                                 params, ' orderPlatformId is: ',
                                 orderPlatformId)
        except Exception as e:
            TyContext.ftlog.error('TuYouPayAnZhi->doAnZhiCallback ERROR: ', e)
            return 'success'

        # 安智的同事说,只会出现code==1的情况,这里只是为了以防万一
        if 1 != code:
            TyContext.ftlog.error()
            errinfo = '安智支付失败'
            PayHelper.callback_error(orderPlatformId, errinfo, params)

        PayHelper.callback_ok(orderPlatformId,
                              float(orderAmount) / 100, params)
        return 'success'
Exemple #27
0
 def userSubscribeFailed(cls, param):
     PayHelper.callback_error(param['platformOrderId'], param['errorcode'] + ':' + param['errormsg'], param)
Exemple #28
0
class TuYouPayHaiMaWan(object):
    @classmethod
    def charge_data(cls, chargeinfo):
        chargeinfo['chargeData'] = {
            'platformOrderId': chargeinfo['platformOrderId']
        }

    @classmethod
    def doPayHaiMaWanCallback(cls, rpath):
        message = {
            0: '订单未支付',
            1: '订单支付成功',
            2: '请求订单失败',
            3: '订单签名失败',
            4: '订单支付失败',
            5: '其他失败',
        }
        rparam = OrderedDict()
        params = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug(
            'TuYouPayHaiMaWan->doHaiMaWanPayCallback params in Requrest is: ',
            params)

        # 获取回掉参数
        try:
            rparam['notify_time'] = params['notify_time']
            rparam['appid'] = params['appid']
            rparam['out_trade_no'] = params['out_trade_no']
            rparam['total_fee'] = params['total_fee']
            rparam['subject'] = params['subject']
            rparam['body'] = params['body']
            rparam['trade_status'] = params['trade_status']
            strSign = unquote(params['sign'])
        except Exception, e:
            TyContext.ftlog.error(
                'TuYouPayHaiMaWan->doHaiMaWanPayCallback get callback param ERROR!',
                e)
            return 'fail'

        # 判断支付状态
        status = int(params['trade_status'])
        if status not in message or 1 != status:
            TyContext.ftlog.error(
                'TuYouPayHaiMaWan->doHaiMaWanPayCallback pay failed, status is: ',
                message[status])
            PayHelper.callback_error(params["out_trade_no"], message[status],
                                     rparam)
            return 'fail'

        # 验证签名
        keyvalue = TyContext.Configure.get_global_item_json(
            'haimawan_config', {})  # 获取海马玩的appkey
        for value in keyvalue:
            if 0 == cmp(value['appid'], params['appid']):
                appkey = value['appkey']
                break
        else:
            TyContext.ftlog.error(
                'uYouPayHaiMaWan->doHaiMaWanPayCallback get appkey ERROR')
            return 'fail'

        rparam['trade_status'] = rparam['trade_status'] + appkey
        strBeforeSign = urlencode(rparam)
        strAfterSign = md5(strBeforeSign).hexdigest()
        TyContext.ftlog.debug(
            'TuYouPayHaiMaWan->doHaiMaWanPayCallback Before sign: [',
            strBeforeSign, '] '
            'After sign: [', strAfterSign, ']')
        if 0 != cmp(strSign, strAfterSign):
            TyContext.ftlog.error(
                'TuYouPayHaiMaWan->doHaiMaWanPayCallback veriry sign failed')
            return 'fail'

        # 发货并返回结果
        orderPlatformId = params["out_trade_no"]
        total_fee = float(params["total_fee"])
        PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        TyContext.ftlog.debug(
            'TuYouPayHaiMaWan->doHaiMaWanPayCallback deliver goods successed.')
        return 'success'
Exemple #29
0
    def _do_all_callback(self, appkey, notifys):
        method = notifys.get('method', '')
        cp_order_id = notifys.get('cp_order_id', '')
        correlator = notifys.get('correlator', '')
        order_time = notifys.get('order_time', '')
        sign = notifys.get('sign', '')

        if method == 'check':  # 订单效验接口
            game_account = ''
            game_fee = ''
            ct = datetime.datetime.now()
            order_current_time = ct.strftime('%Y%m%d%H%M%S')
            if cp_order_id == '' or sign == '':
                return TuYouPayAiGame.XML_CHECK_RET % (cp_order_id, correlator,
                                                       game_account, game_fee,
                                                       '1', order_current_time)

            orderPlatformId = cp_order_id
            appInfo = self._get_order_info(orderPlatformId)
            if 'uid' in appInfo and appInfo['uid'] is not None:
                game_account = appInfo['uid']
            if 'orderPrice' in appInfo and appInfo['orderPrice'] is not None:
                game_fee = appInfo['orderPrice']

            tSign = cp_order_id + str(correlator) + str(
                order_time) + method + appkey
            m = md5()
            m.update(tSign)
            vSign = m.hexdigest()
            if sign != vSign:
                TyContext.ftlog.info(
                    'TuYouPayAiGame._do_all_callback->ERROR, sign error !! sign=',
                    sign, 'vSign=', vSign)
                return TuYouPayAiGame.XML_CHECK_RET % (cp_order_id, correlator,
                                                       game_account, game_fee,
                                                       '1', order_current_time)

            return TuYouPayAiGame.XML_CHECK_RET % (cp_order_id, correlator,
                                                   game_account, game_fee, '0',
                                                   order_current_time)

        elif method == 'callback':  # 成功回调接口
            result_code = notifys.get('result_code', '')
            fee = notifys.get('fee', '-1')  # 单位:元
            try:
                fee = float(fee)
            except:
                TyContext.ftlog.error(
                    'TuYouPayAiGame._do_all_callback->ERROR, fee format error !! fee=',
                    fee)
                fee = -1
            pay_type = notifys.get('pay_type', 'na')

            ct = datetime.datetime.now()
            order_current_time = ct.strftime('%Y%m%d%H%M%S')
            if cp_order_id == '' or sign == '' or method != 'callback':
                return TuYouPayAiGame.XML_RET % ('1', cp_order_id)

            orderPlatformId = cp_order_id
            if appkey:
                tSign = cp_order_id + str(correlator) + str(result_code) + str(
                    int(fee)) + pay_type + method + appkey
                m = md5()
                m.update(tSign)
                vSign = m.hexdigest()
                if sign != vSign:
                    TyContext.ftlog.info(
                        'TuYouPayAiGame._do_all_callback->ERROR,'
                        ' sign error !! sign=', sign, 'vSign=', vSign)
                    return TuYouPayAiGame.XML_RET % ('1', cp_order_id)

            notifys['chargeType'] = 'aigame'
            notifys['sub_paytype'] = pay_type
            notifys['third_orderid'] = correlator
            notifys['pay_appid'] = notifys.get('game_code', 'na')
            if str(result_code) == '00':
                isOk = PayHelper.callback_ok(orderPlatformId, -1, notifys)
                if not isOk:
                    TyContext.ftlog.error(
                        'TuYouPayAiGame._do_all_callback->callback failed',
                        'order', orderPlatformId)
                retXml = TuYouPayAiGame.XML_RET % ('0', cp_order_id)
            else:
                errinfo = TuYouPayAiGame.resultcode_msg.get(
                    result_code, 'result_code(%s) is not 00' % result_code)
                TyContext.ftlog.error('TuYouPayAiGame._do_all_callback error',
                                      errinfo, 'for order', orderPlatformId)
                PayHelper.callback_error(orderPlatformId, errinfo, notifys)
                retXml = TuYouPayAiGame.XML_RET % ('0', cp_order_id)

            return retXml