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)
def callback(cls, platformOrderId, total_fee, state, rparam, errorInfo): TyContext.ftlog.info('****** callback platformOrderId=', platformOrderId, 'total_fee=', total_fee, 'state=', state, 'errorInfo=', errorInfo, 'rparam=', rparam) chargeKey = 'sdk.charge:' + platformOrderId oldState, chargeInfo, consumeInfo = TyContext.RedisPayData.execute( 'HMGET', chargeKey, 'state', 'charge', 'consume') if oldState == None or chargeInfo == None: TyContext.ftlog.error('platformOrderId not found !', platformOrderId) return True chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) paytype = rparam.get('chargeType', chargeInfo.get('chargeType', 'na')) if state == PayConst.CHARGE_STATE_ERROR_CALLBACK: if oldState < PayConst.CHARGE_STATE_ERROR_REQUEST: # 第三方通知充值失败 if errorInfo == None or len(errorInfo) == 0: errorInfo = '充值失败,请关闭页面重试' cls.__change_callback_state__(chargeKey, state, errorInfo, None) else: TyContext.ftlog.info('callback platformOrderId=', platformOrderId, 'old state error, oldState=', oldState, 'newState=', state) Order.log( platformOrderId, Order.CALLBACK_FAIL, chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'], info=errorInfo, prodid=chargeInfo.get('prodId', 'na'), diamondid=chargeInfo['diamondId'], charge_price=chargeInfo.get('chargeTotal', 'na'), succ_price=total_fee, paytype=paytype, sub_paytype=rparam.get('sub_paytype', 'na'), third_prodid=rparam.get('third_prodid', 'na'), third_orderid=rparam.get('third_orderid', 'na'), third_provid=rparam.get('third_provid', 'na'), third_userid=rparam.get('third_userid', 'na'), pay_appid=rparam.get('pay_appid', 'na'), ) return True if state == PayConst.CHARGE_STATE_CALLBACK_OK: isDone = True if oldState < PayConst.CHARGE_STATE_CALLBACK_OK: if oldState < PayConst.CHARGE_STATE_CLIENT_PAY_DONE: Order.log(platformOrderId, Order.CLIENT_FINISHED, chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'], paytype=paytype, prodid=chargeInfo.get('prodId', 'na'), diamondid=chargeInfo['diamondId'], charge_price=chargeInfo.get('chargeTotal', 'na'), succ_price=total_fee) isDone = False if oldState >= PayConst.CHARGE_STATE_ERROR_REQUEST: isDone = False if isDone: # XXX if external orderid is new, consider re-delivery the order?! Order.log( platformOrderId, Order.INTERNAL_ERR, chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'], paytype=paytype, prodid=chargeInfo.get('prodId', 'na'), diamondid=chargeInfo['diamondId'], charge_price=chargeInfo['chargeTotal'], succ_price=total_fee, sub_paytype=rparam.get('sub_paytype', 'na'), third_prodid=rparam.get('third_prodid', 'na'), third_orderid=rparam.get('third_orderid', 'na'), third_provid=rparam.get('third_provid', 'na'), third_userid=rparam.get('third_userid', 'na'), pay_appid=rparam.get('pay_appid', 'na'), info='order state charged', ) TyContext.ftlog.info('callback platformOrderId=', platformOrderId, 'old state is done, oldState=', oldState, 'newState=', state) return True # save charge data UniversalUser().increase_user_charge_data( chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'], chargeInfo.get('chargeTotal', 1), chargeInfo.get('chargeType', 'na')) chargecategories_config = TyContext.Configure.get_global_item_json( 'charge_categories_config', {}) # 单机商城商品TY9999R00020DJ的订单,没有chargeType if 'chargeType' in chargeInfo: for key in chargecategories_config.keys(): if chargeInfo['chargeType'] in key: lastChargeCategory = chargecategories_config[key] TyContext.RedisUser.execute( chargeInfo['uid'], 'HSET', 'user:'******'uid']), 'lastChargeCategory', lastChargeCategory) break try: chargeInfo['isTestOrder'] = rparam['isTestOrder'] except: pass try: chargeInfo['chargeType'] = rparam['chargeType'] except: pass if consumeInfo: consumeInfo = json.loads(consumeInfo) Order.log( platformOrderId, Order.CALLBACK_OK, chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'], paytype=rparam.get('chargeType', 'na'), prodid=chargeInfo.get('prodId', 'na'), diamondid=chargeInfo['diamondId'], prod_price=consumeInfo['consumeCoin'] if consumeInfo else 'na', charge_price=chargeInfo['chargeTotal'], succ_price=total_fee, sub_paytype=rparam.get('sub_paytype', 'na'), third_prodid=rparam.get('third_prodid', 'na'), third_provid=rparam.get('third_provid', 'na'), third_userid=rparam.get('third_userid', 'na'), third_orderid=rparam.get('third_orderid', 'na'), pay_appid=rparam.get('pay_appid', 'na'), mobile=chargeInfo.get('vouchMobile', 'na'), ) try: chargeInfo['paytype_w_appid'] = '_'.join( [chargeInfo['chargeType'], rparam['pay_appid']]) except: pass # 记录支付通道的子渠道 try: chargeInfo['sub_paytype'] = rparam.get('sub_paytype', '') except: pass PayBaseV4.upgrade_user_paylimit_state(chargeInfo['uid'], chargeInfo['chargeType'], chargeInfo['chargeTotal']) cls.__change_user_coin__(platformOrderId, total_fee, chargeInfo, consumeInfo) if not consumeInfo: cls.__change_callback_state__(chargeKey, PayConst.CHARGE_STATE_DONE, '', None) Order.log( platformOrderId, Order.DELIVER_OK, chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'], paytype=paytype, diamondid=chargeInfo['diamondId'], charge_price=chargeInfo['chargeTotal'], succ_price=total_fee, sub_paytype=rparam.get('sub_paytype', 'na'), third_prodid=rparam.get('third_prodid', 'na'), third_orderid=rparam.get('third_orderid', 'na'), pay_appid=rparam.get('pay_appid', 'na'), ) PayHelper.notify_game_server_on_diamond_change({ 'appId': chargeInfo['appId'], 'clientId': chargeInfo['clientId'], 'userId': chargeInfo['uid'], 'buttonId': chargeInfo['diamondId'], 'diamonds': chargeInfo['chargedDiamonds'], 'rmbs': chargeInfo['chargedRmbs'] }) return True cls.__change_callback_state__(chargeKey, PayConst.CHARGE_STATE_CONSUME, '', None) appId = consumeInfo['appId'] appInfo = consumeInfo['appInfo'] clientId = consumeInfo['clientId'] userId = consumeInfo['userId'] consumeCoin = consumeInfo['consumeCoin'] prodId = consumeInfo['prodId'] prodPrice = consumeInfo['prodPrice'] prodCount = consumeInfo['prodCount'] prodName = consumeInfo['prodName'] prodOrderId = consumeInfo['prodOrderId'] mo = TyContext.Cls_MsgPack() mo.setCmd('consume') # modified by zhangshibo at 2015-09-09 if 'isYouyifuMonthVip' in rparam: TyContext.ftlog.debug( 'callback-> Has isYouyifuMonthVip info in rparam.') mo.setParam('is_monthly', '1') # end modify TuyouPayConsume.__consume_user_coin__(appId, appInfo, clientId, userId, consumeCoin, prodId, prodPrice, prodCount, prodName, prodOrderId, mo, chargeInfo) if mo.isError(): cls.__change_callback_state__( chargeKey, PayConst.CHARGE_STATE_ERROR_CONSUME, '', mo) else: cls.__change_callback_state__( chargeKey, PayConst.CHARGE_STATE_DONE_CONSUME, '', mo) PayHelper.notify_game_server_on_diamond_change({ 'appId': appId, 'clientId': clientId, 'userId': userId, 'buttonId': prodId, 'diamonds': chargeInfo['chargedDiamonds'], 'rmbs': chargeInfo['chargedRmbs'] }) return True TyContext.ftlog.error('SHOULDNOT REACH HERE: callback invalid state', state, 'platformOrderId', platformOrderId) return True