Exemple #1
0
    def _record_charge_event(cls, appId, userId, chip_count, diamond_count,
                             trans_id, product_name, paytype):
        clientId = TyContext.UserSession.get_session_clientid(userId)
        total_fee = chip_count / 10000.0 + diamond_count / 10.0

        # fake platform order, for gdss' sake
        ts = int(time.time())
        seqNum = int(TyContext.RedisMix.execute('INCR',
                                                'global.orderid.seq.a'))
        fake_order = paytype + TyContext.strutil.tostr62(ts, 6) + \
                     TyContext.strutil.tostr62(seqNum, 3)

        ct = datetime.now()
        paykey = ct.strftime('pay:%Y%m%d')
        name = u'%d钻石' % diamond_count if diamond_count else u'%d金币' % chip_count
        payinfo = {
            'time': ct.strftime('%Y%m%d%H%M%S'),
            'uid': userId,
            'appId': appId,
            'name': name,
            'fee': total_fee,
            'type': paytype,
            'clientId': clientId,
            'tyOrderId': fake_order,
            'appOrderId': trans_id,
            'prodId': product_name,
        }
        TyContext.RedisPayData.execute('LPUSH', paykey, json.dumps(payinfo))
        # XXX 这里payCount加1不严格,但为了首充礼包,先加上。暂时无副作用
        PayHelper.incr_paycount(userId)
        TyContext.RedisUser.execute(userId, 'HINCRBYFLOAT',
                                    'user:'******'chargeTotal',
                                    total_fee)
Exemple #2
0
 def get_sign_and_pay_params(self, chargeInfo):
     sParaTemp = {}
     sParaTemp["service"] = "alipay.acquire.page.createandpay"
     appId = chargeInfo['appId']
     packageName = chargeInfo.get('packageName')
     partnerParam = self.getPartnerParam(appId=appId,
                                         packageName=packageName)
     if not partnerParam:
         sParaTemp["partner"] = self.PARTNER
     else:
         sParaTemp["partner"] = partnerParam['partnerId']
     external_user_id = '%s@%s' % (chargeInfo['userId'],
                                   chargeInfo['appId'])
     # sParaTemp["seller_id"] =  self.SELLER_ID
     sParaTemp["_input_charset"] = 'utf-8'
     sParaTemp['out_trade_no'] = chargeInfo['platformOrderId']
     sParaTemp['subject'] = chargeInfo['buttonName']
     sParaTemp['product_code'] = 'GENERAL_WITHHOLDING'
     sParaTemp['integration_type'] = 'ALIAPP'
     sParaTemp[
         'agreement_sign_parameters'] = '{"productCode":"GENERAL_WITHHOLDING_P","signValidityPeriod":"12m","externalUserId":"%s", "notifyUrl":"%s"}' % (
             external_user_id, PayHelper.getSdkDomain() +
             '/open/gateway/alifree/sign_callback')
     sParaTemp['total_fee'] = chargeInfo['chargeTotal']
     ### 签约参数
     ###
     sParaTemp["return_url"] = chargeInfo['return_url']
     sParaTemp["request_from_url"] = chargeInfo['return_url']
     sParaTemp["notify_url"] = PayHelper.getSdkDomain(
     ) + '/open/gateway/alifree/order_callback'
     sParaTemp['external_user_id'] = external_user_id
     sParaTemp['sign'] = self.calcSignMD5(**sParaTemp)
     sParaTemp['sign_type'] = 'MD5'
     return sParaTemp
Exemple #3
0
    def doCallback1(cls, rpath):
        datas = cls.__verify_callback__()
        if not datas:
            return '{"errorcode ":200024, "callback":1}'
        TyContext.ftlog.info('TuYouPayYee2.doCallback1 rpath', rpath, 'datas',
                             datas)

        if 'sign' in datas:
            del datas['sign']
        result = datas.get('status', 0)
        orderPlatformId = datas.get('orderid', '')
        if orderPlatformId.find('-') > 0:
            orderPlatformId = orderPlatformId.split('-')[0]

        total_fee = float(datas.get('amount', -1)) / 100
        datas['third_orderid'] = datas['yborderid']
        if result == 1:
            isOk = PayHelper.callback_ok(orderPlatformId, total_fee, datas)
        else:
            isOk = PayHelper.callback_error(orderPlatformId, str(result),
                                            datas)
        if isOk:
            return '{"errorcode ":0, "status":1, "callback":1}'
        else:
            return '{"errorcode ":200000, "status":1, "callback":1}'
Exemple #4
0
    def doYouKuCallback(cls, rpath):
        cb_rsp = {}
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderPlatformId = rparam['apporderID']
            price = rparam['price']
            uid = rparam['uid']
            sign = rparam['sign']
            youku_appId = rparam['passthrough']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doYouKuCallback->ERROR, param error !! rparam=', rparam)
            cb_rsp['status'] = 'failed'
            cb_rsp['desc'] = '参数错误'
            return json.dumps(cb_rsp)

        paykey_dict = TyContext.Configure.get_global_item_json(
            'youku_paykeys', {})
        paykey = str(paykey_dict[str(youku_appId)])
        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            TyContext.ftlog.error(
                'TuYouPayYouKu.doYouKuCallback sign verify error !!')
            cb_rsp['status'] = 'failed'
            cb_rsp['desc'] = '签名验证失败'
            return json.dumps(cb_rsp)

        try:
            result = int(rparam['result'])
            success_amount = rparam['success_amount']
            if result < 1 or result > 2:
                TyContext.ftlog.error('doYouKuCallback got failed result:',
                                      result)
                cb_rsp['status'] = 'failed'
                cb_rsp['desc'] = 'result(%d) is not 1 or 2' % result
                PayHelper.callback_error(orderPlatformId,
                                         'result(%d) is not 1 or 2' % result,
                                         rparam)
                return json.dumps(cb_rsp)
            if result == 2:
                TyContext.ftlog.error(
                    'doYouKuCallback got partial success result:'
                    'success_amount is', success_amount)
        except:
            pass

        total_fee = float(price) / 100
        rparam['chargeType'] = 'youku'
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            cb_rsp['status'] = 'success'
            cb_rsp['desc'] = '发货成功'
            return json.dumps(cb_rsp)
        else:
            cb_rsp['status'] = 'failed'
            cb_rsp['desc'] = '发货失败'
            return json.dumps(cb_rsp)
Exemple #5
0
    def doMsgDxCallback(self, rpath):

        MchNo = TyContext.RunHttp.getRequestParam('MchNo', '')
        Phone = TyContext.RunHttp.getRequestParam('Phone', '')
        Fee = TyContext.RunHttp.getRequestParam('Fee', '')
        OrderId = TyContext.RunHttp.getRequestParam('OrderId', '')
        MobileType = TyContext.RunHttp.getRequestParam('MobileType', '')
        Sign = TyContext.RunHttp.getRequestParam('Sign', '')
        if MchNo == '' or Phone == '' or Fee == '' or OrderId == '' or Sign == '':
            return '401~参数错误~'

        eft_skey = ''
        try:
            eft_appid = OrderId[0:2]
            eft_skey = TuYouPayMsgDx.appkeys.get(eft_appid)
        except:
            TyContext.ftlog.exception()
        tSign = MchNo + Phone + Fee + OrderId + eft_skey
        m = md5()
        m.update(tSign)
        vSign = m.hexdigest()
        if Sign != vSign:
            TyContext.ftlog.info('doMsgDxCallback->ERROR, sign error !! sign=',
                                 Sign, 'vSign=', vSign, 'eft_skey=', eft_skey)
            return '555~数字签名错误~'

        # 解密得到原始游戏订单号
        orderPlatformId = ''
        try:
            orderPlatformId = OrderId[2:]
            Fee = int(Fee)
        except:
            TyContext.ftlog.exception()
        TyContext.ftlog.info('TuYouPayMsgDx.doMsgDxCallback orderPlatformId=',
                             orderPlatformId)

        notifys = {
            'MchNo': MchNo,
            'vouchMobile': Phone,
            'OrderId': OrderId,
            'third_orderid': MchNo
        }
        if MobileType == 'LT':
            notifys['payType'] = 'EFTChinaUnion.msg'
        elif MobileType == 'DX':
            notifys['payType'] = 'EFTChinaTelecom.msg'
        from tysdk.entity.pay.pay import TuyouPay

        from tysdk.entity.paythird.helper import PayHelper
        PayHelper.set_order_mobile(orderPlatformId, Phone, 'v2')
        isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, Fee,
                                            'TRADE_FINISHED', notifys)
        if isOk:
            return '000~成功~'
        else:
            return '111~失败~'
Exemple #6
0
    def doCardCallback(cls, rpath):
        iHmacStr = TyContext.RunHttp.getRequestParam('hmac', '')
        cHmacStr = cls.getCallBackHmacString()
        if iHmacStr != cHmacStr:
            TyContext.ftlog.error(
                'TuYouPayYee.doCardCallback, hmac verification error')
            return 'error'
        rparam = TyContext.RunHttp.convertArgsToDict()

        mer_code = TyContext.RunHttp.getRequestParam('p1_MerId')
        if mer_code != TuYouPayYee.p1_MerId:
            TyContext.ftlog.error(
                'TuYouPayYee.doCardCallback error, mer_code is not me !!!')
            return 'error'

        platformOrderId = TyContext.RunHttp.getRequestParam('p2_Order')
        chargeKey = 'sdk.charge:' + platformOrderId
        chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey,
                                                    'charge')
        try:
            import json
            chargeInfo = json.loads(chargeInfo)
            rparam['chargeType'] = chargeInfo['chargeType']
        except:
            TyContext.ftlog.exception()

        rparam['chargeType'] = 'yee.card'
        rparam['sub_paytype'] = TyContext.RunHttp.getRequestParam(
            'p4_FrpId', 'na')
        r1_Code = TyContext.RunHttp.getRequestParam('r1_Code')
        if r1_Code != '1':
            # 长连接通知,客户端支付失败
            status = TyContext.RunHttp.getRequestParamInt(
                'p8_cardStatus', 10000)
            TyContext.ftlog.error(
                'TuYouPayYee.doCardCallback error, charge return error !!! status=',
                status)
            errorInfo = u'支付失败,' + TuYouPayYee.code_map.get(
                status, 'status' + str(status))
            PayHelper.callback_error(platformOrderId, errorInfo, rparam)
            return 'success'

        total_fee = float(rparam['p3_Amt'])
        isOK = PayHelper.callback_ok(platformOrderId, total_fee, rparam)
        if isOK:
            return 'success'
        else:
            return 'error'
Exemple #7
0
 def mock(cls, params):
     ''' args: paytype, pay version (v1/v3), platformOrderId, price,
     expect (expected result) '''
     postparams = {}
     postparams['r0_Cmd'] = 'ChargeCardDirect'
     postparams['pc_BalanceAct'] = ''
     postparams['p5_CardNo'] = '14128110398186699'
     postparams['p2_Order'] = params['platformOrderId']
     postparams['p9_MP'] = ''
     postparams['pb_BalanceAmt'] = ''
     postparams['p1_MerId'] = '10012097952'
     failcallback = params.get('failcallback', 0)
     if failcallback:
         postparams['r1_Code'] = '0'
         postparams['p8_cardStatus'] = '7'
     else:
         postparams['r1_Code'] = '1'
         postparams['p8_cardStatus'] = '0'
     postparams['p4_FrpId'] = 'SZX'
     postparams['r2_TrxId'] = '315261293636892I'
     postparams['p7_realAmount'] = str(float(params['price']))
     postparams['p3_Amt'] = str(float(params['price']))
     postparams['p6_confirmAmount'] = str(float(params['price']))
     postparams['hmac'] = cls.getHmacString(postparams)
     cburl = PayHelper.getSdkDomain() + '/v1/pay/yee/callback'
     # use GET instead of POST for now
     response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
     return 'yee.card ok'
Exemple #8
0
    def doPPSCallback(cls, rpath):
        cb_rsp = {}
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderPlatformId = rparam['userData'].split(',')[0]
            appId = rparam['userData'].split(',')[1]
            price = rparam['money']
            sign = rparam['sign']
        except:
            TyContext.ftlog.info('doPPSCallback->ERROR, param error !! rparam=', rparam)
            cb_rsp['result'] = '-2'
            cb_rsp['message'] = 'Parameters error'
            return json.dumps(cb_rsp)

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

        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            TyContext.ftlog.error('TuYouPayPPS.doPPSCallback sign verify error !!')
            cb_rsp['result'] = '-1'
            cb_rsp['message'] = 'Sign error'
            return json.dumps(cb_rsp)

        total_fee = float(price)
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            cb_rsp['result'] = '0'
            cb_rsp['message'] = 'success'
            return json.dumps(cb_rsp)
        else:
            cb_rsp['result'] = '-6'
            cb_rsp['message'] = 'Other errors'
            return json.dumps(cb_rsp)
Exemple #9
0
    def doPayRequestMo9(cls, params):
        mo = TyContext.Cls_MsgPack()
        mo9appId = params['mo9appId']
        mo9config = TyContext.Configure.get_global_item_json('mo9_config', {})
        config = mo9config.get(str(mo9appId), None)
        notifyurl = PayHelper.getSdkDomain() + '/v1/pay/mo9/callback'
        if config:
            mo9account = str(config['account'])
            mo9key = str(config['paykey'])
        else:
            raise Exception(
                'can not find mo9pay config info define of mo9appId=' +
                str(mo9appId))
        paydata = {
            'pay_to_email': mo9account,
            'version': '2.1',
            'return_url': cls.return_url,
            'notify_url': notifyurl,
            'invoice': params['orderPlatformId'],
            'payer_id': str(params['userId']),
            'lc': 'CN',
            'amount': str(float(params['orderPrice'])),
            'currency': 'CNY',
            'item_name': params['orderName'],
            'app_id': mo9appId,
        }
        paydata['sign'] = cls.__cal_sign(paydata, mo9key)
        urlparams = '&'.join(k + "=" + urllib.quote(paydata[k].encode('utf-8'))
                             for k in sorted(paydata.keys()))
        openUrl = cls.pay_url + urlparams
        payData = {'openurl': openUrl}

        mo.setResult('code', 0)
        mo.setResult('payData', payData)
        return mo
Exemple #10
0
    def doWanDouJiaCallback(self, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doWanDouJiaCallback->rparam=', rparam)
        transdata = rparam['content']
        try:
            datas = json.loads(transdata)
            appId = datas['appKeyId']
            appkeyconfig = TyContext.Configure.get_global_item_json('wannew_appkeys', {})
            appKey = appkeyconfig[str(appId)]
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info('doWanDouJiaCallback->ERROR, sign error !! transdata=', transdata)
            return 'Fail'

        # appKey = self.appkeys[str(appId)]
        sign = rparam['sign']
        if self.verifySign(transdata, sign, appKey) != True:
            TyContext.ftlog.info('doWanDouJiaCallback->ERROR, sign error !! transdata=', transdata, 'sign=', sign)
            return 'Fail'

        orderPlatformId = datas['out_trade_no']

        trade_status = 'TRADE_FINISHED'
        total_fee = int(float(datas['money']))
        total_fee = total_fee / 100.0

        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'Success'
        else:
            return 'Fail'
Exemple #11
0
    def doZhangYueCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        try:
            appId = rparam['appId']
            transData = json.loads(rparam['transData'])
            orderPlatformId = transData['merOrderId']
            price = transData['payAmt']
            sign = transData['md5SignValue']
        except:
            TyContext.ftlog.info(
                'TuYouPayZhangYueV4 -> ERROR, param error !! rparam=', rparam)
            return 'error'

        config = GameItemConfigure.get_game_channel_configure_by_orderId(
            orderPlatformId, 'zhangyue')
        paykey = config['zhangyue_md5_key']

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

        total_fee = float(price)
        rparam['chargeType'] = 'zhangyue'
        rparam['third_orderid'] = transData['orderId']
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        TyContext.ftlog.info("TuYouPayZhangYueV4 payhelper callback=", isOk)
        if isOk:
            return 'success'
        else:
            return 'error'
Exemple #12
0
    def _getPayRequsetParams(self, datas, bankIndex):
        httpdomain = PayHelper.getSdkDomain()
        rparam = {}
        # 游戏分配的订单号,这个必须是没用到过的,如果用过的trade_code,会返回-1004错误
        rparam['mer_trade_code'] = datas['orderPlatformId']
        # 商户发送的支付金额
        rparam['rec_amount'] = int(datas['orderPrice'])
        #         if TuYouPay360.DEBUG360 :
        #             rparam['rec_amount'] = 0.01

        rparam['product_name'] = 'TYB' + str(rparam['rec_amount'] * CHARGE_RATE_RMB)
        # 商户ID
        rparam['mer_code'] = TuYouPay360.merchant_code
        rparam['trans_service'] = TuYouPay360.trans_service
        rparam['input_cha'] = TuYouPay360.input_cha
        rparam['sign_type'] = TuYouPay360.sign_type
        rparam['notify_url'] = httpdomain + TuYouPay360.notify_url
        rparam['return_url'] = TuYouPay360.no_notify_url
        rparam['bank_code'] = TuYouPay360.bank_code[bankIndex]  # "MOBILE_ZFB",子支付的区分 MOBILE_ZFB 支付宝
        if bankIndex in (1, 2, 3):
            rparam['card_amount'] = datas['card_amount']
            rparam['card_number'] = datas['card_number']
            rparam['card_pwd'] = datas['card_pwd']
        rparam['sign'] = self.buildMySign(rparam)

        TyContext.ftlog.info('TuYouPay360->params=', rparam)
        return rparam
Exemple #13
0
    def charge_data(cls, mi):
        chargeinfo = cls.get_charge_info(mi)
        appId = chargeinfo['appId']
        if 'payInfo' in chargeinfo and chargeinfo['payInfo']:
            payInfo = chargeinfo['payInfo']
            if 'appid' in payInfo and payInfo['appid']['lenovo']:
                appId = payInfo['appid']['lenovo']
        diamondId = chargeinfo['buttonId']
        prodconfig = TyContext.Configure.get_global_item_json(
            'lenovo_prodids', {})
        try:
            data = prodconfig[str(appId)].get(str(diamondId), {})
            payCode = data['feecode']
        except KeyError:
            config = GameItemConfigure(
                chargeinfo['appId']).get_game_channel_configure_by_package(
                    'lenovo', chargeinfo['packageName'],
                    chargeinfo['mainChannel'])
            prodconfig = config.get('products', {})
            diamondList = filter(lambda x: diamondId in x.values(), prodconfig)
            diamondConfig = diamondList[0]
            payCode = diamondConfig['code']

        chargeinfo['chargeData'] = {
            'msgOrderCode': payCode,
            'waresid': payCode,
            'cpprivateinfo': chargeinfo['platformOrderId'],
            'notifyUrl':
            PayHelper.getSdkDomain() + '/open/ve/pay/lenovo/callback'
        }
        return cls.return_mo(0, chargeInfo=chargeinfo)
Exemple #14
0
    def doZhangYueCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        try:
            appId = rparam['appId']
            transData = json.loads(rparam['transData'])
            orderPlatformId = transData['merOrderId']
            price = transData['payAmt']
            sign = transData['md5SignValue']
        except:
            TyContext.ftlog.info(
                'doZhangYueCallback->ERROR, param error !! rparam=', rparam)
            return 'error'

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

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

        total_fee = float(price)
        rparam['chargeType'] = 'zhangyue'
        rparam['third_orderid'] = transData['orderId']
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'success'
        else:
            return 'error'
Exemple #15
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId,
        expect (expected result) '''

        failcallback = params.get('failcallback', 0)
        if failcallback:
            trade_status = 'TRADE_CLOSED'
        else:
            trade_status = 'TRADE_FINISHED'
        cburl = PayHelper.getSdkDomain() + '/v1/pay/alipay/callback'
        xmldata = cls.xmlrequest_template.format(
            platformOrderId=params['platformOrderId'],
            price=float(params['price']),
            status=trade_status,
        )
        postparams = {}
        postparams['notify_data'] = xmldata
        postparams['sign'] = cls.__calc_sign('notify_data=' + xmldata)
        postparams['sign_type'] = "RSA"
        postparams['mock'] = "true"
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl,
                                               postdata_=postparams,
                                               method_='POST')
        return 'tuyou ali ok'
Exemple #16
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, price,
        expect (expected result) '''

        failcallback = params.get('failcallback', 0)
        postparams = {}
        postparams['method'] = 'check'
        postparams['cp_order_id'] = params['platformOrderId']
        postparams['correlator'] = 'tuyoomock'
        postparams['order_time'] = '20130619144435'
        postparams['sign'] = cls.__calc_check_sign(postparams)
        cburl = PayHelper.getSdkDomain(
        ) + '/v1/pay/aiyouxi/callback/dizhu/tyhall'
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
        xmlroot = ElementTree.fromstring(response)
        if_pay = xmlroot.find('if_pay').text
        if int(if_pay) == 0:
            postparams['method'] = 'callback'
            postparams['pay_type'] = 'smsPay'
            if failcallback:
                postparams['result_code'] = '01'
            else:
                postparams['result_code'] = '00'
            postparams['fee'] = params['price']
            postparams['sign'] = cls.__calc_callback_sign(postparams)
            response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
        else:
            TyContext.ftlog.info(
                'MockAigame.__check_callback->ERROR, response=', response)
        return 'aigame ok'
Exemple #17
0
 def doHuaWeiCallback(self, rpath):
     rparam = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.info('doHuaWeiCallback->rparam=', rparam)
     try:
         orderPlatformId = rparam['requestId']
         clientId = rparam['extReserved']
         huawei_config = TyContext.Configure.get_global_item_json('huawei_config', {})
         hwapps = huawei_config.get(clientId, None)
         isOk = self.__check_ras_code__(hwapps, rparam, False)
         if isOk:
             total_fee = float(rparam['amount'])
             try:
                 # huawei sdk also use payType, which is tuyou's sub_paytype
                 rparam['sub_paytype'] = rparam['payType']
                 del rparam['payType']
             except:
                 pass
             isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
             if isOk:
                 return '{"result":0}'
             else:
                 return '{"result":3}'
         else:
             return '{"result":1}'
     except:
         TyContext.ftlog.exception()
         return '{"result":94}'
Exemple #18
0
    def charge_data(cls, chargeinfo):
        appId = str(chargeinfo['appId'])
        clientId = str(chargeinfo['clientId'])
        if 'payInfo' in chargeinfo and chargeinfo['payInfo']:
            payInfo = chargeinfo['payInfo']
            if 'appid' in payInfo and payInfo['appid']['huawei']:
                clientId = payInfo['appid']['huawei']
        huawei_config = TyContext.Configure.get_global_item_json('huawei_config', {})
        hwapps = huawei_config.get(clientId, None)
        if hwapps:
            userName = hwapps['userName']  # 必填 不参与签名
            userID = hwapps['pay_id']  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = hwapps['hw_appid']  # String    应用ID。 在开发者联盟上获取的APP ID    必填
        else:
            raise Exception('TuYouPayHuaWei can not find huawei config of clientId=' + clientId)
        amount = '%.2f' % float(chargeinfo[
                                    'chargeTotal'])  # String    商品所要支付金额。格式为:元.角分,最小金额为分,保留到小数点后两位。例如:20.00,此金额将会在支付时显示给用户确认),     必填
        productName = chargeinfo['diamondName']  # String(50)    商品名称。此名称将会在支付时显示给用户确认   必填
        requestId = chargeinfo['platformOrderId']  # String(30)    开发者支付订单号。注:最长30字节。其值由开发者定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。
        productDesc = chargeinfo['diamondName']  # String(100)    商户对商品的自定义描述 。 必填,不能为空

        rparam = {'userID': userID,
                  'applicationID': applicationID,
                  'amount': amount,
                  'productName': productName,
                  'requestId': requestId,
                  'productDesc': productDesc,
                  }
        sign = cls.__check_ras_code__(hwapps, rparam, True)
        rparam['sign'] = sign
        rparam['userName'] = userName
        rparam['notifyUrl'] = PayHelper.getSdkDomain() + '/v1/pay/huawei/callback'
        chargeinfo['chargeData'] = rparam
Exemple #19
0
    def doBuyStraight(cls, userId, params, mo):
        appId = str(params['appId'])
        hwapps = TuyouPayHuaWei.HWAPPS[appId]

        userName = hwapps['userName']  # 必填 不参与签名
        userID = hwapps['pay_id']  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
        applicationID = hwapps['hw_appid']  # String    应用ID。 在开发者联盟上获取的APP ID    必填
        amount = '%d.00' % int(
            params['orderPrice'])  # String    商品所要支付金额。格式为:元.角分,最小金额为分,保留到小数点后两位。例如:20.00,此金额将会在支付时显示给用户确认),     必填
        productName = params['orderName']  # String(50)    商品名称。此名称将会在支付时显示给用户确认   必填
        requestId = params['orderPlatformId']  # String(30)    开发者支付订单号。注:最长30字节。其值由开发者定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。
        productDesc = params['orderName']  # String(100)    商户对商品的自定义描述 。 必填,不能为空

        rparam = {'userID': userID,
                  'applicationID': applicationID,
                  'amount': amount,
                  'productName': productName,
                  'requestId': requestId,
                  'productDesc': productDesc,
                  }
        sign = cls.__check_ras_code__(hwapps, rparam, True)
        rparam['sign'] = sign
        rparam['userName'] = userName
        rparam['notifyUrl'] = PayHelper.getSdkDomain() + '/v1/pay/huawei/callback'
        mo.setResult('payData', rparam)
        pass
Exemple #20
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, smstext,
        expect (expected result) '''

        paytype = params['paytype']
        smstext = params['smstext']
        payCode = smstext
        channelId = 1
        appId = payCode[:12]
        appKey = cls.get_app_key(appId)
        params['payCode'] = payCode
        params['appId'] = payCode[:12]
        params['appKey'] = appKey
        params['channelId'] = channelId
        failcallback = params.get('failcallback', 0)
        if failcallback:
            params['orderId'] = cls.fail_orderid
        else:
            params['orderId'] = cls.orderid
        cburl = PayHelper.getSdkDomain() + '/v1/pay/ydmm/callback'
        xmldata = cls.xmlrequest_template.format(
            orderId=params['orderId'],
            appId=params['appId'],
            payCode=params['payCode'],
            totalPrice=params['price'],
            channelId=params['channelId'],
            platformOrderId=params['platformOrderId'],
            sign=cls.__calc_sign(params))
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl,
                                               postdata_=xmldata,
                                               method_='GET')
        return 'ydmm ok'
Exemple #21
0
    def _notify_game_server(cls, params):
        clientId = TyContext.UserSession.get_session_clientid(params['userId'])
        control = TyContext.ServerControl.findServerControl(
            params['appId'], clientId)
        if not control:
            TyContext.ftlog.error(
                '_notify_game_server can not find'
                ' server control, params', params)
            return
        notifyUrl = str(control['http'] + '/v2/game/charge/qipainotify?' +
                        urlencode(params))
        TyContext.ftlog.debug('_notify_game_server'
                              ' arguments', params, 'notifyUrl', notifyUrl)
        # 通知游戏服务端进行vip等级的更新
        rmbs = 0.0
        diamonds = 0
        if 'delta_chip' in params:
            rmbs += params['delta_chip'] / 10000.0
            diamonds += int(params['delta_chip'] / 1000)
        if 'delta_diamond' in params:
            rmbs += params['delta_diamond'] / 10.0
            diamonds += int(params['delta_diamond'])
        PayHelper.notify_game_server_on_diamond_change({
            'appId':
            params['appId'],
            'clientId':
            clientId,
            'buttonId':
            '360KP_PROD',
            'userId':
            params['userId'],
            'diamonds':
            diamonds,
            'rmbs':
            rmbs
        })

        from twisted.web import client
        d = client.getPage(notifyUrl, method='GET')

        def ok_callback(response):
            TyContext.ftlog.info('_notify_game_server response', response)

        def err_callback(error):
            TyContext.ftlog.error('_notify_game_server error', error)

        d.addCallbacks(ok_callback, err_callback)
Exemple #22
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'
Exemple #23
0
    def doWXpayCallback(cls, rpath):
        xmldata = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.info('TuyouPayWXpay.doWXpayCallback in xmldata=',
                             xmldata)
        xmlroot = ElementTree.fromstring(xmldata)
        wxappId = xmlroot.find('appid').text
        openId = xmlroot.find('openid').text

        rparam = {}
        for node in xmlroot.iter():
            if 'xml' != node.tag:
                rparam[node.tag] = node.text
        TyContext.ftlog.debug('TuyouPayWXpay.doWXpayCallback in rparam=',
                              rparam)

        responseXml = ElementTree.Element('xml')
        returnCode = ElementTree.SubElement(responseXml, 'return_code')
        returnMsg = ElementTree.SubElement(responseXml, 'return_msg')

        try:
            orderPlatformId = rparam['out_trade_no']
            total_fee = float(rparam['total_fee']) / 100
            wxconfig = TyContext.Configure.get_global_item_json(
                'wx_config', {})
            config = wxconfig.get(str(wxappId), None)
            wxpartnerKey = str(config['partnerKey'])
            sign = rparam['sign']
        except:
            TyContext.ftlog.info(
                'doWXpayCallback->ERROR, param error !! rparam=', rparam)
            returnCode.text = 'FAIL'
            returnMsg.text = '参数格式校验错误'
            responseStr = ElementTree.tostring(responseXml)
            return responseStr

        # 签名校验
        if not cls.__verify_sign(rparam, wxpartnerKey, sign):
            TyContext.ftlog.error(
                'TuyouPayWXpay.doWXpayCallback verify error !!')
            returnCode.text = 'FAIL'
            returnMsg.text = '签名失败'
            responseStr = ElementTree.tostring(responseXml)
            return responseStr

        rparam['third_orderid'] = openId
        rparam['chargeType'] = 'wxpay'
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            returnCode.text = 'SUCCESS'
            returnMsg.text = 'OK'
        else:
            returnCode.text = 'FAIL'
            returnMsg.text = '发货失败'

        responseStr = ElementTree.tostring(responseXml)
        return responseStr
Exemple #24
0
    def _get_prepayid(cls, params, token, wxappId, wxpaySignKey, partnerId,
                      partnerKey):
        prepayUrl = cls.prepay_url + '?access_token=' + token
        orderPlatformId = params['orderPlatformId']
        notifyurl = PayHelper.getSdkDomain() + '/v1/pay/wxpay/callback'
        rparam = {}
        rparam['bank_type'] = 'WX'
        rparam['body'] = params['orderName']
        rparam['partner'] = partnerId
        rparam['out_trade_no'] = orderPlatformId
        rparam['total_fee'] = str(int(params['orderPrice']) * 100)
        rparam['fee_type'] = '1'
        rparam['notify_url'] = notifyurl
        rparam['spbill_create_ip'] = TyContext.RunHttp.get_client_ip()
        rparam['input_charset'] = 'UTF-8'
        cal_str = '&'.join(
            k + "=" + rparam[k]
            for k in sorted(rparam.keys())) + '&key=' + partnerKey
        signValue = md5(cal_str.encode('utf-8')).hexdigest().upper()
        packageValue = '&'.join(k + "=" + urllib.quote(rparam[k].encode('utf-8')) for k in sorted(rparam.keys())) \
                       + "&sign=" + signValue

        postparams = {}
        postparams['appid'] = wxappId
        postparams['appkey'] = wxpaySignKey
        postparams['traceid'] = orderPlatformId
        postparams['noncestr'] = md5(str(random.randint(0, 10000))).hexdigest()
        postparams['package'] = packageValue
        postparams['timestamp'] = str(int(time.time()))
        sign_str = '&'.join(k + "=" + postparams[k]
                            for k in sorted(postparams.keys()))
        app_signature = sha1(sign_str).hexdigest()
        postparams['app_signature'] = app_signature
        postparams['sign_method'] = 'sha1'
        del postparams['appkey']
        postjson = json.dumps(postparams, ensure_ascii=False)
        response, _ = TyContext.WebPage.webget(prepayUrl, postdata_=postjson)
        response = json.loads(response)
        if 'prepayid' in response.keys() and response['prepayid']:
            payData = {}
            payData['appid'] = wxappId
            payData['appkey'] = wxpaySignKey
            payData['prepayid'] = response['prepayid']
            payData['noncestr'] = postparams['noncestr']
            payData['package'] = 'Sign=WXpay'
            payData['partnerid'] = partnerId
            payData['timestamp'] = postparams['timestamp']
            sign_str = '&'.join(k + "=" + payData[k]
                                for k in sorted(payData.keys()))
            sign = sha1(sign_str).hexdigest()
            payData['sign'] = sign
            return payData
        else:
            raise Exception('can not get wxpay prepayid  of wxappId=' +
                            wxappId)
Exemple #25
0
    def doBuyStraight(self, userId, params, mo):
        TyContext.RunHttp.getRequestParamJs(params, '360snscode', '')
        snscode = params['360snscode']
        clientId = params['clientId']
        appId = params['appId']
        client_id, client_secret = self.get_360_app_info(appId, clientId)

        TyContext.ftlog.info('TuYouPay360SNS->doBuyStraight appId=', appId,
                             'clientId=', clientId, 'snscode=', snscode,
                             'app_client_id=', client_id, 'app_client_secret',
                             client_secret)

        tokenurl = self.URL_ACCSEE_360PAY % (snscode, client_id, client_secret)
        response, tokenurl = TyContext.WebPage.webget(tokenurl)
        TyContext.ftlog.info('TuYouPay360SNS->doBuyStraight->snscode=',
                             snscode, 'response=', response)

        error_info = None
        response_json = None
        try:
            response_json = json.loads(response)
        except:
            response_json = {}
            error_info = {
                'error_code': -1,
                'error_msg': "360返回值错误",
                'content': str(response)
            }

        access_token = response_json.get('access_token', '')
        expires_in = response_json.get('expires_in', '')
        scope = response_json.get('scope', '')
        refresh_token = response_json.get('refresh_token', '')

        if access_token == '':
            if error_info == None:
                error_info = response_json

        if error_info == None:
            error_info = {'error_code': 0, 'error_msg': "OK"}

        from tysdk.entity.paythird.helper import PayHelper
        notify_uri = PayHelper.getSdkDomain() + '/v1/pay/360sns/callback'
        payData = {
            'access_token': access_token,
            'expires_in': expires_in,
            'scope': scope,
            'refresh_token': refresh_token,
            'error_info': error_info,
            'notify_uri': notify_uri
        }

        params['payData'] = payData
        mo.setResult('payData', payData)
        pass
Exemple #26
0
 def charge_data(self, chargeinfo):
     buttonId = chargeinfo['buttonId']
     amount = str(int(float(chargeinfo['chargeTotal']) * 100))
     prodName = chargeinfo['buttonName']
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/youku/callback'
     chargeinfo['chargeData'] = {
         'amount': amount,
         'productId': buttonId,
         'productName': prodName,
         'notifyUrl': notifyurl
     }
Exemple #27
0
 def __calc_callback_sign(cls, rparam):
     paykey_dict = TyContext.Configure.get_global_item_json('youku_paykeys', {})
     paykey = str(paykey_dict[rparam['passthrough']])
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/youku/callback'
     sorted_args = [('apporderID', rparam['apporderID']),
                    ('price', rparam['price']), ('uid', rparam['uid'])]
     encoded_args = urllib.urlencode(sorted_args)
     check_str = notifyurl + '?' + encoded_args
     check_sign = hmac.new(paykey)
     check_sign.update(check_str)
     digest = check_sign.hexdigest()
     return digest
Exemple #28
0
 def doUnionPayCallback(cls, rpath):
     params = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.debug('TuYouPayYdjd.TuYouPayUnionPay in prams=',
                           '%s' % params)
     if not cls.validateSign(**params):
         return 'sign-error'
     orderId = params['orderId']
     isOk = PayHelper.callback_ok(orderId, -1, params)
     if isOk:
         return 'ok'
     else:
         return 'error'
Exemple #29
0
    def doGeFuBigPaySdkCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        TyContext.ftlog.info('TuYouPayGeFuBigSdk Callback ', rparam)

        strtransdata = rparam['transdata']
        sign = rparam['sign'].replace(' ', '+')

        params = eval(str(rparam['transdata']))
        TyContext.ftlog.info('TuYouPayGeFuBigSdk callback transdata ', params)

        orderPlatformId = params['cporderid']
        total_fee = float(params['money'])

        if rsacrypto._verify_with_publickey_pycrypto_md5(
                strtransdata, sign, _aibei_pubkey_py):
            if 0 == params['result']:
                rparam['third_orderid'] = params['transid']
                rparam['chargeType'] = 'gefubig'
                PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
                return 'SUCCESS'
            else:
                errinfo = '支付失败'
                PayHelper.callback_error(orderPlatformId, errinfo, rparam)
                return 'FAILURE'
        else:
            errinfo = '签名校验失败'
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
            return 'FAILURE'
Exemple #30
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        appId = str(chargeinfo['appId'])
        huawei_appId = mi.getParamStr('huaWei_appId')
        huawei_config = TyContext.Configure.get_global_item_json(
            'huawei_config', {})
        try:
            hwapps = huawei_config.get(huawei_appId, None)
            userName = hwapps['userName']  # 必填 不参与签名
            userID = hwapps['pay_id']  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = hwapps[
                'hw_appid']  # String    应用ID。 在开发者联盟上获取的APP ID    必填
        except KeyError:
            config = GameItemConfigure(
                appId).get_game_channel_configure_by_package(
                    'huawei', chargeinfo['packageName'],
                    chargeinfo['mainChannle'])
            userName = config.get('userName')  # 必填 不参与签名
            userID = config.get(
                'huaWei_payId')  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = config.get(
                'huaWei_appId')  # String    应用ID。 在开发者联盟上获取的APP ID    必填
            hwapps = {
                'pay_ras_pub_key': config.get('huaWei_publicKey'),
                'pay_ras_privat_key': config.get('huaWei_privateKey')
            }
        amount = '%.2f' % float(
            chargeinfo['chargeTotal']
        )  # String    商品所要支付金额。格式为:元.角分,最小金额为分,保留到小数点后两位。例如:20.00,此金额将会在支付时显示给用户确认),     必填
        productName = chargeinfo[
            'diamondName']  # String(50)    商品名称。此名称将会在支付时显示给用户确认   必填
        requestId = chargeinfo[
            'platformOrderId']  # String(30)    开发者支付订单号。注:最长30字节。其值由开发者定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。
        productDesc = chargeinfo[
            'diamondName']  # String(100)    商户对商品的自定义描述 。 必填,不能为空

        rparam = {
            'userID': userID,
            'applicationID': applicationID,
            'amount': amount,
            'productName': productName,
            'requestId': requestId,
            'productDesc': productDesc,
        }
        sign = self.__check_ras_code__(hwapps, rparam, True)
        rparam['sign'] = sign
        rparam['userName'] = userName
        rparam['notifyUrl'] = PayHelper.getSdkDomain(
        ) + '/v1/pay/huawei/callback'
        chargeinfo['chargeData'] = rparam
        return self.return_mo(0, chargeInfo=chargeinfo)