Esempio n. 1
0
 def doCallback(cls, rpath):
     rparams = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.debug('TuYouPayM4399->doCallback, rparams=', rparams)
     orderid = rparams['orderid']
     p_type = rparams['p_type']
     uid = rparams['uid']
     money = rparams['money']
     gamemoney = rparams['gamemoney']
     serverid = rparams.get('serverid', '')
     mark = rparams.get('mark', '')
     roleid = rparams.get('roleid', '')
     time = rparams.get('time', '')
     sign = rparams.get('sign', '')
     ###
     platformOrderId = mark
     chargeKey = 'sdk.charge:m4399:%s' % platformOrderId
     appKey, appSecret = TyContext.RedisPayData.execute(
         'HMGET', chargeKey, 'appKey', 'appSecret')
     # TyContext.ftlog.debug('TuYouPayM4399->get order info:', 'userId=%s platformOrderId=%s appKey=%s' % (userId, platformOrderId, appKey))
     signList = [
         orderid, uid, money, gamemoney, serverid, appSecret, mark, roleid,
         time
     ]
     mysign = hashlib.md5(''.join(signList)).hexdigest()
     if mysign != sign:
         TyContext.ftlog.error(
             'doIDOCallback->ERROR, sign error !! rparam=', rparams)
         return '{"status":1, "code":"sign_error", "money":"%s", "gamemoney":"%s", "msg":"充值成功"}' % (
             money, gamemoney)
     # do charge
     isOk = PayHelper.callback_ok(platformOrderId, -1, rparams)
     if isOk:
         return '{"status":2,"code":null, "money":"%s", "gamemoney":"%s", "msg":"充值成功"}' % (
             money, gamemoney)
     else:
         return '{"status":1,"code":"other_error", "money":"%s", "gamemoney":"%s", "msg":"充值成功"}' % (
             money, gamemoney)
Esempio n. 2
0
    def doOppoCallback(self, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        orderPlatformId = ''
        try:
            notifyId = rparam['notifyId']
            orderPlatformId = rparam['partnerOrder']

            productName = rparam['productName']
            productDesc = rparam['productDesc']
            price = rparam['price']
            count = rparam['count']
            attach = rparam['attach']
            sign = rparam['sign']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doOppoCallback->ERROR, param error !! rparam=', rparam)
            return 'result=FAIL&resultMsg=参数错误'

        baseString = 'notifyId=' + notifyId + '&partnerOrder=' + orderPlatformId + '&productName=' + productName + '&productDesc=' + productDesc + '&price=' + str(
            price) + '&count=' + str(count) + '&attach=' + attach
        # 签名校验
        if not rsaVerify(baseString, sign, 'oppo'):
            TyContext.ftlog.error(
                'TuyouPayOppo.doOppoCallback rsa verify error !!')
            return 'result=FAIL&resultMsg=签名验证失败'

        total_fee = float(price) / 100
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'result=OK&resultMsg=成功'
        else:
            return 'result=FAIL&resultMsg=发商品失败'

        pass
Esempio n. 3
0
    def __pay_card_request__(cls, chargeInfo, mi, mo, cardType):
        rparam = cls.__get_card_request_params__(chargeInfo, mi, mo, cardType)
        if not rparam:
            return PayConst.CHARGE_STATE_REQUEST_RETRY

        cardUrl = cls.szf_url + '?' + PayHelper.createLinkString4Get(rparam)
        TyContext.ftlog.info('TuYouPaySzf->requestUrl=', cardUrl)
        response, cardUrl = TyContext.WebPage.webget(cardUrl, {})
        TyContext.ftlog.info('TuYouPaySzf->requestUrl=', cardUrl, 'response=', response)
        status = 0
        try:
            status = int(response)
        except:
            status = 0
        if status != 200:
            if status in cls.szf_request_code:
                errInfo = cls.szf_request_code[status]
            else:
                errInfo = '充值卡支付失败'
            errInfo = errInfo.decode('utf-8')
            mo.setError(1, errInfo)
            return PayConst.CHARGE_STATE_REQUEST_IGNORE
        else:
            return PayConst.CHARGE_STATE_REQUEST
Esempio n. 4
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'
Esempio n. 5
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')
Esempio n. 6
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
Esempio n. 7
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'
Esempio n. 8
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'
Esempio n. 9
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'
Esempio n. 10
0
 def __build_my_sign__(cls, rparam):
     rstr = PayHelper.createLinkString(rparam) + cls.merchant_security_code
     ret = PayHelper.md5(rstr)
     return ret
Esempio n. 11
0
 def userSubscribeFailed(cls, param):
     PayHelper.callback_error(param['platformOrderId'], param['errorcode'] + ':' + param['errormsg'], param)
Esempio n. 12
0
                                               'user:'******'diamond')
        if isinstance(userCoin, (int, float)):
            userCoin = int(userCoin)
        else:
            userCoin = 0
        expected = userCoin + num_diamonds
        added = balance - userCoin
        if added > 0:
            if added != num_diamonds:
                TyContext.ftlog.error(
                    'PayTencent get_balance_m unexpected: added', added,
                    'expected', num_diamonds)
            # TODO RMB to diamond ratio is 1:10 now. hard-code 10.0 here.
            # refactor in the future to calculate the ratio from diamond list
            isOk = PayHelper.callback_ok(orderPlatformId, added / 10.0, rparam)
            return True
        elif added < 0:
            # isOk = PayHelper.callback_error(orderPlatformId,
            # 'diamond out-of-sync', rparam)
            TyContext.ftlog.error(
                'PayTencent get_balance_m diamond out-of-sync: '
                'remote:', balance, 'local:', userCoin)
            return False
        else:
            TyContext.ftlog.debug(
                'PayTencent get_balance_m diamond not changed:', balance)
            return False

    ##################################################################
    ######     UNUSED CODE, LEAVE FOR LATER USE      #################
Esempio n. 13
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
Esempio n. 14
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
Esempio n. 15
0
 def charge_data(cls, chargeinfo):
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/uc/callback'
     TyContext.ftlog.debug('TuYouPayUc charge_data callback url=',
                           notifyurl)
     chargeinfo['chargeData'] = {'notifyUrl': notifyurl}