예제 #1
0
    def doCancelOrder(cls, path):
        ''' 用于客户端支付失败后取消订单
            reason 0: user cancel the order for client sdk (e.g. ydmm/ltw) failed
                   1: user cancel the order in the first place
                   2: user cancel the order on sms send fail
                   3: user cancel the order on sms send timeout
        '''
        mi = TyContext.RunHttp.convertToMsgPack()
        platformOrderId = mi.getParamStr('platformOrderId', 'na')
        productOrderId = mi.getParamStr('productOrderId', 'na')
        shortId = 'na'
        if ShortOrderIdMap.is_short_order_id_format(platformOrderId):
            shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id(
                platformOrderId)
        appId = mi.getParamInt('appId', 'na')
        userId = mi.getParamInt('userId', 'na')
        clientId = mi.getParamStr('clientId', 'na')
        paytype = mi.getParamStr('payType', 'na')
        errinfo = mi.getParamStr('errInfo', 'na')
        reason = mi.getParamStr('reason', 'na')

        Order.log(platformOrderId,
                  Order.CLIENT_CANCELED,
                  userId,
                  appId,
                  clientId,
                  shortId=shortId,
                  prodOrderId=productOrderId,
                  paytype=paytype,
                  subevent=reason,
                  info=errinfo if errinfo else 'na')
        mo = TyContext.Cls_MsgPack()
        mo.setCmd('cancelorder')
        mo = mo.packJson()
        return mo
예제 #2
0
    def charge_data(cls, mi):

        chargeinfo = cls.get_charge_info(mi)

        packageName = chargeinfo['packageName']

        appId = chargeinfo['appId']
        buttonId = chargeinfo['diamondId']
        clientId = chargeinfo['clientId']
        # 先取多appId对应的支付配置
        payData = None
        duokuAppId = mi.getParamStr('dksdk_appid', "")
        config = GameItemConfigure(appId).get_game_channel_configure_by_primarykey('duoku', 'dksdk_appid', duokuAppId,
                                                                                   chargeinfo['mainChannel'])
        if config:
            prodconfig = config.get('products', {})
            diamondList = filter(lambda x: buttonId in x.values(), prodconfig)
            payData = diamondList[0] if diamondList else {}
            if payData:
                orderPlatformId = chargeinfo['platformOrderId']
                shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(orderPlatformId)
                payData['orderPlatformId'] = shortOrderPlatformId
                chargeinfo['chargeData'] = payData
                return cls.return_mo(0, chargeInfo=chargeinfo)
        prodconfig = TyContext.Configure.get_global_item_json('duoku_prodids')
        if duokuAppId:
            config = prodconfig.get(duokuAppId, None)
            if config:
                payData = config.get(buttonId, None)
        if not payData:
            if packageName:
                try:
                    appconfig = prodconfig[packageName]
                    payData = appconfig[buttonId]
                except:
                    TyContext.ftlog.exception()
                    raise PayErrorV4(1, '【百度】找不到这个商品[%s]配置!' % buttonId)
            else:
                try:
                    appconfig = prodconfig[str(appId)]
                    payData = appconfig[buttonId]
                except Exception as e:
                    TyContext.ftlog.exception()
                    raise PayErrorV4(1, '【百度】找不到这个商品[%s]配置!' % buttonId)
        orderPlatformId = chargeinfo['platformOrderId']
        shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(orderPlatformId)
        payData['orderPlatformId'] = shortOrderPlatformId
        chargeinfo['chargeData'] = payData
        return cls.return_mo(0, chargeInfo=chargeinfo)
예제 #3
0
    def doIDOCallback(cls, rpath):
        TyContext.ftlog.info('doIDOCallback start')
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderidconfig = TyContext.Configure.get_global_item_json(
                'IDO_orderid', {})
            start = orderidconfig.get(str(rparam['price']), None)[0]
            end = orderidconfig.get(str(rparam['price']), None)[1]
            sortOrderPlatformId = rparam['order_code'][start:end]
            orderPlatformId = ShortOrderIdMap.get_long_order_id(
                sortOrderPlatformId)
            sign = rparam['sign']
        except:
            TyContext.ftlog.error(
                'doIDOCallback->ERROR, param error !! rparam=', rparam)
            return 'error'

            # 签名校验
        if not cls.__verify_sign(rparam, sign):
            TyContext.ftlog.error(
                'TuyouPayIDO.doIDOCallbacksign verify error !!')
            return 'error'

        from tysdk.entity.pay.pay import TuyouPay
        trade_status = 'TRADE_FINISHED'

        isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, -1, trade_status,
                                            rparam)
        if isOk:
            return 'successful'
        else:
            return 'error'
예제 #4
0
    def doBuyStraight(self, userId, params, mo):
        appId = params['appId']
        prodId = params['prodId']
        prodconfig = TyContext.Configure.get_global_item_json(
            'IDO_prodids', {})
        smscodeconfig = TyContext.Configure.get_global_item_json(
            'IDO_smscodes', {})
        data = prodconfig[str(appId)].get(prodId, None)
        if data:
            amount = data['price']
        else:
            raise Exception('can not find IDO product define of prodId=' +
                            prodId)

        orderPlatformId = params['orderPlatformId']
        sortOrderPlatformId = ShortOrderIdMap.get_short_order_id(
            orderPlatformId)
        smsPort = '1065889920'
        smscode = smscodeconfig.get(str(amount), None)
        if smscode:
            smsMsg = smscode.format(orderId=sortOrderPlatformId + '00')
        else:
            raise Exception('can not find IDO smscode in the price=' + amount)

        # type是短信支付的方式,1代表的是发一条短信支付
        smsPayinfo = {'type': '1', 'smsMsg': smsMsg, 'smsPort': smsPort}
        mo.setResult('smsPayinfo', smsPayinfo)
예제 #5
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'
예제 #6
0
파일: paylinkyun.py 프로젝트: lordsky/hall0
 def doLinkYunConfirm(cls, rpath):
     rparam = PayHelper.getArgsDict()
     TyContext.ftlog.info('doLinkYunConfirm->args=', rparam)
     try:
         orderId = rparam['orderId']
         mobileId = rparam['mobileId']
         price = rparam['price']
         goodsInf = rparam['goodsInf']
         sign = rparam['sign']
         # 效验sign
         isOk = PayHelper.verify_md5(sign, orderId, mobileId, price, goodsInf, cls.sign_skey)
         if isOk:
             orderPlatformId = str(goodsInf)[2:]
             orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId)
             TyContext.RunMode.get_server_link(orderPlatformId)
             order_state = TyContext.RedisPayData.execute('HGET', 'sdk.charge:' + str(orderPlatformId), 'state')
             if order_state != None and int(order_state) >= PayConst.CHARGE_STATE_BEGIN and int(
                     order_state) < PayConst.CHARGE_STATE_DONE:
                 return 'Y'
             return 'N'
         else:
             TyContext.ftlog.error('doLinkYunConfirm->ERROR, sign error !! ')
             return 'N'
     except:
         TyContext.ftlog.exception()
         TyContext.ftlog.error('doLinkYunConfirm->ERROR, exception error !! ', rparam)
         return 'N'
예제 #7
0
 def doLinkYunUnionConfirm(cls, rpath):
     rparam = PayHelper.getArgsDict()
     TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionConfirm->args=',
                          rparam)
     try:
         mobileId = rparam['mobile']
         serviceid = rparam['serviceid']
         orderId = rparam['orderid']
         orderPlatformId = str(rparam['orderid'])[2:]
         sign = rparam['sign']
         # 效验sign=mobile#serviceid#orderid#密钥
         isOk = PayHelper.verify_md5(sign, mobileId, '#', serviceid, '#',
                                     orderId, '#', cls.sign_skey)
         if isOk:
             orderPlatformId = ShortOrderIdMap.get_long_order_id(
                 orderPlatformId)
             TyContext.RunMode.get_server_link(orderPlatformId)
             order_state = TyContext.RedisPayData.execute(
                 'HGET', 'sdk.charge:' + str(orderPlatformId), 'state')
             if order_state is not None and int(
                     order_state) >= PayConst.CHARGE_STATE_BEGIN and int(
                         order_state) < PayConst.CHARGE_STATE_DONE:
                 return '0'
     except:
         TyContext.ftlog.exception()
     TyContext.ftlog.info(cls.__name__,
                          'doLinkYunUnionConfirm->ERROR, rparam=', rparam)
     return '1'
예제 #8
0
    def charge_data(cls, chargeinfo):
        mdo_config = TyContext.Configure.get_global_item_json(
            'zwmdo_configs', {})
        price = int(float(chargeinfo['chargeTotal']))
        if not str(price) in mdo_config['smscodes']:
            TyContext.ftlog.error(
                'can not find zhuowang smscode in the price=', price)
            return
        orderPlatformId = chargeinfo['platformOrderId']
        spnumber = mdo_config['spnumber']
        smscode = mdo_config['smscodes'][str(price)]
        shortorderid = ShortOrderIdMap.get_short_order_id(orderPlatformId)
        sms_msg = smscode.format(orderId=shortorderid)

        # type是短信支付的方式,1代表的是发一条短信支付
        userId = chargeinfo['uid']
        if not ClientRevision(userId).support_type0_smspayinfo:
            payinfo = SmsPayInfo.getSmsPayInfo(1, sms_msg, spnumber)
        else:
            no_hint = chargeinfo.get('nohint', None)
            messages = []
            messages.append((spnumber, sms_msg, 1000))
            payinfo = SmsPayInfo.build_sms_payinfo(messages, nohint=no_hint)
        SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'],
                                       chargeinfo['diamondPrice'])
        chargeinfo['chargeData'] = {'smsPayinfo': payinfo}
예제 #9
0
    def charge_data(cls, chargeinfo):
        userId = chargeinfo['uid']
        price = int(float(chargeinfo['chargeTotal']))
        platformOrderId = chargeinfo['platformOrderId']
        shortOrderId = ShortOrderIdMap.get_short_order_id(platformOrderId)

        response, spnumber = cls.__create_order(price, shortOrderId)
        if len(response) == 1:
            TyContext.ftlog.error('TuYouPaySzty create_order failed for user',
                                  userId, 'orderid', platformOrderId,
                                  'response', response)
            return

        sms_msg = response
        if not ClientRevision(userId).support_type0_smspayinfo:
            payinfo = SmsPayInfo.getSmsPayInfo(1, sms_msg, spnumber)
            chargeinfo['chargeData'] = {'smsPayinfo': payinfo}
            return

        messages = [(spnumber, sms_msg, 1000)]
        no_hint = chargeinfo.get('nohint', None)
        payinfo = SmsPayInfo.build_sms_payinfo(messages, nohint=no_hint)
        SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'],
                                       chargeinfo['diamondPrice'])
        chargeinfo['chargeData'] = {'smsPayinfo': payinfo}
예제 #10
0
    def doBuyStraight(self, userId, params, mo):
        prodId = params['prodId']
        appId = params['appId']

        payCode = ''
        orderPhone = '10658077696611'
        if prodId == 'VOICE100':
            payCode = 'YX,258736,1,ff3f,1800529,611001'
        if prodId == 'MOONKEY':
            payCode = 'YX,258736,2,02fb,1800529,611001'
        if prodId == 'CARDMATCH10':
            payCode = 'YX,258736,3,0b75,1800529,611001'
        if prodId == 'T80K':
            payCode = 'YX,258736,4,3e00,1800529,611001'
        if prodId == 'T100K':
            payCode = 'YX,258736,5,9f1f,1800529,611001'
        if prodId == 'RAFFLE_NEW':
            payCode = 'YX,258736,6,a822,1800529,611001'
        if prodId == 'ZHUANYUN_MEZZO':
            payCode = 'YX,258736,7,c9ec,1800529,611001'

        orderPlatformId = ShortOrderIdMap.get_short_order_id(
            params['orderPlatformId'])
        payCode = payCode + ',' + orderPlatformId
        payData = {'msgOrderCode': payCode, 'orderPhone': orderPhone}
        params['payData'] = payData
        mo.setResult('payData', payData)
        mo.setResult('orderPlatformId', orderPlatformId)

        pass
예제 #11
0
    def doLinkYunApiCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doLinkYunApiCallback rparam', rparam)

        try:
            shortOrderPlatformId = rparam['cpparam'][2:]
            mobile = rparam['mobile']
            orderPlatformId = ShortOrderIdMap.get_long_order_id(
                shortOrderPlatformId)
            sign = rparam['sign']
        except:
            TyContext.ftlog.error(
                'doLinkYunApiCallback->ERROR, param error !! rparam=', rparam)
            return 'error'

        # 签名校验
        if not cls.__verify_sign(rparam, sign):
            TyContext.ftlog.error(
                'TuYouPayLinkYunApi.doLinkYunApiCallback verify error !!')
            return 'error'

        rparam['chargeType'] = 'linkyun.api'
        rparam['third_orderid'] = rparam['orderId']
        total_fee = float(rparam['price']) / 100
        PayHelper.set_order_mobile(orderPlatformId, mobile)
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return '0||'
        else:
            return 'error'
예제 #12
0
파일: payido.py 프로젝트: lordsky/hall0
    def charge_data(cls, chargeinfo):
        appId = chargeinfo['appId']
        prodId = chargeinfo.get("prodId", chargeinfo['diamondId'])
        prodconfig = TyContext.Configure.get_global_item_json(
            'IDO_prodids', {})
        smscodeconfig = TyContext.Configure.get_global_item_json(
            'IDO_smscodes', {})
        data = prodconfig[str(appId)].get(prodId, None)
        if data:
            amount = data['price']
        else:
            raise Exception('can not find IDO product define of prodId=' +
                            prodId)

        orderPlatformId = chargeinfo['platformOrderId']
        shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(
            orderPlatformId)
        smsPort = '1065889920'
        smscode = smscodeconfig.get(str(amount), None)
        if smscode:
            smsMsg = smscode.format(orderId=shortOrderPlatformId + '00')
        else:
            raise Exception('can not find IDO smscode in the price=' + amount)

        # type是短信支付的方式,1代表的是发一条短信支付
        smsPayinfo = {'type': '1', 'smsMsg': smsMsg, 'smsPort': smsPort}
        chargeinfo['chargeData'] = {'smsPayinfo': smsPayinfo}
예제 #13
0
파일: payido.py 프로젝트: lordsky/hall0
    def doIDOCallback(cls, rpath):
        TyContext.ftlog.info('doIDOCallback start')
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderidconfig = TyContext.Configure.get_global_item_json(
                'IDO_orderid', {})
            start = orderidconfig.get(str(rparam['price']), None)[0]
            end = orderidconfig.get(str(rparam['price']), None)[1]
            shortOrderPlatformId = rparam['order_code'][start:end]
            orderPlatformId = ShortOrderIdMap.get_long_order_id(
                shortOrderPlatformId)
            sign = rparam['sign']
        except:
            TyContext.ftlog.error(
                'doIDOCallback->ERROR, param error !! rparam=', rparam)
            return 'error'

        # 签名校验
        if not cls.__verify_sign(rparam, sign):
            TyContext.ftlog.error(
                'TuyouPayIDO.doIDOCallbacksign verify error !!')
            return 'error'

        rparam['chargeType'] = 'linkyun.ido'
        rparam['third_orderid'] = rparam['orderID']
        total_fee = float(rparam['price']) / 100
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'successful'
        else:
            return 'error'
예제 #14
0
    def charge_data(cls, chargeinfo):
        appId = chargeinfo['appId']
        buttonId = chargeinfo['buttonId']
        clientId = chargeinfo['clientId']
        packageName = chargeinfo.get('packageName')
        prodconfig = TyContext.Configure.get_global_item_json('duoku_prodids')

        if packageName:
            try:
                appconfig = prodconfig[packageName]
                payData = appconfig[buttonId]
            except:
                TyContext.ftlog.exception()
                raise Exception(
                    'can not find duoku product define: buttonId=' + buttonId +
                    ' clientId=' + clientId)
        else:
            try:
                appconfig = prodconfig[str(appId)]
                payData = appconfig[buttonId]
            except Exception as e:
                TyContext.ftlog.exception()
                raise Exception(
                    'can not find duoku product define: buttonId=' + buttonId +
                    ' clientId=' + clientId)
        orderPlatformId = chargeinfo['platformOrderId']
        shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(
            orderPlatformId)
        payData['orderPlatformId'] = shortOrderPlatformId
        chargeinfo['chargeData'] = payData
예제 #15
0
파일: payhuiyuan.py 프로젝트: lordsky/hall0
    def getUserInfo(cls, smsContent, mobile, status, OrderId, phoneType='na'):
        # 只有当用户订阅的时候,smsContent中才有可能会有订单号,是在_或者ty后面
        redisKey = 'vipuser:'******'TuYouPayHuiYuanBaoYue->getUserInfo status is:[%s] redisKey is:[%s].' % (status, redisKey))

        # 联通和电信用户订阅时,由客户端发送的短信息,含有_订单号;移动用户订阅时,由客户端发短信,第三方回掉,含有ty订单号
        # 第一层控制,通过status,让特定的情况修改redis
        if status and ('_' in smsContent or 'ty' in smsContent):
            if '_' in smsContent:
                shortOrderId = smsContent.split('_')[1]
            else:
                shortOrderId = smsContent.split('ty')[1]

            # 第二层控制,判断短订单号是否和之前的相同
            if HttpGateWay.isShortOrderIdSame(mobile, shortOrderId):
                return HttpGateWay.getUserInfoParam(mobile)

            OrderId[0] = platformOrderId = ShortOrderIdMap.get_long_order_id(shortOrderId)
            TyContext.ftlog.debug('TuYouPayHuiYuanBaoYue->getUserInfo shortOrderId : [%s], platformOrderId :[%s]'
                                  % (shortOrderId, platformOrderId))

            retValue = TyContext.RedisPayData.execute('EXISTS', redisKey)
            if int(retValue) == 1:
                UserInfostatus = cls.getUserInfoStatus(redisKey)
                # 第三层控制,判断之前的订单是否是成功的
                if 0 == cmp(UserInfostatus, 'success'):
                    TyContext.ftlog.error(
                        'TuYouPayHuiYuanBaoYue->getUserInfo Mobile [%s] has already bind to somebody already. ' % mobile)
                    return None

            # 程序能走到这里,只有含有订单号信息的回调、无绑定记录的电话号码、之前绑定的订单号的状态是失败的,这几种情况才可以
            # 举个例子:用户重发订阅时含有订单号的短信,用户再次订阅,联通的状态为91022的回调都不会都到这儿来
            chargeInfo = cls.getChargeInfo(platformOrderId, mobile)
            if not chargeInfo:
                TyContext.ftlog.error(
                    'TuYouPayHuiYuanBaoYue->getUserInfo Doesn\'t exit chargeInfo, key is: sdk.charge:', platformOrderId)
                return None
            try:
                params = {
                    'userId': str(chargeInfo['uid']),
                    'mobile': mobile,
                    'phoneType': phoneType,
                    'iccid': TyContext.UserSession.get_session_iccid(str(chargeInfo['uid'])),
                    'platformOrderId': platformOrderId,
                    'shortOrderId': shortOrderId,
                    'productId': chargeInfo.get('diamondId',
                                                chargeInfo.get('buttonId', chargeInfo.get('prodId', 'na'))),
                    'payType': chargeInfo.get('chargeType', 'na'),
                    'total_fee': chargeInfo['chargeTotal'],
                    'appId': str(chargeInfo['appId']),
                    'clientId': chargeInfo['clientId'],
                    'subscribeTime': time.strftime('%Y-%m-%d %H:%M:%S'),
                    'status': 'create',
                }
            except Exception, e:
                TyContext.ftlog.error('TuYouPayHuiYuanBaoYue->getUserInfo ERROR: ', e)
                return None
            paramsStr = json.dumps(params)
            TyContext.RedisPayData.execute('SET', redisKey, paramsStr)
예제 #16
0
    def doZhuoWangCallback(self, rpath):
        xmldata = TyContext.RunHttp.get_body_content()
        xmldata = xmldata.replace('encoding="gbk"', 'encoding="utf-8"')
        xmldata = unicode(xmldata, encoding='gbk').encode('utf-8')
        TyContext.ftlog.info('zhuowangMdo encode->xmldata=', xmldata)
        transactionId = ''
        try:
            xmlroot = ElementTree.fromstring(xmldata)
            checkCode = xmlroot.find('checkCode').text
            transactionId = xmlroot.find('transactionId').text
            serviceId = xmlroot.find('serviceId').text
            spId = xmlroot.find('spId').text
            serviceType = xmlroot.find('serviceType').text
            feeType = xmlroot.find('feeType').text
            # 获取orderPlatformId
            orderPlatformId = ''
            parmMap = xmlroot.getiterator("paramMap")[0]
            for x in parmMap:
                k, v = x.getchildren()
                if k.text == 'command':
                    orderPlatformId = v.text
                    orderPlatformId = orderPlatformId.split(',')[-1]
                    orderPlatformId = ShortOrderIdMap.get_long_order_id(
                        orderPlatformId)
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doZhuoWangCallback->ERROR, param error !! xmldata=', xmldata)
            return TuYouPayZhuoWang.XML_RET % (transactionId, '0')

        if len(orderPlatformId) != 14:
            TyContext.ftlog.info(
                'doZhuoWangCallback->ERROR, orderPlatformId error !!',
                'orderPlatformId=', orderPlatformId)
            return TuYouPayZhuoWang.XML_RET % (transactionId, '0')

        TyContext.RunMode.get_server_link(orderPlatformId)

        if str(checkCode) == '000':
            from tysdk.entity.pay.pay import TuyouPay
            trade_status = 'TRADE_FINISHED'
            notifys = {'xml': xmldata}
            isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, -1,
                                                trade_status, notifys)
            if isOk:
                ret_msg = TuYouPayZhuoWang.XML_RET % (transactionId, '1')
            else:
                ret_msg = TuYouPayZhuoWang.XML_RET % (transactionId, '0')

            ret_msg = unicode(ret_msg, encoding='utf-8').encode('gbk')
            return ret_msg

        pass
예제 #17
0
파일: httppayv3.py 프로젝트: lordsky/hall0
    def doCancelOrder(cls, path):
        ''' 用于客户端支付失败后取消订单
            reason 0: user cancel the order for client sdk (e.g. ydmm/ltw) failed
                   1: user cancel the order in the first place
                   2: user cancel the order on sms send fail
                   3: user cancel the order on sms send timeout
        '''
        mi = TyContext.RunHttp.convertToMsgPack()
        platformOrderId = mi.getParamStr('platformOrderId', 'na')
        productOrderId = mi.getParamStr('productOrderId', 'na')
        shortId = 'na'
        if ShortOrderIdMap.is_short_order_id_format(platformOrderId):
            shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id(platformOrderId)
        appId = mi.getParamInt('appId', 'na')
        userId = mi.getParamInt('userId', 'na')
        clientId = mi.getParamStr('clientId', 'na')
        paytype = mi.getParamStr('payType', 'na')
        errinfo = mi.getParamStr('errInfo', 'na')
        reason = mi.getParamStr('reason', 'na')

        chargeKey = 'sdk.charge:' + platformOrderId
        chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey, 'charge')
        if chargeInfo == None:
            chargeInfo = {}
        else:
            chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True)

        Order.log(platformOrderId, Order.CLIENT_CANCELED, userId, appId, clientId,
                  shortId=shortId, prodOrderId=productOrderId, paytype=paytype,
                  prodid=chargeInfo.get('prodId', 'na'),
                  diamondid=chargeInfo.get('diamondId', 'na'),
                  charge_price=chargeInfo.get('chargeTotal', 'na'),
                  subevent=reason, info=errinfo if errinfo else 'na')
        mo = TyContext.Cls_MsgPack()
        mo.setCmd('cancelorder')
        mo = mo.packJson()
        return mo
예제 #18
0
파일: paylinkyun.py 프로젝트: lordsky/hall0
    def doLinkYunCallback(self, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        orderPlatformId = ''
        try:
            orderId = rparam['orderId']
            mobileId = rparam['mobileId']
            # productCode = rparam['productCode']
            price = rparam['price']
            goodsInf = rparam['goodsInf']
            orderPlatformId = str(goodsInf)[2:]
            sign = rparam['sign']
        except:
            TyContext.ftlog.info(
                'doLinkYunCallback->ERROR, param error !! rparam=', rparam)
            return '1||param error'

        # 效验sign
        tSign = str(orderId) + str(mobileId) + str(price) + str(
            goodsInf) + TuYouPayLinkYun.sign_skey
        m = md5()
        m.update(tSign)
        vSign = m.hexdigest()
        if sign != vSign:
            TyContext.ftlog.info(
                'doLinkYunCallback->ERROR, sign error !! sign=', sign,
                'vSign=', vSign)
            return '1||sign error'
        if orderPlatformId == '':
            TyContext.ftlog.info(
                'doLinkYunCallback->ERROR, orderPlatformId error !! orderPlatformId=',
                orderPlatformId, 'goodsInf=', goodsInf)
            return '1||orderPlatformId error'

        orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId)
        TyContext.RunMode.get_server_link(orderPlatformId)

        # 对凌云充值的订单,把手机号补充到订单信息里
        self.__set_order_mobile__(orderPlatformId, mobileId)

        rparam['third_orderid'] = orderId
        total_fee = int(float(price) / 100)
        isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, total_fee,
                                            'TRADE_FINISHED', rparam)
        if isOk:
            return '0||'
        else:
            return '1||charge fail'
예제 #19
0
파일: paylinkyun.py 프로젝트: lordsky/hall0
    def doLinkYunUnionCallback(self, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        orderPlatformId = ''
        try:
            mobileId = rparam['mobile']
            serviceid = rparam['serviceid']
            orderPlatformId = str(rparam['orderid'])[2:]
            msgcontent = rparam['msgcontent']
            sign = rparam['sign']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doLinkYunUnionCallback->ERROR, param error !! rparam=',
                rparam)
            return '0'

        # 效验sign
        tSign = str(mobileId) + '#' + str(serviceid) + '#' + str(
            msgcontent) + '#' + TuYouPayLinkYun.sign_skey
        m = md5()
        m.update(tSign)
        vSign = m.hexdigest()
        if sign != vSign:
            TyContext.ftlog.info(
                'doLinkYunUnionCallback->ERROR, sign error !! sign=', sign,
                'vSign=', vSign)
            return '0'
        if orderPlatformId == '':
            TyContext.ftlog.info(
                'doLinkYunUnionCallback->ERROR, orderPlatformId error !! orderPlatformId=',
                orderPlatformId)
            return '0'

        orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId)
        TyContext.RunMode.get_server_link(orderPlatformId)

        # 对凌云充值的订单,把手机号补充到订单信息里
        self.__set_order_mobile__(orderPlatformId, mobileId)

        if msgcontent == '0:0':
            TuyouPay.doBuyChargeCallback(orderPlatformId, -1, 'TRADE_FINISHED',
                                         rparam)

        return '0'
예제 #20
0
    def doDuoKuCallback(cls, rpath):
        TyContext.ftlog.info('doDuoKuCallback start')
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            shortOrderPlatformId = rparam['cpdefinepart']
            orderPlatformId = ShortOrderIdMap.get_long_order_id(shortOrderPlatformId)
            appId = rparam['appid']
            sign = rparam['sign']
            unit = rparam['unit']
            amount = rparam['amount']
            status = rparam['status']
            mobileId = rparam.get('phone', '')
        except:
            TyContext.ftlog.info('doDuoKuCallback->ERROR, param error !! rparam=', rparam)
            TyContext.ftlog.exception()
            return 'failure'
        if status != 'success':
            PayHelperV4.callback_error(orderPlatformId, 'pay fail', rparam)
            return 'failure'
        paykey_dict = TyContext.Configure.get_global_item_json('duoku_paykeys', {})
        paykey = paykey_dict.get(appId, "")
        if not paykey:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(orderPlatformId)
            paykey = config.get('dksdk_appsecret', "")
            if not paykey:
                TyContext.ftlog.error("doDuokuCallback", "cannot get %s sdkconfig" % appId)
        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            return 'failure'

        if unit == 'fen':
            total_fee = float(amount) / 100
        else:
            total_fee = float(amount)
        ChargeModel.save_third_pay_order_id(orderPlatformId, rparam.get('orderid'))
        rparam['chargeType'] = 'duoku'
        rparam['third_orderid'] = rparam['orderid']
        PayHelperV4.set_order_mobile(orderPlatformId, mobileId)
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'success'
        else:
            return 'failure'
예제 #21
0
    def doDuoKuCallback(cls, rpath):
        TyContext.ftlog.info('doDuoKuCallback start')
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            shortOrderPlatformId = rparam['cpdefinepart']
            orderPlatformId = ShortOrderIdMap.get_long_order_id(
                shortOrderPlatformId)
            appId = rparam['appid']
            sign = rparam['sign']
            unit = rparam['unit']
            amount = rparam['amount']
            status = rparam['status']
            mobileId = rparam.get('phone', '')
        except:
            TyContext.ftlog.info(
                'doDuoKuCallback->ERROR, param error !! rparam=', rparam)
            TyContext.ftlog.exception()
            return 'failure'
        if status != 'success':
            PayHelper.callback_error(orderPlatformId, 'pay fail', rparam)
            return 'failure'

        paykey_dict = TyContext.Configure.get_global_item_json(
            'duoku_paykeys', {})
        paykey = str(paykey_dict[str(appId)])

        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            return 'failure'

        if unit == 'fen':
            total_fee = float(amount) / 100
        else:
            total_fee = float(amount)

        rparam['chargeType'] = 'duoku'
        rparam['third_orderid'] = rparam['orderid']
        PayHelper.set_order_mobile(orderPlatformId, mobileId)
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'success'
        else:
            return 'failure'
예제 #22
0
    def doGetSmsBindCode(cls, rparams, mo):
        TyContext.ftlog.info(cls.__name__, 'doGetSmsBindCode->rparams=',
                             rparams)
        appId = rparams['appId']
        clientId = rparams['clientId']
        userId = rparams['userId']

        bound = False
        if userId > 0:
            bindMobile = TyContext.RedisUser.execute(userId, 'HGET',
                                                     'user:'******'bindMobile')
            if bindMobile is not None and len(str(bindMobile)) == 11:
                bound = True

        if bound:
            mo.setResult('code', AccountConst.CODE_USER_MOBILE_BINDED)
            mo.setResult('info', '当前账号已绑定手机')
            return

        bindOrderId = TyContext.ServerControl.makeSmsBindOrderIdV3(
            userId, appId, clientId)
        shortId = ShortOrderIdMap.get_short_order_id(bindOrderId)
        smsconfig = TyContext.Configure.get_global_item_json(
            'smsup_content', {})
        sms = smsconfig['bindcode'] % int(shortId)
        mo.setResult('code', 0)
        mo.setResult('sms', sms)
        ###
        TyContext.RedisUserKeys.execute('HMSET', 'bindOrder:' + bindOrderId,
                                        'state',
                                        AccountConst.MOBILE_BIND_PENDING,
                                        'userId', userId, 'appId', appId,
                                        'clientId', clientId)
        TyContext.RedisUserKeys.execute('EXPIRE', 'bindOrder:' + bindOrderId,
                                        5 * 60)
        mo.setResult('bindOrderId', bindOrderId)
        smsup_port = TyContext.Configure.get_global_item_str('smsup_port')
        mo.setResult('port', smsup_port)
        TyContext.ftlog.info(cls.__name__, 'doGetSmsBindCode->bindOrderId=',
                             bindOrderId, 'userid=', userId, 'sms', sms,
                             'port', smsup_port)
예제 #23
0
    def doBuyStraight(self, userId, params, mo):
        prodId = params['prodId']

        payCode = ''
        orderPhone = ''
        if prodId == 'T20K' or prodId == 'CARDMATCH10' or prodId == 'MOONKEY' or prodId == 'TGBOX1' or prodId == 'T3_NS_COIN_2' or prodId == 'COIN8' or prodId == 'TEXAS_COIN1' or prodId == 'C2':
            payCode = 'YY,11,10026'
            orderPhone = '10658035616002'

        sortOrderId = ShortOrderIdMap.get_short_order_id(
            params['orderPlatformId'])
        payData = {
            'msgOrderCode': payCode,
            'orderPhone': orderPhone,
            'sortOrderId': sortOrderId
        }
        params['payData'] = payData
        mo.setResult('payData', payData)

        pass
예제 #24
0
파일: charge.py 프로젝트: lordsky/hall0
    def _charge_data(cls, chargeinfo):
        duandai_paytypes = TyContext.Configure.get_global_item_json("all_duandai_paytypes")
        noncfg_paytypes = TyContext.Configure.get_global_item_json("nonconfigured_duandai_paytypes")
        chargeType = chargeinfo['chargeType']
        cfun, cdata = None, {}
        if chargeType in duandai_paytypes and chargeType not in noncfg_paytypes:
            phoneType = TyContext.UserSession.get_phone_type_code(chargeinfo['phoneType'])
            _, cdata = cls._get_duandai_paydata(
                chargeinfo['appId'], chargeinfo['buttonId'], chargeinfo['clientId'],
                phoneType, chargeinfo)
            chargeinfo['chargeData'] = cdata
        else:
            if chargeType in cls._charg_data_funs:
                cfun = cls._charg_data_funs[chargeType]
            else:
                if chargeType in TuyouPayChargeConf.CHARGE_DATA:
                    cpath = TuyouPayChargeConf.CHARGE_DATA[chargeType]
                    tks = cpath.split('.')
                    mpackage = '.'.join(tks[0:-1])
                    clsName = tks[-1]
                    clazz = None
                    exec 'from %s import %s as clazz' % (mpackage, clsName)
                    cfun = getattr(clazz, 'charge_data')
                    cls._charg_data_funs[chargeType] = cfun
                else:
                    cls._charg_data_funs[chargeType] = None
            if cfun:
                try:
                    cfun(chargeinfo)
                    cdata = chargeinfo['chargeData']
                except:
                    pass

        TyContext.ftlog.debug('_charge_data', 'chargeinfo', chargeinfo,
                              'cfun', cfun, 'cdata', cdata)
        if not cdata:
            return
        if cdata.get('need_short_order_id', 0) == 1:
            chargeinfo['shortDiamondOrderId'] = \
                ShortOrderIdMap.get_short_order_id(chargeinfo['platformOrderId'])
예제 #25
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'
예제 #26
0
파일: paylinkyun.py 프로젝트: lordsky/hall0
    def doLinkYunLtsdkCallback(self, rpath):
        clientIp = TyContext.RunHttp.get_client_ip()
        TyContext.ftlog.info('doLinkYunLtsdkCallback in clientIp=', clientIp)
        '''
        if not clientIp in ('219.238.157.144','125.39.218.102'):
            return '1'
        '''
        rparam = TyContext.RunHttp.convertArgsToDict()

        orderPlatformId = ''
        try:
            mobileId = rparam['mobile']
            transactionId = rparam['transactionId']
            orderPlatformId = rparam['outTradeNo']
            status = rparam['status']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doLinkYunLtsdkCallback->ERROR, param error !! rparam=',
                rparam)
            return '1'

        if orderPlatformId == '':
            TyContext.ftlog.info(
                'doLinkYunLtsdkCallback->ERROR, orderPlatformId error !! orderPlatformId=',
                orderPlatformId)
            return '1'

        orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId)
        TyContext.RunMode.get_server_link(orderPlatformId)

        # 对凌云充值的订单,把手机号补充到订单信息里
        self.__set_order_mobile__(orderPlatformId, mobileId)

        if int(status) == 4:
            TuyouPay.doBuyChargeCallback(orderPlatformId, -1, 'TRADE_FINISHED',
                                         rparam)

        return '0'
예제 #27
0
파일: paylinkyun.py 프로젝트: lordsky/hall0
    def doLinkYunUnionConfirm(self, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            mobileId = rparam['mobile']
            serviceid = rparam['serviceid']
            orderId = rparam['orderid']
            orderPlatformId = str(rparam['orderid'])[2:]
            sign = rparam['sign']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doLinkYunUnionConfirm->ERROR, param error !! rparam=', rparam)
            return '1'

        # 效验sign=mobile#serviceid#orderid#密钥
        tSign = str(mobileId) + '#' + str(serviceid) + '#' + str(
            orderId) + '#' + TuYouPayLinkYun.sign_skey
        m = md5()
        m.update(tSign)
        vSign = m.hexdigest()
        if sign != vSign:
            TyContext.ftlog.info(
                'doLinkYunUnionConfirm->ERROR, sign error !! sign=', sign,
                'vSign=', vSign)
            return '1'
        else:
            # 新增对订单状态确认,避免玩家重复发同一订单的问题
            # 获取订单状态,如果订单状态大于1,则返回凌云N
            orderPlatformId = ShortOrderIdMap.get_long_order_id(
                orderPlatformId)
            TyContext.RunMode.get_server_link(orderPlatformId)
            order_state = TyContext.RedisPayData.execute(
                'HGET', 'platformOrder:' + str(orderPlatformId), 'state')
            if order_state != None and int(order_state) > 1:
                return '1'

            return '0'
예제 #28
0
파일: paylinkyun.py 프로젝트: lordsky/hall0
    def doLinkYunConfirm(self, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderId = rparam['orderId']
            mobileId = rparam['mobileId']
            # productCode = rparam['productCode']
            price = rparam['price']
            goodsInf = rparam['goodsInf']
            orderPlatformId = str(goodsInf)[2:]
            sign = rparam['sign']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doLinkYunConfirm->ERROR, param error !! rparam=', rparam)
            return 'N'
        # 效验sign
        tSign = str(orderId) + str(mobileId) + str(price) + str(
            goodsInf) + TuYouPayLinkYun.sign_skey
        m = md5()
        m.update(tSign)
        vSign = m.hexdigest()
        if sign != vSign:
            TyContext.ftlog.info(
                'doLinkYunConfirm->ERROR, sign error !! sign=', sign, 'vSign=',
                vSign)
            return 'N'
        else:
            orderPlatformId = ShortOrderIdMap.get_long_order_id(
                orderPlatformId)
            TyContext.RunMode.get_server_link(orderPlatformId)
            # 新增对订单状态确认,避免玩家重复发同一订单的问题
            # 获取订单状态,如果订单状态大于1,则返回凌云N
            order_state = TyContext.RedisPayData.execute(
                'HGET', 'platformOrder:' + str(orderPlatformId), 'state')
            if order_state != None and int(order_state) > 1:
                return 'N'
            return 'Y'
예제 #29
0
    def get_charge_data(cls, chargeinfo):
        ''' delegate to charge_data func of thirdpay '''
        cfun = TuyouPayChargeConf.get_charge_data_func(
            chargeinfo['chargeType'])
        try:
            cfun(chargeinfo)
        except TyContext.FreetimeException as e:
            raise
        except Exception as e:
            TyContext.ftlog.exception()
            return

        if 'chargeData' not in chargeinfo and 'chargeCategories' not in chargeinfo:
            raise Exception(
                'neither chargeData nor chargeCategories in chargeinfo')

        try:
            if chargeinfo['chargeData'].get('need_short_order_id', 0):
                chargeinfo[
                    'shortDiamondOrderId'] = ShortOrderIdMap.get_short_order_id(
                        chargeinfo['platformOrderId'])
        except:
            pass
예제 #30
0
파일: paylinkyun.py 프로젝트: lordsky/hall0
    def doLinkYunCallback(cls, rpath):
        rparam = PayHelper.getArgsDict()
        TyContext.ftlog.info('doLinkYunCallback->args=', rparam)
        try:
            orderId = rparam['orderId']
            mobileId = rparam['mobileId']
            price = rparam['price']
            goodsInf = rparam['goodsInf']
            sign = rparam['sign']
            isOk = PayHelper.verify_md5(sign, orderId, mobileId, price, goodsInf, cls.sign_skey)
            # 效验sign
            if not isOk:
                TyContext.ftlog.info('doLinkYunCallback->ERROR, sign error !!')
                return '1||sign error'

            platformOrderId = str(goodsInf)[2:]
            if not platformOrderId:
                TyContext.ftlog.info('doLinkYunCallback->ERROR, platformOrderId error !!')
                return '1||orderPlatformId error'

            # 对凌云充值的订单,把手机号补充到订单信息里
            platformOrderId = ShortOrderIdMap.get_long_order_id(platformOrderId)
            TyContext.RunMode.get_server_link(platformOrderId)
            PayHelper.set_order_mobile(platformOrderId, mobileId)

            rparam['chargeType'] = 'linkyun'
            rparam['third_orderid'] = orderId
            total_fee = float(price) / 100
            isOk = PayHelper.callback_ok(platformOrderId, total_fee, rparam)
            if isOk:
                return '0||'
            else:
                return '1||charge fail'
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info('doLinkYunCallback->ERROR, param error !! rparam=', rparam)
            return '1||charge exception'