def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) chargeinfo['chargeData'] = { 'platformOrderId': chargeinfo['platformOrderId'], } mumayi_keys = TyContext.Configure.get_global_item_json( 'mumayi_keys', {}) packageName = chargeinfo['packageName'] try: appKey = mumayi_keys[packageName] except: config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( 'mumayi', chargeinfo['packageName'], chargeinfo['mainChannel']) appKey = config.get('mumayi_appKey', "") if not appKey: raise PayErrorV4(1, "找不到木螞蟻的配置") userId = chargeinfo['uid'] chargeKey = 'sdk.charge:mumayi:%s' % userId TyContext.RedisPayData.execute('HMSET', chargeKey, 'platformOrderId', chargeinfo['platformOrderId'], 'appKey', appKey) TyContext.RedisPayData.execute('EXPIRE', chargeKey, 60 * 60) return cls.return_mo(0, chargeInfo=chargeinfo)
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)
def doGetUserInfo(cls, params, snsId): platfrom = params['ysdk_platform'] appid = params['ysdk_appId'] openid = params['ysdk_openId'] openkey = params['ysdk_token'] ysdk_model = params['ysdk_model'] timestamp = int(time.time()) config = TyContext.Configure.get_global_item_json('ysdk_keys', {}) try: appkey = config[appid]['%s_appKey' % platfrom] request_url = config['%s_url' % ysdk_model] except: mainChannel = params['clientId'].split('.')[-2] config = GameItemConfigure(params['appId']).get_game_channel_configure_by_primarykey('ysdk', 'ysdk_appId', appid, mainChannel) appkey = config.get('ysdk_%s_appKey' % platfrom, "") request_url = config.get('ysdk_%s_url' % ysdk_model, "") if not appkey or not request_url: TyContext.ftlog.debug('AccountYsdk,cannot find ysdk sdkconfig %s' % appid) return False sig = md5('%s%s' % (appkey, timestamp)).hexdigest() rparams = {'timestamp': timestamp, 'appid': appid, 'sig': sig, 'openid': openid, 'openkey': openkey} _url = 'http://%s%s' % (request_url, cls.VALIDATE_URL[platfrom]) response_msg, _ = TyContext.WebPage.webget(_url, rparams, method_='GET') TyContext.ftlog.debug('AccountYsdk -> response ->', response_msg) response = json.loads(response_msg) if str(response['ret']) == '0': return True else: return False
def doGetUserInfo(cls, params, snsId): app_id = params['jusdk_appId'] token_key = params['jusdk_token'] config = TyContext.Configure.get_global_item_json("jusdk_keys", {}) try: appkey = config[app_id]['appKey'] except: mainChannel = params['clientId'].split('.')[-2] config = GameItemConfigure( params['appId']).get_game_channel_configure_by_primarykey( 'jusdk', 'jusdk_appId', app_id, mainChannel) appkey = config.get('jusdk_appKey', "") if not appkey: TyContext.ftlog.debug( "AccountJusdk,cannot find jusdk config for", app_id) return False sign_text = '%s%s' % (appkey, token_key) sign = md5(sign_text).hexdigest() rparams = {'tokenKey': token_key, 'sign': sign} response_msg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL, postdata_=rparams, method_='POST') TyContext.ftlog.debug('AccountJusdk-> response ->', response_msg) # {"code":0,"msg":"", "data":{"guid":"s1234567890"}} response = json.loads(response_msg) if 0 == int(response['code']): jusdk_guid = response['data']['guid'] params['snsId'] = 'jusdk:' + jusdk_guid TyContext.ftlog.debug('AccountJusdk-> guid ->', jusdk_guid) return True else: return False
def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) zhuoyi_keys = TyContext.Configure.get_global_item_json( 'zhuoyi_keys', {}) buttonId = chargeinfo['buttonId'] buttonName = chargeinfo['buttonName'] packageName = chargeinfo['packageName'] try: payInfo = zhuoyi_keys[packageName] codes = payInfo['codes'] code = codes.get(buttonId, codes.get(buttonName)) except: config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( 'zhuoyi', packageName, chargeinfo['mainChannel']) prodConfig = config.get('products', {}) diamondList = filter(lambda x: buttonId in x.values(), prodConfig) diamondConfig = diamondList[0] if diamondList else {} if not diamondConfig: raise PayErrorV4(1, "找不到商品%s的计费点配置" % buttonId) code = diamondConfig.get('code', '') payInfo = { 'appId': config.get('zhuoyi_appId', ''), 'appKey': config.get('zhuoyi_appKey', '') } chargeinfo['chargeData'] = { 'platformOrderId': chargeinfo['platformOrderId'], 'appId': payInfo['appId'], 'appKey': payInfo['appKey'], 'code': code } return cls.return_mo(0, chargeInfo=chargeinfo)
def doGetUserInfo(cls, params, snsId): uid = params['uid'] app_key = params['app_key'] token = params['token'] rparams = {'uid': uid, 'app_key': app_key, 'token': token} config = TyContext.Configure.get_global_item_json('papa_keys', {}) try: secretKey = config[app_key]['secretKey'] except KeyError: mainChannel = params['clientId'].split('.')[-2] config = GameItemConfigure( params['appId']).get_game_channel_configure_by_primarykey( "papa", 'papa_app_key', app_key, mainChannel) secretKey = config.get('papa_secret', "") if not secretKey: TyContext.ftlog.debug(cls.__name__, 'cannot get sdkconfig papa') return False sign = md5('%s%sapp_key=%s&token=%s&uid=%s' % (app_key, secretKey, app_key, token, uid)).hexdigest() rparams['sign'] = sign responseMsg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL, postdata_=rparams, method_='POST') TyContext.ftlog.debug('AccountPapa-> response->', responseMsg) response = json.loads(responseMsg) # 0:成功 1:无效的 token 2:用户不存在 3:会话超时 if '0' == str(response['error']) and response['data']['is_success']: return True else: return False
def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) appId = chargeinfo['appId'] diamondId = chargeinfo['buttonId'] prodconfig = TyContext.Configure.get_global_item_json( 'momo_prodids', {}) data = prodconfig['6'].get(str(diamondId), None) if data: payCode = data['feecode'] else: config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( 'momo', chargeinfo['packageName'], chargeinfo['mainChannel']) if not config: package = 'com.wemomo.game.ddz' channel = 'momo' config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( 'momo', package, channel) products = config.get('products', {}) productConfig = filter( lambda x: x['diamondId'].strip() == diamondId, products) payCode = productConfig[0].get( 'feecode', '') if len(productConfig) > 0 else '' if not payCode: raise PayErrorV4( 1, 'can not find momo product define of diamondId=' + diamondId) chargeinfo['chargeData'] = {'msgOrderCode': payCode} return cls.return_mo(0, chargeInfo=chargeinfo)
def need_continue_change_chargeinfo(self, chargeinfo): ''' 检查 ID是否配置,未配置 就进行配置 :param chargeinfo: :return: ''' chargeType = chargeinfo['chargeType'] sdk = chargeType.split('.')[0] config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( sdk, chargeinfo['packageName'], chargeinfo['mainChannel']) diamondId = chargeinfo['diamondId'] prodConfig = config.get('products', {}) diamondList = filter(lambda x: diamondId in x.values(), prodConfig) diamondConfig = diamondList[0] if diamondList else {} if diamondConfig: return False idSet = set([]) for v in prodConfig: idSet.add(v.get('prodId')) # 叫这个名字!!! # 配置为空,用其他方式修改 chargeinfo if not idSet: return True self.change_chargeinfo(idSet, chargeinfo) return False
def charge_data(self, mi): chargeinfo = self.get_charge_info(mi) app_id = mi.getParamStr('nubia_appId') uid = mi.getParamStr('nubia_uid') config = TyContext.Configure.get_global_item_json('nubia_keys', {}) try: secret = config[app_id]['secret'] except KeyError: config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_primarykey( 'nubia', 'nubia_appId', app_id, chargeinfo['mainChannel']) secret = config.get('secret') timestamp = int(time.time()) price = chargeinfo['diamondPrice'] order_id = chargeinfo['platformOrderId'] number = chargeinfo['diamondCount'] goodsname = chargeinfo['diamondName'] charge_key = 'sdk.charge:nubia:%s' % order_id TyContext.RedisPayData.execute('HSET', charge_key, 'appId', app_id) TyContext.RedisPayData.execute('EXPIRE', charge_key, 60 * 60) text = 'amount=%s&app_id=%s&cp_order_id=%s&data_timestamp=%s&number=%s&product_des=%s&product_name=%s&uid=%s' \ ':%s:%s' % (price, app_id, order_id, timestamp, number, goodsname, goodsname, uid, app_id, secret) sign = md5(text).hexdigest() chargeinfo['chargeData'] = { 'platformOrderId': order_id, 'timestamp': timestamp, 'uid': uid, 'sign': sign } return self.return_mo(0, chargeInfo=chargeinfo)
def doGetUserInfo(cls, params, snsId): uid = params['uid'] access_token = params['access_token'] app_id = params['app_id'] rparams = {'uid': uid, 'access_token': access_token, 'app_id': app_id} config = TyContext.Configure.get_global_item_json('zhuoyi_keys', {}) for keys in config.values(): if keys['appId'] == app_id: appKey = keys['paySecret'] break else: mainChannel = params['clientId'].split('.')[-2] config = GameItemConfigure( params['appId']).get_game_channel_configure_by_primarykey( 'zhuoyi', 'zhuoyi_appId', app_id, mainChannel) appKey = config.get('zhuoyi_paySecret', "") if not appKey: return False # return False text = 'uid=%s&access_token=%s&app_id=%s&key=%s' % (uid, access_token, app_id, appKey) sign = md5(text).hexdigest() rparams['sign'] = sign responseMsg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL, rparams, method_='GET') TyContext.ftlog.debug('AccountZhuoyi-> response->', responseMsg) response = json.loads(responseMsg) # 0:成功 1:无效的 token 2:用户不存在 3:会话超时 if '0' == str(response['code']): return True else: return False
def doMomoCallback(cls, rpath): rparam = TyContext.RunHttp.get_body_content() import json rparam = json.loads(rparam) orderinfo = rparam.get('orderinfo', {}) statusMsg = rparam.get('statusMsg', '') sign = rparam.get('sign') signKey = ['cporderid', 'payorderid', 'ordertime', 'status', 'amount', 'currency', 'pname', 'appid', 'cid'] cporderid = orderinfo.get('cporderid', '') config = GameItemConfigure.get_game_channel_configure_by_orderId(cporderid, 'more') appkey = config.get('more_appkey', '') # 读取默认参数配置 if not appkey: packageName = 'com.sdk.more.default' channel = 'kuyuoka' appId = '9999' config = GameItemConfigure(appId).get_game_channel_configure_by_package('more', packageName, channel) appkey = config.get('more_appkey', '') signStr = appkey + ''.join(str(orderinfo[k]) for k in signKey) from hashlib import md5 m = md5(signStr) if m.hexdigest().lower() != sign: PayHelperV4.callback_error(cporderid, '验签失败', rparam) return {'returnCode': 0, 'returnMsg': '失败'} total_fee = float(orderinfo.get('amount')) / 100 PayHelperV4.callback_ok(cporderid, total_fee, rparam) return {'returnCode': 1, 'returnMsg': ''}
def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) platformOrderId = chargeinfo['platformOrderId'] packageName = chargeinfo['packageName'] jolo_config = TyContext.Configure.get_global_item_json('jolo_keys', {}) notifyUrl = 'http://open.touch4.me/v1/pay/jolo/callback' userId = chargeinfo['uid'] snsId, snsinfo = TyContext.RedisUser.execute(userId, 'HMGET', 'user:%s' % userId, 'snsId', 'snsinfo') try: app_keys = jolo_config[packageName] except KeyError: config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( 'htc', packageName, chargeinfo['mainChannel']) app_keys = { 'gameCode': config.get('htc_gamecode'), 'gameName': config.get('htc_gamename'), 'privateKey': config.get('htc_jolo_private_key') } chargeData = { 'gameCode': app_keys['gameCode'], 'gameName': app_keys['gameName'], 'privateKey': app_keys['privateKey'], 'session': snsinfo, 'notifyUrl': notifyUrl, } chargeinfo['chargeData'] = chargeData return cls.return_mo(0, chargeInfo=chargeinfo)
def charge_data(self, mi): chargeinfo = self.get_charge_info(mi) orderPlatformId = chargeinfo['platformOrderId'] vivo_appId = mi.getParamStr('vivo_appId') appinfoconfig = TyContext.Configure.get_global_item_json('vivo_appkeys', {}) appdata = appinfoconfig.get(str(vivo_appId), None) if not appdata: config = GameItemConfigure(chargeinfo['appId']).get_game_channel_configure_by_package('vivo', chargeinfo[ 'packageName'], chargeinfo[ 'mainChannel']) appdata = { 'cpid': config.get('vivo_cpid'), 'appid': config.get('vivo_appId'), 'cpkey': config.get('vivo_cpkey'), } cpkey = appdata['cpkey'] url = 'https://pay.vivo.com.cn/vcoin/trade' params = { 'version': '1.0.0', # 'signature': '', 'cpId': appdata['cpid'], 'appId': appdata['appid'], 'cpOrderNumber': orderPlatformId, 'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/vivounion/callback', 'orderTime': datetime.datetime.now().strftime('%Y%m%d%H%M%S'), 'orderAmount': int(float(chargeinfo['chargeTotal']) * 100), 'orderTitle': chargeinfo['buttonName'], 'orderDesc': chargeinfo['buttonName'], 'extInfo': orderPlatformId } sign = self.__cal_sign(params, cpkey) params['signature'] = sign params['signMethod'] = 'MD5' response, _ = TyContext.WebPage.webget(url, params) TyContext.ftlog.debug('TuYouPayVivounionV4 -> trade response ->', response) try: datas = json.loads(response) if int(datas['respCode']) != 200: raise PayErrorV4(1, 'TuYouPayVivo charge_data->order push url response ERROR, rspmsg=', datas['respMsg']) if not self.__verify_sign(datas, cpkey, datas['signature']): raise PayErrorV4(1, 'vivo 验签失败!') chargeinfo['chargeData'] = {'vivoOrder': datas['orderNumber'], 'vivoSignature': datas['accessKey']} return self.return_mo(0, chargeInfo=chargeinfo) except: raise PayErrorV4(1, 'TuYouPayVivo charge_data->order push url return ERROR, response=', response)
def charge_data(self, mi): chargeinfo = self.get_charge_info(mi) appid = mi.getParamStr('iappay_appid', None) if not appid: raise PayErrorV4(1, "爱贝支付ID不存在") iappayConfig = TyContext.Configure.get_global_item_json( 'iappay_config', {}) appKey = iappayConfig.get(appid)['appkey'] if iappayConfig.get( appid) else "" if not appKey: chargeType = chargeinfo['chargeType'] sdk = chargeType.split('.')[0] config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( sdk, chargeinfo['packageName'], chargeinfo['mainChannel']) prodConfig = config.get('products', {}) diamondList = filter( lambda x: chargeinfo['diamondId'] in x.values(), prodConfig) diamondConfig = diamondList[0] if diamondList else {} if not diamondConfig: raise PayErrorV4(1, '【爱贝】没有对应的计费点代码!') chargeinfo['chargeData'] = { 'waresid': diamondConfig.get("feecode"), 'appKey': config.get('iappay_appKey') } return self.return_mo(0, chargeInfo=chargeinfo) try: # if 'prodId' in chargeinfo: # waresid = iappayConfig[appid]['payConfig'][chargeinfo['prodId']] # if 'buttonId' in chargeinfo: # waresid = iappayConfig[appid]['payConfig'][chargeinfo['buttonId']] # elif 'diamondId' in chargeinfo: waresid = iappayConfig[appid]['payConfig'][chargeinfo['diamondId']] # else: # waresid = None except: waresid = None if not waresid: raise PayErrorV4(1, '【爱贝】没有对应的计费点代码!') if not appKey: TyContext.ftlog.error('TuYooIappay this id has no key , id ', appid) raise PayErrorV4(1, '爱贝ID [%s] 没有找到对应的参数' % appid) if not waresid: TyContext.ftlog.error( 'TuYooIappay this prodId has no waresid , chargeinfo ', chargeinfo) chargeinfo['chargeData'] = {'waresid': waresid, 'appKey': appKey} return self.return_mo(0, chargeInfo=chargeinfo)
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)
def _check_session(cls, params, accountId): TyContext.ftlog.debug( 'AccountMeizu _check_session , params from client', params) try: client_sessionId, client_appId = params['snsToken'][6:].split(' ') except Exception as e: TyContext.ftlog.error('AccountMeizu _check_session ,exception:', e) return False meizu_config = TyContext.Configure.get_global_item_json( 'meizu_config', {}) try: appkey = meizu_config[client_appId]['appkey'] except KeyError: mainchannel = params['clientId'].split('.')[-2] config = GameItemConfigure( params['appId']).get_game_channel_configure_by_primarykey( 'meizu', 'mz_appId', client_appId, mainchannel) if not config: TyContext.ftlog.debug( cls.__name__, 'meizu,can not get config for appId:%s ' % client_appId) return False appkey = config.get('mz_appSecret', '') server_time = int(time.time()) md5_str = cls._calc_sign(client_appId, client_sessionId, server_time, accountId, appkey) post_param = 'app_id=%s&session_id=%s&ts=%s&uid=%s&sign_type=md5&sign=%s' % ( client_appId, client_sessionId, server_time, accountId, md5_str) url = 'https://api.game.meizu.com/game/security/checksession' try: response, _ = TyContext.WebPage.webget(url, postdata_=post_param) except Exception as e: TyContext.ftlog.error( 'AccountMeizu _check_session error, exception', e) return False try: infos = json.loads(response) except Exception as e: TyContext.ftlog.error( 'AccountMeizu _check_session->infourl json' ' wrong, response=', response, 'exception', e) return False TyContext.ftlog.info('AccountMeizu _check_session responseinfo ', infos) if int(infos['code']) != 200: return False return True
def charge_data(self, mi): chargeinfo = self.get_charge_info(mi) appId = mi.getParamStr('lenovodj_openId', None) if not appId: raise PayErrorV4(1, '请检查一下是否有联想单机的openId') diamondId = chargeinfo['buttonId'] prodconfig = TyContext.Configure.get_global_item_json( 'lenovodanji_prodids', {}) data = None payCode = None bgname = None try: data = prodconfig[str(appId)].get(str(diamondId), None) except Exception as e: TyContext.ftlog.info('doLenovoDanji old app requested!, ', e) appKey = '' appConfig = TyContext.Configure.get_global_item_json( 'lenovodanji_config', {}) for item in appConfig: if 0 == cmp(str(appId), item['appId']): appKey = item['appKey'] break else: TyContext.ftlog.error( 'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkey by appid:', appId) # raise PayErrorV4(1,'【联想单机】openId[%s]对应的参数没有找到!' % appId) # 前端不要private key开头和结尾的字符 appKey = appKey.replace('-----BEGIN PRIVATE KEY-----\n', '').replace('\n-----END PRIVATE KEY-----', '') if data: payCode = data['feecode'] if not payCode or not appKey: config = GameItemConfigure( chargeinfo['appId']).get_game_channel_configure_by_package( 'lenovodj', chargeinfo['packageName'], chargeinfo['mainChannel']) prodconfig = config.get('products', {}) diamondList = filter(lambda x: diamondId in x.values(), prodconfig) diamondConfig = diamondList[0] if diamondList else {} payCode = diamondConfig.get('code', '') appKey = config.get('lenovo_appKey', '') if not payCode or not appKey: raise PayErrorV4(1, '【联想单机】没有找到计费点!') chargeinfo['chargeData'] = {'msgOrderCode': payCode, 'appKey': appKey} return self.return_mo(0, chargeInfo=chargeinfo)
def generate_sign(self, mi, chargeinfo): uc_uid = mi.getParamStr('uc_uid', '') params = { 'amount': '%.2f' % chargeinfo['chargeTotal'], 'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/uc/callback', 'accountId': uc_uid, 'signType': 'MD5', 'callbackInfo': chargeinfo['userId'], 'cpOrderId': chargeinfo['platformOrderId'] } from hashlib import md5 signStr = ''.join(k + '=' + str(params[k]) for k in sorted(params) if k != 'sign' and k != 'signType') config = GameItemConfigure.get_game_channel_configure_by_orderId( params['cpOrderId'], 'uc') if not config: TyContext.ftlog.error( 'TuYouPayUcV4,can not find uc config for package:', chargeinfo['packageName']) config = {} apiKey = config.get('apiKey', '') signStr += apiKey m = md5(signStr) params['sign'] = m.hexdigest().lower() return params
def check_sign(self, rparams): sign = rparams['Sign'] app_id = rparams['AppID'] order_serial = rparams['OrderSerial'] order_id = rparams['CooperatorOrderSerial'] content = rparams['Content'] config = TyContext.Configure.get_global_item_json("bdgame_keys", {}) try: secret_key = config[str(app_id)]['secretKey'] except: config = GameItemConfigure.get_game_channel_configure_by_orderId( order_id, "bdgame") secret_key = config.get('bdgame_secretKey', "") if not secret_key: TyContext.ftlog.debug( "do BdgameCallback ->cannot find sdkconfig for", app_id) return False text = '%s%s%s%s%s' % (app_id, order_serial, order_id, content, secret_key) if sign == md5(text).hexdigest(): return True else: return False
def filter_payment(self, payment, prod_info, **kwargs): """ 支付方式列表中过滤检查,没有计费点得商品就不要显示此支付方式 :param prodInfo: :param chargeInfo: :param kwargs: :return: """ appId = kwargs['appId'] clientId = kwargs['clientId'] userId = kwargs['userId'] wxpap_config = GameItemConfigure(appId).get_game_channel_configure( 'wxpap_config') wxpap_contract_id, wxpap_contract_code = TyContext.RedisUser.execute( userId, 'HMGET', 'user:%s' % userId, 'wxpap_contract_id', 'wxpap_contract_code') if wxpap_contract_id and wxpap_contract_code: payment['options'] = { 'wxpap_sign': 1, } else: payment['options'] = { 'wxpap_sign': 0, } return True
def __verify_sign(cls, rparam, sign): ucconfig = TyContext.Configure.get_global_item_json('ucdj_config', {}) gameid = rparam['gameId'] apiKey = "" try: ucgameidconfig = ucconfig[gameid] if None != ucgameidconfig: apiKey = str(ucgameidconfig['apiKey']) except: orderPlatformId = rparam['orderId'] config = GameItemConfigure.get_game_channel_configure_by_orderId( orderPlatformId, 'ucdanji') apiKey = config.get('apiKey', "") check_str = ''.join( [k + '=' + rparam[k] for k in sorted(rparam.keys())]) + apiKey digest = md5(check_str).hexdigest().lower() TyContext.ftlog.info( 'TuYouPayUcDj->doUcDjCallback verify sign: expected sign', sign, 'calculated', digest, 'rparam', rparam, 'check_str', check_str) if digest != sign: TyContext.ftlog.error( 'TuYouPayUcDj->doUcDjCallback verify sign failed: expected sign', sign, 'calculated', digest, 'rparam', rparam, 'check_str', check_str) return False return True
def _check_sign(self, rparams, app_id): serverid = rparams['serverid'] custominfo = rparams['custominfo'] openid = rparams['openid'] ordernum = rparams['ordernum'] status = rparams['status'] paytype = rparams['paytype'] amount = rparams['amount'] errdesc = rparams['errdesc'] paytime = rparams['paytime'] sign = rparams['sign'] config = TyContext.Configure.get_global_item_json('yiwan_keys', {}) try: appKey = config[str(app_id)]['appKey'] except KeyError: appConfig = GameItemConfigure.get_game_channel_configure_by_orderId( custominfo) appKey = appConfig.get('appKey') text = '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' % ( serverid, custominfo, openid, ordernum, status, paytype, amount, errdesc, paytime, appKey) if sign == md5(text).hexdigest(): return True else: return False
def __verify_sign(cls, rparam, sign): ucconfig = TyContext.Configure.get_global_item_json('uc_config', {}) gameid = rparam['gameId'] try: ucgameidconfig = ucconfig[gameid] apiKey = str(ucgameidconfig['apiKey']) except KeyError: config = GameItemConfigure.get_game_channel_configure_by_orderId( rparam['cpOrderId'], 'uc') apiKey = config.get('apiKey') check_str = ('accountId=' + rparam['accountId'] + 'amount=' + rparam['amount'] + 'callbackInfo=' + rparam['callbackInfo'] + 'cpOrderId=' + rparam['cpOrderId'] + 'creator=' + rparam['creator'] + 'failedDesc=' + rparam['failedDesc'] + 'gameId=' + rparam['gameId'] + 'orderId=' + rparam['orderId'] + 'orderStatus=' + rparam['orderStatus'] + 'payWay=' + rparam['payWay'] + apiKey) m = md5() m.update(check_str) digest = m.hexdigest() if digest != sign: TyContext.ftlog.error( 'TuYouPayUc.doUcCallback verify sign failed: expected sign', sign, 'calculated', digest, 'rparam', rparam, 'check_str', check_str) return False return True
def handle_weixinjs(self, mi): chargeInfo = self.get_charge_info(mi) # 必须采用途游棋牌的wxappId wxappId = 'wxb01a635a437adb75' # mi.getParamStr('wxappId') openid = mi.getParamStr('openid', None) tradeType = mi.getParamStr('tradeType', 'WAP') wxconfig = TyContext.Configure.get_global_item_json('wx_config', {}) config = wxconfig.get(str(wxappId), None) if config: wxappId = str(config['appId']) wxpaySignKey = str(config['paySignKey']) wxappSecret = str(config['appSecret']) wxpartnerId = str(config['partnerId']) wxpartnerKey = str(config['partnerKey']) else: appId = chargeInfo['appId'] packageName = chargeInfo['packageName'] config = GameItemConfigure( appId).get_game_channel_configure_by_package( 'weixin', packageName) if not config: raise PayErrorV4( 1, 'can not find wxpay config info define of wxappId=' + str(wxappId)) wxappId = str(config['WXAPPID']) wxpaySignKey = "" # 用不到了 wxappSecret = str(config['WXAPPKEY']) wxpartnerId = str(config['partnerId']) wxpartnerKey = str(config['partnerKey']) token = self.__get_accesstoken(wxappId, wxappSecret) payData = self.__get_prepayid_new(chargeInfo, token, wxappId, wxpaySignKey, wxpartnerId, wxpartnerKey, tradeType, openid) return self.return_mo(0, chargeInfo=chargeInfo, payData=payData)
def doXYZSDJPayCallback(cls, rpath): # 获取XY助手单机斗地主的appkey和paykey rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = rparam["extra"] try: appid = rparam['orderid'].split('_')[0] keyvalue = TyContext.Configure.get_global_item_json( 'XYDJSdk_config', {}) if keyvalue and appid in keyvalue: appkey = keyvalue[appid]['appkey'] paykey = keyvalue[appid]['paykey'] else: config = GameItemConfigure.get_game_channel_configure_by_orderId( orderPlatformId) appkey = config.get('appkey', "") paykey = config.get('paykey', "") if not appkey or not paykey: TyContext.ftlog.error( 'TuYouPayXYZS->doXYZSDJPayCallback get appkey and paykey ERROR' ) return cls._response_result(8) except: TyContext.ftlog.error( 'TuYouPayXYZS->doXYZSDJPayCallback get appkey and paykey ERROR' ) return cls._response_result(8) TyContext.ftlog.debug( 'TuYouPayXYZS->doXYZSDJPayCallback rparam: [%s], appid: [%s], appkey: [%s], paykey: [%s]' % (rparam, appid, appkey, paykey)) ChargeModel.save_third_pay_order_id(orderPlatformId, rparam.get('orderid', '')) return cls._docallback(appkey, paykey)
def doVivoCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doVivoCallback->rparam=', rparam) orderPlatformId = rparam['storeOrder'] try: appinfoconfig = TyContext.Configure.get_global_item_json( 'vivo_appkeys', {}) cpId = rparam['storeId'] appdata = appinfoconfig[str(cpId)] appKey = appdata['cpkey'] except KeyError: config = GameItemConfigure.get_game_channel_configure_by_orderId( orderPlatformId, 'vivo') appKey = config.get('vivo_cpkey') sign = rparam['signature'] if not cls.__verify_sign(rparam, appKey, sign): return 'ERROR' total_fee = float(rparam['orderAmount']) ChargeModel.save_third_pay_order_id(rparam.get('vivoOrder', '')) isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'SUCCESS' else: return 'ERROR'
def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) cporderid = chargeinfo.get('platformOrderId', '') config = GameItemConfigure.get_game_channel_configure_by_orderId(cporderid, 'more') appkey = config.get('more_appkey', '') chargeinfo['chargeData'] = {'callbackUrl': PayHelperV4.getSdkDomain() + '/v1/pay/more/callback'} return cls.return_mo(0, chargeInfo=chargeinfo)
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'
def doWXpayCallback(self, 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) if not config: appConfig = GameItemConfigure.get_game_channel_configure_by_orderId( orderPlatformId, 'weixin') 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 self.__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 = PayHelperV4.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
def doLenovoDanjiCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doLenovoDanjiCallback->rparam=', rparam) try: transdata = rparam['transdata'] verifyData = transdata signStr = rparam['sign'] transdata = json.loads(transdata) TyContext.ftlog.debug( 'TuYouPayLenovoDanji->doLenovoDanjiCallback transdata: ', transdata) orderPlatformId = transdata['cpprivate'] appid = transdata['appid'] total_fee = transdata['money'] result = transdata['result'] paytype = transdata['paytype'] ChargeModel.save_third_pay_order_id(orderPlatformId, transdata.get('transid')) except Exception as e: TyContext.ftlog.error( 'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR:', e) return 'FAILURE' if '0' != str(result): TyContext.ftlog.error( 'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR, sign error !! rparam=', rparam, 'sign=', sign) PayHelperV4.callback_error(orderPlatformId, '支付失败', transdata) return 'FAILURE' appkeyconfig = TyContext.Configure.get_global_item_json( 'lenovodanji_config', {}) if not appkeyconfig: TyContext.ftlog.error( 'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkeyconfig by lenovodanji_config' ) for item in appkeyconfig: if 0 == cmp(appid, item['appId']): lenovodanji_prikey_str = item['appKey'] break else: TyContext.ftlog.error( 'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkey by appid:', appid) config = GameItemConfigure.get_game_channel_configure_by_orderId( orderPlatformId, 'lenovodj') lenovodanji_prikey_str = cls.loadRsaPrivateKey( config.get('lenovo_appKey', "")) if not cls.verifySign(lenovodanji_prikey_str, verifyData, signStr): TyContext.ftlog.error( 'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR, sign error') return 'FAILURE' transdata['sub_paytype'] = paytype PayHelperV4.callback_ok(orderPlatformId, float(total_fee) / 100, transdata) return 'SUCCESS'