def doCallback(cls, rpath): rparams = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug('TuYouPayM4399->doCallback, rparams=', rparams) orderid = rparams['orderid'] p_type = rparams['p_type'] uid = rparams['uid'] money = rparams['money'] gamemoney = rparams['gamemoney'] serverid = rparams.get('serverid', '') mark = rparams.get('mark', '') roleid = rparams.get('roleid', '') time = rparams.get('time', '') sign = rparams.get('sign', '') ### platformOrderId = mark chargeKey = 'sdk.charge:m4399:%s' % platformOrderId appKey, appSecret = TyContext.RedisPayData.execute( 'HMGET', chargeKey, 'appKey', 'appSecret') # TyContext.ftlog.debug('TuYouPayM4399->get order info:', 'userId=%s platformOrderId=%s appKey=%s' % (userId, platformOrderId, appKey)) signList = [ orderid, uid, money, gamemoney, serverid, appSecret, mark, roleid, time ] mysign = hashlib.md5(''.join(signList)).hexdigest() if mysign != sign: TyContext.ftlog.error( 'doIDOCallback->ERROR, sign error !! rparam=', rparams) return '{"status":1, "code":"sign_error", "money":"%s", "gamemoney":"%s", "msg":"充值成功"}' % ( money, gamemoney) # do charge isOk = PayHelper.callback_ok(platformOrderId, -1, rparams) if isOk: return '{"status":2,"code":null, "money":"%s", "gamemoney":"%s", "msg":"充值成功"}' % ( money, gamemoney) else: return '{"status":1,"code":"other_error", "money":"%s", "gamemoney":"%s", "msg":"充值成功"}' % ( money, gamemoney)
def doOppoCallback(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = '' try: notifyId = rparam['notifyId'] orderPlatformId = rparam['partnerOrder'] productName = rparam['productName'] productDesc = rparam['productDesc'] price = rparam['price'] count = rparam['count'] attach = rparam['attach'] sign = rparam['sign'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doOppoCallback->ERROR, param error !! rparam=', rparam) return 'result=FAIL&resultMsg=参数错误' baseString = 'notifyId=' + notifyId + '&partnerOrder=' + orderPlatformId + '&productName=' + productName + '&productDesc=' + productDesc + '&price=' + str( price) + '&count=' + str(count) + '&attach=' + attach # 签名校验 if not rsaVerify(baseString, sign, 'oppo'): TyContext.ftlog.error( 'TuyouPayOppo.doOppoCallback rsa verify error !!') return 'result=FAIL&resultMsg=签名验证失败' total_fee = float(price) / 100 isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'result=OK&resultMsg=成功' else: return 'result=FAIL&resultMsg=发商品失败' pass
def __pay_card_request__(cls, chargeInfo, mi, mo, cardType): rparam = cls.__get_card_request_params__(chargeInfo, mi, mo, cardType) if not rparam: return PayConst.CHARGE_STATE_REQUEST_RETRY cardUrl = cls.szf_url + '?' + PayHelper.createLinkString4Get(rparam) TyContext.ftlog.info('TuYouPaySzf->requestUrl=', cardUrl) response, cardUrl = TyContext.WebPage.webget(cardUrl, {}) TyContext.ftlog.info('TuYouPaySzf->requestUrl=', cardUrl, 'response=', response) status = 0 try: status = int(response) except: status = 0 if status != 200: if status in cls.szf_request_code: errInfo = cls.szf_request_code[status] else: errInfo = '充值卡支付失败' errInfo = errInfo.decode('utf-8') mo.setError(1, errInfo) return PayConst.CHARGE_STATE_REQUEST_IGNORE else: return PayConst.CHARGE_STATE_REQUEST
def doGeFuPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doGeFuPayCallback->rparam', rparam) try: orderPlatformId = rparam['orderno'] total_fee = float(rparam['fee']) / 100 reqTime = rparam['reqtime'] status = rparam['status'] mobileId = rparam.get('mobilenum') sign = rparam['sign'] except Exception as e: TyContext.ftlog.error('doGeFuPayCallback->ERROR, exception', e, 'rparam', rparam) return 'error' pathType = TyContext.RunHttp.get_request_path() chargeType = pathType.find('gefusdk') if chargeType != -1: thirdPartyId = '43' rparam['chargeType'] = 'gefusdk' else: thirdPartyId = '32' rparam['chargeType'] = 'gefu' gefuconfig = TyContext.Configure.get_global_item_json( 'gefupay_config', {}) md5key = gefuconfig[thirdPartyId]['md5key'] paramsIn = rparam['fee'] + rparam['orderno'] + rparam['reqtime'] if not cls._verify_sign(paramsIn, sign, md5key): TyContext.ftlog.error('do_gefupay_callback->ERROR invalid sign', sign) return 'error' PayHelper.set_order_mobile(orderPlatformId, mobileId) if status == 'success': PayHelper.callback_ok(orderPlatformId, total_fee, rparam) return 'success' errinfo = '支付失败' PayHelper.callback_error(orderPlatformId, errinfo, rparam) return 'failed'
def doYdMmCallback(cls, rpath): xmldata = TyContext.RunHttp.get_body_content() TyContext.ftlog.info('TuYouPayYdMmWeak.doYdMmCallback in xmldata=', ''.join(xmldata.splitlines())) orderPlatformId = '' try: xmlroot = ElementTree.fromstring(xmldata) # orderPlatformId = xmlroot.find('OrderId').text orderPlatformId = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}ExData').text if not orderPlatformId: TyContext.ftlog.info( 'TuYouPayYdMmWeak.doYdMmCallback->ERROR, orderPlatformId error !! xmldata=', xmldata) return TuYouPayYdMmWeak.XML_RET % ('1') OrderID = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}OrderID').text # TradeID = xmlroot.find('{http://www.monternet.com/dsmp/schemas/}TradeID').text # ActionTime = xmlroot.find('{http://www.monternet.com/dsmp/schemas/}ActionTime').text AppID = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}AppID').text PayCode = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}PayCode').text ChannelID = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}ChannelID').text TotalPrice = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}TotalPrice' ).text # 单位:分 MD5Sign = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}MD5Sign').text except Exception as e: TyContext.ftlog.info( 'TuYouPayYdMmWeak.doYdMmCallback->xmldata error', e) return TuYouPayYdMmWeak.XML_RET % ('1') notifys = { 'xml': xmldata, 'chargeType': 'ydmm', 'pay_appid': AppID, 'third_orderid': OrderID, 'third_prodid': PayCode } ProvinceID = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}ProvinceID') FeeMSISDN = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}FeeMSISDN') OrderType = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}OrderType') ReturnStatus = xmlroot.find( '{http://www.monternet.com/dsmp/schemas/}ReturnStatus') if OrderType is None or OrderType.text == '0': TyContext.ftlog.info('doYdMmCallback->isTestOrder: OrderID', OrderID, 'platformOrder', orderPlatformId, 'OrderType', OrderType.text) notifys['isTestOrder'] = True if FeeMSISDN is not None: notifys['third_userid'] = FeeMSISDN.text if ProvinceID is not None: notifys['third_provid'] = ProvinceID.text if OrderID == '0' * len(OrderID): errorMessage = cls.StatusMessage(ReturnStatus) TyContext.ftlog.info( 'TuYouPayYdMmWeak.doYdMmCallback->ERROR, failed order: OrderID: [%s], message: [%s]', (OrderID, errorMessage)) PayHelper.callback_error(orderPlatformId, errorMessage, notifys) # 需要回0,否则ydmm会一直重试 return TuYouPayYdMmWeak.XML_RET % ('0') if not cls._check_sign(AppID, OrderID, ChannelID, PayCode, MD5Sign, orderPlatformId): order = PlatformOrder(orderPlatformId) TyContext.ftlog.error( 'doYdMmCallback check sign failed, might be config error: orderid', orderPlatformId, 'userId', order.userid, 'clientId', order.clientid, 'buttonId', order.buttonid, 'AppID', AppID, 'PayCode', PayCode) return TuYouPayYdMmWeak.XML_RET % ('1') isOk = PayHelper.callback_ok(orderPlatformId, float(TotalPrice) / 100.0, notifys) # 需要回0,否则ydmm会一直重试 return TuYouPayYdMmWeak.XML_RET % ('0')
def doLianTongWoCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info( 'TuYouPayLianTongWo.doLianTongWoCallback->rparam=', rparam) # 订单验证处理 if 'serviceid' in rparam and rparam['serviceid'] == 'validateorderid': return cls._validate_orderid(rparam) # 成功回调处理 xmldata = TyContext.RunHttp.get_body_content() # xmldata = '<callbackReq><orderid>XXX</orderid><ordertime>XXX</ordertime> # <cpid>XXX</cpid><appid>XXX</appid><fid>XXX</fid><consumeCode>XXX</consumeCode> # <payfee>XXX</payfee><payType>XXX</payType><hRet>XXX</hRet> # <status>XXX</status><signMsg>XXX</signMsg></callbackReq>' TyContext.ftlog.info( 'TuYouPayLianTongWo.doLianTongWoCallback in xmldata=', xmldata) try: xmlroot = ElementTree.fromstring(xmldata) orderid = xmlroot.find('orderid').text if len(orderid) == 24: orderPlatformId = orderid[10:] else: orderPlatformId = orderid ordertime = xmlroot.find('ordertime').text cpid = xmlroot.find('cpid').text if xmlroot.find('appid').text: appid = xmlroot.find('appid').text else: # appid = '905608778920130929155624363800' appid = '' # appid = xmlroot.find('appid').text if appid is None: appid = '' fid = xmlroot.find('fid').text consumeCode = xmlroot.find('consumeCode').text payfee = int(xmlroot.find('payfee').text) # 单位:分 payType = int(xmlroot.find('payType').text) hRet = int(xmlroot.find('hRet').text) status = xmlroot.find('status').text signMsg = xmlroot.find('signMsg').text except Exception as e: TyContext.ftlog.info( 'TuYouPayLianTongWo.doLianTongWoCallback->ERROR, exception', e) return TuYouPayLianTongWo.XML_ERRO appInfo = cls._get_order_info(orderPlatformId) clientId = appInfo.get('clientId', '') # tSign = 'orderid='+orderPlatformId+'&ordertime='+ordertime+'&cpid='+cpid # +'&appid='+appid+'&fid='+fid+'&consumeCode='+consumeCode # +'&payfee='+str(payfee)+'&payType='+str(payType)+'&hRet='+str(hRet) # +'&status='+status+'&Key='+TuYouPayLianTongWo.appkeys[str(appid)] TyContext.ftlog.debug('TuYouPayLianTongWo.doLianTongWoCallback ->', orderid, ordertime, cpid, appid, fid, consumeCode, payfee, payType, hRet, status, TuYouPayLianTongWo.appkeys) tSign = 'orderid=' + orderid + '&ordertime=' + ordertime + '&cpid=' + cpid + '&appid=' + appid + \ '&fid=' + fid + '&consumeCode=' + consumeCode + '&payfee=' + str(payfee) + '&payType=' + str(payType) + \ '&hRet=' + str(hRet) + '&status=' + status + '&Key=' + TuYouPayLianTongWo._get_appkey(cpid, clientId) vSign = cls._calc_md5_sign(tSign) if signMsg != vSign: TyContext.ftlog.info( 'TuYouPayLianTongWo.doLianTongWoCallback->ERROR, sign error !! sign=', signMsg, 'vSign=', vSign) return TuYouPayLianTongWo.XML_ERRO # TyContext.ftlog.info('TuYouPayLianTongWo.doLianTongWoCallback in orderPlatformId=', orderPlatformId, 'hRet=', hRet, 'status=', status) notifys = { 'xml': xmldata, 'chargeType': 'liantong.wo', 'pay_appid': appid if appid else 'na', 'sub_paytype': payType, 'third_prodid': consumeCode } provinceid = TyContext.RedisPayData.execute( 'HGET', 'liantongwo:' + str(orderPlatformId), 'provinceid') if provinceid: notifys['third_provid'] = provinceid # 联通集成其他短信支付以后status码会出现其他值, if str(hRet) == '0': # and str(status) == '00000' : isOk = PayHelper.callback_ok(orderPlatformId, -1, notifys) if isOk: retXml = TuYouPayLianTongWo.XML_OK else: retXml = TuYouPayLianTongWo.XML_ERRO else: PayHelper.callback_error(orderPlatformId, str(hRet) + '|' + str(status), notifys) retXml = TuYouPayLianTongWo.XML_OK return retXml
def do_yipay_callback(cls, paytype): rparam = TyContext.RunHttp.convertArgsToDict() try: orderPlatformId = rparam['app_orderid'] mobileId = rparam.get('phone', '') if not mobileId and 'phone' in rparam.keys(): del rparam['phone'] sign = rparam['sign'] merc_id = rparam['merc_id'] status = int(rparam['status']) user_id = rparam['userid'] is_monthly = int(rparam['is_monthly']) except Exception as e: TyContext.ftlog.error('do_yipay_callback->ERROR, exception', e, 'rparam', rparam) return 'error' # 签名校验 appkey_config = TyContext.Configure.get_global_item_json( 'yipay_appkey_config', {}) try: appkey = appkey_config[merc_id] except: TyContext.ftlog.error( 'do_yipay_callback appkey not configed' ' for merc_id', merc_id) return 'error' if not cls._verify_sign(rparam, sign, appkey): return 'error' rec_amount = rparam['rec_amount'] pay_amount = rparam['pay_amount'] if rec_amount != pay_amount: TyContext.ftlog.error('do_yipay_callback pay_amount', pay_amount, 'not equal to rec_amount', rec_amount) total_fee = float(pay_amount) / 100 rparam['third_orderid'] = rparam['orderid'] rparam['sub_paytype'] = rparam['ch_type'] rparam['chargeType'] = paytype rparam['mobileId'] = mobileId if status == 1: PayHelper.set_order_mobile(orderPlatformId, mobileId) # 判断用户购买的是不是包月会员 if 2 == is_monthly: TyContext.ftlog.debug( 'TuYouPayYi->doYiPayCallback User [%s] buy monthly goods.' % user_id) # 修改用户表,将用户状态置为会员状态 ''' if 'message' in rparam: message = rparam['message'] else: TyContext.ftlog.info('TuYouPayYi->doYiPayCallback ERROR, Doesn\'t has message parameter.' 'userid: [%s], platformorderid: [%s], third_id: [%s]' % (user_id, orderPlatformId, rparam['third_orderid'])) message = '退订请联系会员退订专用电话: 4008-098-000' ''' message = '退订请联系会员退订专用电话: 4008-098-000' # 记录购买会员的appId、clientId chargeKey = 'sdk.charge:' + orderPlatformId chargeInfo = TyContext.RedisPayData.execute( 'HGET', chargeKey, 'charge') if chargeInfo == None: chargeInfo = {} else: chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) appId = chargeInfo.get('appId', 9999) clientId = chargeInfo.get('clientId', '') diamondId = chargeInfo.get('diamondId', '') TyContext.RedisUser.execute( user_id, 'HMSET', 'user:'******'isYouyifuVipUser', '1', 'youyifuVipMsg', message, 'bugYouyifuVipAppid', appId, 'bugYouyifuVipClientid', clientId, 'bugYouyifuVipDiamondid', diamondId) # 这个参数用来告诉游戏服务器,这个商品是一件优易付的会员包月商品 rparam['isYouyifuMonthVip'] = '1' PayHelper.callback_ok(orderPlatformId, total_fee, rparam) cls.reportBi(Order.SUBSCRIBE, rparam) TyContext.ftlog.info( 'TuYouPayYi->doYiPayCallback user %s has subscribed Monthly VIP.' % user_id) else: PayHelper.callback_ok(orderPlatformId, total_fee, rparam) return 'success' elif status == 3: # 包月退订,修改用户表,将用户状态置为非会员状态,并通知游戏服用户退订 status = cls._NotifyGameServerUnsubscribe(orderPlatformId, user_id) if not status: TyContext.ftlog.error( 'TuYouPayYi->doYiPayCallback Notify Game server user [%s] unsubscribed ERROR!' % user_id) return 'success' try: TyContext.MySqlSwap.checkUserDate(user_id) except: TyContext.ftlog.error( 'TuYouPayYi->doYiPayCallback get cold data') TyContext.RedisUser.execute(user_id, 'HSET', 'user:'******'isYouyifuVipUser', '0') cls.reportBi(Order.UNSUBSCRIBE, rparam) return 'success' else: errinfo = '支付失败' + str(rparam.get('status_desc', '')) PayHelper.callback_error(orderPlatformId, errinfo, rparam) return 'success'
def doAnZhiCallback(cls, rpath): postData = TyContext.RunHttp.get_body_content() TyContext.ftlog.debug( 'TuYouPayAnZhi->doAnZhiCallback original postData is:', postData) paramslist = postData.split('&') rparam = {} for k in paramslist: paramdata = k.split('=') rparam[paramdata[0]] = paramdata[1] TyContext.ftlog.debug( 'TuYouPayAnZhi->doAnZhiCallback parame list(Before urldecode) is: ', rparam) for k in rparam.keys(): rparam[k] = unquote(rparam[k]) TyContext.ftlog.debug( 'TuYouPayAnZhi->doAnZhiCallback parame list(After urldecode) is: ', rparam) if 'data' in rparam and 'appId' in rparam: data = rparam['data'] appId = rparam['appId'] else: TyContext.ftlog.error( 'TuYouPayAnZhi->doAnZhiCallback ERROR There doesn\'t has data or appId in post data.' ) return 'failed' anzhiconfig = TyContext.Configure.get_global_item_json( 'anzhi_config', {}) if anzhiconfig: for item in anzhiconfig: if 0 == cmp(item['appId'], appId): cls.encryptKey = item['appsecret'] break else: TyContext.ftlog.error( 'TuYouPayAnZhi->doAnZhiCallback ERROR Cann\'t find appsecert, appId is: ', appId) return 'success' else: TyContext.ftlog.error( 'TuYouPayAnZhi->doAnZhiCallback ERROR cann\'t find anzhi_config.' ) return 'success' try: # 先用base64解码,再采用3des解密 tripelDes = triple_des(cls.encryptKey.encode('ascii'), mode=ECB, padmode=PAD_NORMAL) data = tripelDes.decrypt(base64.b64decode(data)) data = "".join([data.rsplit("}", 1)[0], "}"]) TyContext.ftlog.debug('TuYouPayAnZhi->doAnZhiCallback Data is: ', data) params = json.loads(data) params['third_orderid'] = params['orderId'] # 三方订单号 orderPlatformId = params['cpInfo'] # 途游订单号 orderAmount = params['orderAmount'] # 商品金额(分) code = int(params['code']) # 订单状态 成功:1 TyContext.ftlog.info('TuYouPayAnZhi->doAnZhiCallback params: ', params, ' orderPlatformId is: ', orderPlatformId) except Exception as e: TyContext.ftlog.error('TuYouPayAnZhi->doAnZhiCallback ERROR: ', e) return 'success' # 安智的同事说,只会出现code==1的情况,这里只是为了以防万一 if 1 != code: TyContext.ftlog.error() errinfo = '安智支付失败' PayHelper.callback_error(orderPlatformId, errinfo, params) PayHelper.callback_ok(orderPlatformId, float(orderAmount) / 100, params) return 'success'
class TuYouPayHaiMaWan(object): @classmethod def charge_data(cls, chargeinfo): chargeinfo['chargeData'] = { 'platformOrderId': chargeinfo['platformOrderId'] } @classmethod def doPayHaiMaWanCallback(cls, rpath): message = { 0: '订单未支付', 1: '订单支付成功', 2: '请求订单失败', 3: '订单签名失败', 4: '订单支付失败', 5: '其他失败', } rparam = OrderedDict() params = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug( 'TuYouPayHaiMaWan->doHaiMaWanPayCallback params in Requrest is: ', params) # 获取回掉参数 try: rparam['notify_time'] = params['notify_time'] rparam['appid'] = params['appid'] rparam['out_trade_no'] = params['out_trade_no'] rparam['total_fee'] = params['total_fee'] rparam['subject'] = params['subject'] rparam['body'] = params['body'] rparam['trade_status'] = params['trade_status'] strSign = unquote(params['sign']) except Exception, e: TyContext.ftlog.error( 'TuYouPayHaiMaWan->doHaiMaWanPayCallback get callback param ERROR!', e) return 'fail' # 判断支付状态 status = int(params['trade_status']) if status not in message or 1 != status: TyContext.ftlog.error( 'TuYouPayHaiMaWan->doHaiMaWanPayCallback pay failed, status is: ', message[status]) PayHelper.callback_error(params["out_trade_no"], message[status], rparam) return 'fail' # 验证签名 keyvalue = TyContext.Configure.get_global_item_json( 'haimawan_config', {}) # 获取海马玩的appkey for value in keyvalue: if 0 == cmp(value['appid'], params['appid']): appkey = value['appkey'] break else: TyContext.ftlog.error( 'uYouPayHaiMaWan->doHaiMaWanPayCallback get appkey ERROR') return 'fail' rparam['trade_status'] = rparam['trade_status'] + appkey strBeforeSign = urlencode(rparam) strAfterSign = md5(strBeforeSign).hexdigest() TyContext.ftlog.debug( 'TuYouPayHaiMaWan->doHaiMaWanPayCallback Before sign: [', strBeforeSign, '] ' 'After sign: [', strAfterSign, ']') if 0 != cmp(strSign, strAfterSign): TyContext.ftlog.error( 'TuYouPayHaiMaWan->doHaiMaWanPayCallback veriry sign failed') return 'fail' # 发货并返回结果 orderPlatformId = params["out_trade_no"] total_fee = float(params["total_fee"]) PayHelper.callback_ok(orderPlatformId, total_fee, rparam) TyContext.ftlog.debug( 'TuYouPayHaiMaWan->doHaiMaWanPayCallback deliver goods successed.') return 'success'
def __build_my_sign__(cls, rparam): rstr = PayHelper.createLinkString(rparam) + cls.merchant_security_code ret = PayHelper.md5(rstr) return ret
def userSubscribeFailed(cls, param): PayHelper.callback_error(param['platformOrderId'], param['errorcode'] + ':' + param['errormsg'], param)
'user:'******'diamond') if isinstance(userCoin, (int, float)): userCoin = int(userCoin) else: userCoin = 0 expected = userCoin + num_diamonds added = balance - userCoin if added > 0: if added != num_diamonds: TyContext.ftlog.error( 'PayTencent get_balance_m unexpected: added', added, 'expected', num_diamonds) # TODO RMB to diamond ratio is 1:10 now. hard-code 10.0 here. # refactor in the future to calculate the ratio from diamond list isOk = PayHelper.callback_ok(orderPlatformId, added / 10.0, rparam) return True elif added < 0: # isOk = PayHelper.callback_error(orderPlatformId, # 'diamond out-of-sync', rparam) TyContext.ftlog.error( 'PayTencent get_balance_m diamond out-of-sync: ' 'remote:', balance, 'local:', userCoin) return False else: TyContext.ftlog.debug( 'PayTencent get_balance_m diamond not changed:', balance) return False ################################################################## ###### UNUSED CODE, LEAVE FOR LATER USE #################
def _do_all_callback(self, appkey, notifys): method = notifys.get('method', '') cp_order_id = notifys.get('cp_order_id', '') correlator = notifys.get('correlator', '') order_time = notifys.get('order_time', '') sign = notifys.get('sign', '') if method == 'check': # 订单效验接口 game_account = '' game_fee = '' ct = datetime.datetime.now() order_current_time = ct.strftime('%Y%m%d%H%M%S') if cp_order_id == '' or sign == '': return TuYouPayAiGame.XML_CHECK_RET % (cp_order_id, correlator, game_account, game_fee, '1', order_current_time) orderPlatformId = cp_order_id appInfo = self._get_order_info(orderPlatformId) if 'uid' in appInfo and appInfo['uid'] is not None: game_account = appInfo['uid'] if 'orderPrice' in appInfo and appInfo['orderPrice'] is not None: game_fee = appInfo['orderPrice'] tSign = cp_order_id + str(correlator) + str( order_time) + method + appkey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'TuYouPayAiGame._do_all_callback->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return TuYouPayAiGame.XML_CHECK_RET % (cp_order_id, correlator, game_account, game_fee, '1', order_current_time) return TuYouPayAiGame.XML_CHECK_RET % (cp_order_id, correlator, game_account, game_fee, '0', order_current_time) elif method == 'callback': # 成功回调接口 result_code = notifys.get('result_code', '') fee = notifys.get('fee', '-1') # 单位:元 try: fee = float(fee) except: TyContext.ftlog.error( 'TuYouPayAiGame._do_all_callback->ERROR, fee format error !! fee=', fee) fee = -1 pay_type = notifys.get('pay_type', 'na') ct = datetime.datetime.now() order_current_time = ct.strftime('%Y%m%d%H%M%S') if cp_order_id == '' or sign == '' or method != 'callback': return TuYouPayAiGame.XML_RET % ('1', cp_order_id) orderPlatformId = cp_order_id if appkey: tSign = cp_order_id + str(correlator) + str(result_code) + str( int(fee)) + pay_type + method + appkey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'TuYouPayAiGame._do_all_callback->ERROR,' ' sign error !! sign=', sign, 'vSign=', vSign) return TuYouPayAiGame.XML_RET % ('1', cp_order_id) notifys['chargeType'] = 'aigame' notifys['sub_paytype'] = pay_type notifys['third_orderid'] = correlator notifys['pay_appid'] = notifys.get('game_code', 'na') if str(result_code) == '00': isOk = PayHelper.callback_ok(orderPlatformId, -1, notifys) if not isOk: TyContext.ftlog.error( 'TuYouPayAiGame._do_all_callback->callback failed', 'order', orderPlatformId) retXml = TuYouPayAiGame.XML_RET % ('0', cp_order_id) else: errinfo = TuYouPayAiGame.resultcode_msg.get( result_code, 'result_code(%s) is not 00' % result_code) TyContext.ftlog.error('TuYouPayAiGame._do_all_callback error', errinfo, 'for order', orderPlatformId) PayHelper.callback_error(orderPlatformId, errinfo, notifys) retXml = TuYouPayAiGame.XML_RET % ('0', cp_order_id) return retXml
def doAiDongManCallback(cls, rpath): xmlData = TyContext.RunHttp.getRequestParam('requestData', '') xmlroot = ElementTree.fromstring(xmlData) TyContext.ftlog.info('doAiDongManCallback rparam xmlData', xmlData) params = OrderedDict() params['Behavior'] = xmlroot.find('Behavior').text params['Trade_status'] = xmlroot.find('Trade_status').text params['Trade_no'] = xmlroot.find('Trade_no').text params['Buyer_id'] = xmlroot.find('Buyer_id').text params['Extension'] = xmlroot.find('Extension').text sign = params['Behavior'] + params['Trade_status'] + params['Trade_no'] + params['Buyer_id'] + params[ 'Extension'] params['Product_id'] = xmlroot.find('Product_id').text params['Product_name'] = xmlroot.find('Product_name').text params['Price'] = int(float(xmlroot.find('Price').text)) params['App_id'] = xmlroot.find('App_id').text params['sign'] = xmlroot.find('Sign').text.replace(' ', '+') params['sign'] = ''.join(params['sign'].split()) TyContext.ftlog.info('doAiDongManCallback params', params) aidongmanconfig = TyContext.Configure.get_global_item_json('aidongmanpay_config', {}) if aidongmanconfig: cls.encryptKey = aidongmanconfig['3des']['encryptKey'] # 采用3des加密 padByte = chr(int(8 - len(sign) % 8)) ivBytes = '' ivSource = aidongmanconfig['3des']['iv'] for i in ivSource: ivBytes = ivBytes + chr(int(i)) tripelDes = triple_des(unhexlify(cls.encryptKey), mode=CBC, pad=padByte, IV=ivBytes, padmode=PAD_NORMAL) sign = tripelDes.encrypt(sign) sign = base64.b64encode(sign) plantformId = params['Extension'][23:] TradeNo = xmlroot.find('Trade_no').text params['chargeType'] = 'aidongman' params['third_orderid'] = params['Trade_no'] PayHelper.set_order_mobile(plantformId, params['Buyer_id']) TyContext.ftlog.info('doAiDongManCallback sign', sign, 'params[sign]', params['sign']) ResponseBody = ElementTree.Element('ResponseBody') Trade_no = ElementTree.SubElement(ResponseBody, 'Trade_no') Status = ElementTree.SubElement(ResponseBody, 'Status') Trade_no.text = str(TradeNo) Status.text = '1' mo = ElementTree.tostring(ResponseBody) if sign == params['sign']: if int(params['Trade_status']) == 0 or int(params['Trade_status']) == 1: PayHelper.callback_ok(plantformId, float(params['Price']), params) Status.text = '0' mo = ElementTree.tostring(ResponseBody) TyContext.ftlog.info('doAiDongManCallback->SUCCESS rparams', params, 'mo', mo) return mo else: errinfo = '爱动漫支付失败' PayHelper.callback_error(plantformId, errinfo, params) TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc', errinfo, 'rparams', params, 'mo', mo) return mo else: errinfo = '签名校验失败' PayHelper.callback_error(plantformId, errinfo, params) TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc', errinfo, 'rparams', params) return mo
def charge_data(cls, chargeinfo): notifyurl = PayHelper.getSdkDomain() + '/v1/pay/uc/callback' TyContext.ftlog.debug('TuYouPayUc charge_data callback url=', notifyurl) chargeinfo['chargeData'] = {'notifyUrl': notifyurl}