Esempio n. 1
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'
Esempio n. 2
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'
Esempio n. 3
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
Esempio n. 4
0
 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'
Esempio n. 5
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'
Esempio n. 6
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]
            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'
Esempio 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'
Esempio n. 8
0
    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)
Esempio n. 9
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
Esempio n. 10
0
    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'
Esempio n. 11
0
    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'
Esempio n. 12
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'
Esempio n. 13
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'
Esempio n. 14
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'
Esempio n. 15
0
    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'
Esempio n. 16
0
    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'
Esempio n. 17
0
    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'
Esempio n. 18
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')

        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
Esempio n. 19
0
    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'
Esempio n. 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
Esempio n. 21
0
    def doSmsBindCallBack(cls, rparams):
        TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->rparams=',
                             rparams)
        mobile = rparams['mobile']
        sms = rparams['sms']

        try:
            template = TyContext.Configure.get_global_item_json(
                'smsup_content', decodeutf8=True)
            smsre = template['bindcode_re']
            if smsre and isinstance(smsre, unicode):
                smsre = smsre.encode('utf8')
            shortId = re.match(smsre, sms).group(1)
            if not shortId:
                raise Exception('fail get new format smsupcontent')
            bindOrderId = ShortOrderIdMap.get_long_order_id(shortId)
            TyContext.RunMode.get_server_link(bindOrderId)
            # V4版本绑定手机号
            if TyContext.RedisUserKeys.execute('EXISTS',
                                               'bindOrderV4:%s' % bindOrderId):
                TyContext.RedisUserKeys.execute(
                    'HMSET', 'bindOrderV4:%s' % bindOrderId, 'mobile', mobile,
                    'state', AccountConst.MOBILE_BIND_SUCCESS)
                TyContext.ftlog.info(cls.__name__,
                                     'doSmsBindCallBack->bindOrderV4', mobile,
                                     bindOrderId)
                return
            ### 用来保存订单和手机号的对于关系
            userId, appId, clientId = TyContext.RedisUserKeys.execute(
                'HMGET', 'bindOrder:' + bindOrderId, 'userId', 'appId',
                'clientId')

            if not userId or not clientId:
                TyContext.ftlog.info(cls.__name__,
                                     'doSmsBindCallBack->bind user timed out',
                                     mobile, bindOrderId)
                TyContext.RunMode.del_server_link(bindOrderId)
                return

        except Exception as e:
            TyContext.ftlog.debug(
                '_get_sms_orderid error parsing new format bindOrderId exception',
                e)
            sms = AccountVerify.decode64(sms)
            datas = sms.split('|')
            bindOrderId = datas[0]
            userId = int(datas[1])
            clientId = datas[2]
            appId = int(datas[3])
            TyContext.RunMode.get_server_link(bindOrderId)

        TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->bind user of',
                             mobile, bindOrderId, appId, userId, clientId)

        bindparams = {
            'mobile': mobile,
            'userId': userId,
            'appId': appId,
            'clientId': clientId,
            'bindOrderId': bindOrderId,
        }
        mo = TyContext.Cls_MsgPack()
        AccountBind.doBindByMobile(bindparams, mo)
        TyContext.RunMode.del_server_link(bindOrderId)
Esempio n. 22
0
    def doZhangQuCallback(self, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        sortOrderId = ''
        linkid = ''
        feecode = 0
        try:
            mobileId = rparam['mobile']
            productCode = rparam['code']
            region = rparam['region']
            feecode = rparam['feecode']
            linkid = rparam['linkid']
            goodsInf = rparam['p']
            sortOrderId = str(goodsInf)[-6:]
            sign = rparam['sign']
            desc = rparam['desc']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doZhangQuCallback->ERROR, param error !! rparam=', rparam)
            return 'param error'

        # 效验sign
        tSign = str(mobileId) + str(linkid) + str(
            productCode) + TuYouPayZhangQu.sign_skey
        m = md5()
        m.update(tSign)
        vSign = m.hexdigest()
        if sign != vSign:
            TyContext.ftlog.info(
                'doZhangQuCallback->ERROR, sign error !! sign=', sign,
                'vSign=', vSign)
            return 'sign error'
        if sortOrderId == '':
            TyContext.ftlog.info(
                'doZhangQuCallback->ERROR, orderPlatformId error !! sortOrderId=',
                sortOrderId, 'goodsInf=', goodsInf)
            return 'orderPlatformId error'

        orderPlatformId = ShortOrderIdMap.get_long_order_id(sortOrderId)
        if len(orderPlatformId) != 14:
            TyContext.ftlog.info(
                'doZhangQuCallback->ERROR, orderPlatformId error !! sortOrderId=',
                sortOrderId, 'goodsInf=', goodsInf, 'orderPlatformId=',
                orderPlatformId)
            return 'orderPlatformId error'

        TyContext.RunMode.get_server_link(orderPlatformId)

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

        if str(productCode) == '21000':
            from tysdk.entity.pay.pay import TuyouPay
            trade_status = 'TRADE_FINISHED'
            total_fee = int(int(feecode) / 100)

            isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, total_fee,
                                                trade_status, rparam)
            if isOk:
                return linkid
            else:
                return 'charge fail'

        return 'charge fail'

        pass
Esempio n. 23
0
    def status(cls, mi):

        platformOrderId = mi.getParamStr('platformOrderId')
        platformOrderId = ShortOrderIdMap.get_long_order_id(platformOrderId)
        querynums = mi.getParamInt('querynums')
        appId = mi.getParamInt('appId')
        userId = mi.getParamInt('userId')
        clientId = mi.getParamStr('clientId', 'na')
        paytype = mi.getParamStr('payType', 'na')

        mo = TyContext.Cls_MsgPack()
        mo.setCmd('status')

        chargeKey = 'sdk.charge:' + platformOrderId
        state, chargeInfo, consumemo, errorInfo = TyContext.RedisPayData.execute('HMGET', chargeKey, 'state', 'charge',
                                                                                 'consume:mo', 'errorInfo')
        if state == None or chargeInfo == None:
            mo.setError(1, 'platformOrderId参数错误')
            return mo

        chargeInfo = json.loads(chargeInfo)
        if paytype != 'na':
            chargeInfo['chargeType'] = paytype
        isOK = cls.__query_ext_status__(chargeInfo)
        if isOK:
            state, consumemo, errorInfo = TyContext.RedisPayData.execute('HMGET', chargeKey, 'state', 'consume:mo',
                                                                         'errorInfo')

        if state < PayConst.CHARGE_STATE_CLIENT_PAY_DONE:
            TyContext.RedisPayData.execute('HMSET', chargeKey, 'state', PayConst.CHARGE_STATE_CLIENT_PAY_DONE)
            Order.log(platformOrderId, Order.CLIENT_FINISHED, userId, appId,
                      clientId, paytype=paytype,
                      diamondid=chargeInfo.get('diamondId', 'na'),
                      charge_price=chargeInfo.get('chargeTotal', 'na'),
                      )
            # 对完成客户端请求的订单进行风控,之前在callback里进行风控效果不好,这里把total_fee=0
            # appids -> {"paytype": "appid"}
            appids = PayCodes(clientId).appids
            duandais = TyContext.Configure.get_global_item_json('all_duandai_paytypes', {})
            if paytype in appids.keys() and paytype in duandais:
                paytype = '_'.join([paytype, appids[paytype]])
                RiskControl(userId).record_usage(paytype, 0)

        # 充值中
        if state < PayConst.CHARGE_STATE_DONE:
            return cls.__get_query_mo(mo, state, 'process', chargeInfo, paytype, querynums)

        # 购买成功
        if state == PayConst.CHARGE_STATE_DONE:
            return cls.__get_query_mo(mo, state, 'success', chargeInfo, paytype, querynums)

        # 充值成功
        if state == PayConst.CHARGE_STATE_DONE_CONSUME:
            return cls.__get_query_mo(mo, state, 'success', chargeInfo, paytype, querynums)

        # 发货失败
        if state == PayConst.CHARGE_STATE_ERROR_CONSUME:
            return cls.__get_query_mo(mo, state, 'bug', chargeInfo, paytype, querynums)

        # 支付失败
        if state == PayConst.CHARGE_STATE_ERROR_CALLBACK:
            # 支付失败返回更多支付方式
            failreturnconfig = TyContext.Configure.get_global_item_json('payfail_returnconfig', {})
            payconfig = TyContext.Configure.get_global_item_json('store_payment', clientid=clientId)
            if payconfig and 'payment' in payconfig and 'more_categories' in payconfig['payment']:
                TyContext.ftlog.debug('CHARGE_STATE_ERROR_CALLBACK', payconfig['payment']['more_categories'],
                                      'diamondId', chargeInfo['diamondId'])
                if payconfig['payment']['more_categories'] in failreturnconfig and chargeInfo[
                    'diamondId'] in failreturnconfig:
                    mo.setResult('des', failreturnconfig[chargeInfo['diamondId']]['des'])

                    paytemplate = failreturnconfig[payconfig['payment']['more_categories']]
                    paytemplateconfig = TyContext.Configure.get_global_item_json(paytemplate)
                    mo.setResult('morepaytype', paytemplateconfig)
                    mo.setResult('priority', paytemplateconfig[0]['paytype'])
            return cls.__get_query_mo(mo, state, 'fail', chargeInfo, paytype, querynums)

        # 充值失败
        if errorInfo == None:
            errorInfo = ''
        else:
            errorInfo = u'充值失败原因:' + unicode(errorInfo)

        # 支付失败返回更多支付方式
        failreturnconfig = TyContext.Configure.get_global_item_json('payfail_returnconfig', {})
        payconfig = TyContext.Configure.get_global_item_json('store_payment', clientid=clientId)
        if payconfig and 'payment' in payconfig and 'more_categories' in payconfig['payment']:
            TyContext.ftlog.debug('CHARGE_STATE_ERROR_CALLBACK', payconfig['payment']['more_categories'], 'diamondId',
                                  chargeInfo['diamondId'])
            if payconfig['payment']['more_categories'] in failreturnconfig and chargeInfo[
                'diamondId'] in failreturnconfig:
                mo.setResult('des', failreturnconfig[chargeInfo['diamondId']]['des'])

                paytemplate = failreturnconfig[payconfig['payment']['more_categories']]
                paytemplateconfig = TyContext.Configure.get_global_item_json(paytemplate)
                mo.setResult('morepaytype', paytemplateconfig)
                mo.setResult('priority', paytemplateconfig[0]['paytype'])
        return cls.__get_query_mo(mo, state, 'fail', chargeInfo, paytype, querynums, errorInfo)
Esempio n. 24
0
    def request(cls, mi):
        TyContext.ftlog.debug('---request---mi', mi)
        userId = mi.getParamInt('userId')
        chargeType = mi.getParamStr('chargeType')
        appId = mi.getParamInt('appId', 'na')
        clientId = mi.getParamStr('clientId', 'na')
        platformOrderId = mi.getParamStr('platformOrderId')
        shortId = 'na'
        if ShortOrderIdMap.is_short_order_id_format(platformOrderId):
            shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id(platformOrderId)

        mo = TyContext.Cls_MsgPack()
        mo.setCmd('request')

        chargeKey = 'sdk.charge:' + platformOrderId
        state, chargeInfo = TyContext.RedisPayData.execute('HMGET', chargeKey, 'state', 'charge')
        TyContext.ftlog.debug('TuyouPayRequest request: order', platformOrderId,
                              'state', state, 'charge', chargeInfo)
        if state is None or not chargeInfo:
            mo.setError(1, '充值错误,请关闭界面重试')
            return mo

        if state >= PayConst.CHARGE_STATE_ERROR_REQUEST:
            mo.setError(1, '充值失败,请关闭界面重试')
            return mo

        chargeInfo = json.loads(chargeInfo)
        if chargeInfo['uid'] != userId:
            mo.setError(1, '充值事务错误')
            return mo

        if 'chargeType' not in chargeInfo or chargeInfo['chargeType'] != chargeType:
            chargeInfo['chargeType'] = chargeType
            TyContext.RedisPayData.execute('HMSET', chargeKey, 'charge', json.dumps(chargeInfo))

        state = cls.__request__(chargeType, chargeInfo, mi, mo)
        if state == PayConst.CHARGE_STATE_REQUEST:
            TyContext.RedisPayData.execute('HSET', chargeKey, 'state', state)
            Order.log(platformOrderId, Order.REQUEST_OK, userId,
                      appId, clientId,
                      diamondid=chargeInfo.get('diamondId', 'na'),
                      charge_price=chargeInfo.get('chargeTotal', 'na'),
                      paytype=chargeType)
        elif state == PayConst.CHARGE_STATE_ERROR_REQUEST:
            # mo.setError(1, '充值请求失败')
            errInfo = mo.getErrorInfo()
            TyContext.RedisPayData.execute('HMSET', chargeKey, 'state', state,
                                           'errorInfo', errInfo)
            Order.log(platformOrderId, Order.REQUEST_ERROR, userId, appId,
                      clientId, info=errInfo,
                      diamondid=chargeInfo.get('diamondId', 'na'),
                      charge_price=chargeInfo.get('chargeTotal', 'na'),
                      paytype=chargeType)
        elif state == PayConst.CHARGE_STATE_REQUEST_RETRY \
                or state == PayConst.CHARGE_STATE_REQUEST_IGNORE:
            Order.log(platformOrderId, Order.REQUEST_RETRY, userId,
                      appId, clientId,
                      diamondid=chargeInfo.get('diamondId', 'na'),
                      charge_price=chargeInfo.get('chargeTotal', 'na'),
                      paytype=chargeType)
        else:
            raise Exception('not known state ' + state)
        mo.setResult('status', state)
        return mo