def doGeFuBigPaySdkCallback(self, 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' PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) return 'SUCCESS' else: errinfo = '支付失败' PayHelperV4.callback_error(orderPlatformId, errinfo, rparam) return 'FAILURE' else: errinfo = '签名校验失败' PayHelperV4.callback_error(orderPlatformId, errinfo, rparam) return 'FAILURE'
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 doiToolsPayCallback(self, rpath): postData = TyContext.RunHttp.get_body_content() TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback postData: ', postData) paramslist = postData.split('&') params = {} for k in paramslist: paramdata = k.split('=') params[paramdata[0]] = paramdata[1] TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback postParams: ', params) for k in params.keys(): params[k] = urllib.unquote(params[k]) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback postParams_urldecode: ', params) pristr = params['notify_data'] sign = params['sign'] data = rsa_decrypto_with_publickey(pristr, iTools_pubkey_str, 1) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback iTools callback data: ', data) rparam = json.loads(data) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback notify_data: ', rparam) try: orderPlatformId = rparam['order_id_com'] amount = rparam['amount'] account = rparam['account'] third_orderid = rparam['order_id'] result = rparam['result'] user_id = rparam['user_id'] except: TyContext.ftlog.error( 'TuYouPayiTools->doiToolsPayCallback Get params in iTools callback ERROR!' ) return 'fail' if 0 != cmp('success', result): TyContext.ftlog.error( 'TuYouPayiTools->doiToolsPayCallback Charge failed!') errormsg = 'user use ' + account + ' charge ' + result PayHelperV4.callback_error(orderPlatformId, errormsg, rparam) # veriry_result = cls.rsa_verify(data, sign, iTools_pubkey_str) veriry_result = _verify_with_publickey_pycrypto( data, sign, _iTools_pubkey_py) if not veriry_result: TyContext.ftlog.error( 'TuYouPayiTools->doiToolsPayCallback Verify failed! data: %s, sign: %s, iTools_pubkey_str: %s' % (data, sign, iTools_pubkey_str)) return 'fail' rparam['third_orderid'] = third_orderid PayHelperV4.callback_ok(orderPlatformId, amount, rparam) TyContext.ftlog.debug( 'TuYouPayiTools->doiToolsPayCallback user %s charge % successed! ' % (user_id, amount)) return 'success'
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'
def doMeizuPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doMeizuPayCallback rparam', rparam) cp_order_id = None try: cp_order_id = rparam['cp_order_id'] total_price = float(rparam['total_price']) trade_status = rparam['trade_status'] ChargeModel.save_third_pay_order_id(cp_order_id, rparam.get('order_id', '')) except Exception as e: TyContext.ftlog.error('doMeizuCallback param error, exception', e, 'cp_order_id', cp_order_id) return json.dumps({ 'code': 900000, 'message': '参数不匹配', 'redirect': '', 'value': None }) if not cls._check_sign(rparam): TyContext.ftlog.error('TuYouPayMeizu _check_sign failed', cp_order_id) return json.dumps({ 'code': 900000, 'message': '签名错误', 'redirect': '', 'value': None }) if trade_status == '3': PayHelperV4.callback_ok(cp_order_id, total_price, rparam) return json.dumps({ 'code': 200, 'message': '充值成功', 'redirect': '', 'value': None }) elif trade_status == '4': PayHelperV4.callback_error(cp_order_id, '订单取消', rparam) return json.dumps({ 'code': 900000, 'message': '', 'redirect': '', 'value': None }) elif trade_status == '1' or trade_status == '2': return json.dumps({ 'code': 90000, 'message': '订单处理中', 'redirect': '', 'value': None }) elif trade_status == '5': return json.dumps({ 'code': 90000, 'message': '订单异常取消', 'redirect': '', 'value': None })
def doIappayPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() transdata = rparam['transdata'] transdata = json.loads(transdata) sign = rparam['sign'] appid = transdata['appid'] signtype = rparam['signtype'] iappayConfig = TyContext.Configure.get_global_item_json( 'iappay_config', {}) try: pubkey = iappayConfig.get(appid)['pubkey'] if iappayConfig.get( appid) else "" orderPlatformId = transdata['cporderid'] total_fee = transdata['money'] result = transdata['result'] ChargeModel.save_third_pay_order_id(orderPlatformId, transdata.get('transid')) except Exception as e: TyContext.ftlog.error('doIappayPayCallback->ERROR, exception', e, 'rparam', transdata) return 'error' if not pubkey: chargeKey = 'sdk.charge:' + orderPlatformId chargeInfo = TyContext.RedisPayData.execute( 'HGET', chargeKey, 'charge') if chargeInfo: chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) else: return 'failed' chargeType = chargeInfo['chargeType'] sdk = chargeType.split('.')[0] config = GameItemConfigure.get_game_channel_configure_by_orderId( orderPlatformId, sdk) pubkey = config.get('iappay_pubKey') if not pubkey: TyContext.ftlog.error( 'doIappayPayCallback->ERROR,cannot get sdkconfig for', appid) return 'failed' pubkey = cls.loadRsaPublicKey(pubkey) if not cls._verify_sign(rparam, sign, pubkey): errinfo = '支付失败' PayHelperV4.callback_error(orderPlatformId, errinfo, rparam) return 'failed' if result != 0: errinfo = '支付失败' TyContext.ftlog.error( 'doIappayPayCallback->ERROR, exception, result not 0') PayHelperV4.callback_error(orderPlatformId, errinfo, rparam) return 'failed' PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) return 'success'
def doMaopaoPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() maopaoInfo = {} maopaoInfo['orderId'] = rparam['orderId'] maopaoInfo['skyId'] = rparam['skyId'] maopaoInfo['resultCode'] = rparam['resultCode'] maopaoInfo['payNum'] = rparam['payNum'] maopaoInfo['cardType'] = rparam['cardType'] maopaoInfo['realAmount'] = rparam['realAmount'] maopaoInfo['payTime'] = rparam['payTime'] maopaoInfo['failure'] = rparam['failure'] maopaoInfo['signMsg'] = rparam['signMsg'] rparam['third_orderid'] = maopaoInfo['payNum'] rparam['chargeType'] = 'maopao' maopaoConfig = TyContext.Configure.get_global_item_json( 'maopao_config', {}) md5key = maopaoConfig['md5key'] signParams = rparam['orig_uri'] signInfo = signParams[signParams.find('?') + 1:signParams.find('signMsg') - 1] + '&' + 'key' + '=' + md5key TyContext.ftlog.info('doMaopaoCallback signInfo', signInfo) total_fee = int(maopaoInfo['realAmount']) / 100 orderPlatformId = maopaoInfo['orderId'] sign = cls._cal_sign(signInfo) TyContext.ftlog.debug('doMaopaoCallback sign', sign, 'signMsg', maopaoInfo['signMsg'], 'signInfo', signInfo) if sign == maopaoInfo['signMsg']: if int(maopaoInfo['realAmount']) > 0: ChargeModel.save_third_pay_order_id(orderPlatformId, maopaoInfo['payNum']) PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) TyContext.ftlog.info('doMaopaoCallback->SUCCESSFUL rparam', rparam) return 'result=0' else: errinfo = '支付失败' PayHelperV4.callback_error(orderPlatformId, errinfo, rparam) TyContext.ftlog.error('doMaopaoCallback->ERROR, failDesc', errinfo, 'rparam', rparam) else: errinfo = '签名校验失败' PayHelperV4.callback_error(orderPlatformId, errinfo, rparam) TyContext.ftlog.error('doMaopaoCallback->ERROR, failDesc', errinfo, 'rparam', rparam) return 'result=0'
def doUcDjCallback(cls, rpath): body = TyContext.RunHttp.get_body_content() TyContext.ftlog.debug('TuYouPayUcDj->doUcDjCallback Request data: ', body) rparam = TyContext.strutil.loads(body, decodeutf8=True) try: data = rparam['data'] orderPlatformId = data['orderId'] state = data['orderStatus'] total_fee = data['amount'] sign = rparam['sign'] thirdorderid = data['tradeId'] except: TyContext.ftlog.error( 'TuYouPayUcDj->doUcDjCallback ERROR, param error !! rparam=', rparam) return 'FAILURE' # 签名校验 if not cls.__verify_sign(data, sign): TyContext.ftlog.error( 'TuYouPayUcDj->doUcDjCallback verify error !!') return 'FAILURE' # 充值状态校验 if state != 'S': TyContext.ftlog.info( 'TuYouPayUcDj->doUcDjCallback charge failed. fail reason:', data['failedDesc']) PayHelperV4.callback_error(orderPlatformId, data['failedDesc'], rparam) return 'SUCCESS' data['third_orderid'] = thirdorderid total_fee = float(total_fee) ChargeModel.save_third_pay_order_id(orderPlatformId, thirdorderid) PayHelperV4.callback_ok(orderPlatformId, total_fee, data) return 'SUCCESS'
def callback(cls, rpath): try: rparam = PayHelperV4.getArgsDict() TyContext.ftlog.info(cls.__name__, 'callback->rparam=', rparam) orderPlatformId = rparam['mer_trade_code'] if orderPlatformId.find('-') > 0: orderPlatformId = orderPlatformId[0:orderPlatformId.find('-')] mer_code = rparam['mer_code'] bank_pay_flag = rparam['bank_pay_flag'] sign = rparam['sign'] total_fee = rparam.get('pay_amount', rparam.get('rec_amount', -1)) try: total_fee = float(total_fee) except: TyContext.ftlog.error(cls.__name__, 'callback fee error. total_fee', total_fee) total_fee = -1 del rparam['sign'] vSign = cls.__build_my_sign__(rparam) if sign != vSign: raise Exception('sign not equal') rparam['sign'] = sign if mer_code != cls.merchant_code: raise Exception('mer_code is not me !!!') rparam['third_orderid'] = rparam['gateway_trade_code'] if bank_pay_flag == 'success': chargeType = cls.bank_code2charge_type_dict.get(rparam.get('bank_code', ''), None) if chargeType: rparam['chargeType'] = chargeType isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) else: bank_pay_flag = bank_pay_flag.decode('utf-8') isOk = PayHelperV4.callback_error(orderPlatformId, bank_pay_flag, rparam) if isOk: return 'success' except: TyContext.ftlog.exception() return 'error'
class TuYouPayJinritoutiaoV4(PayBaseV4): @payv4_order('jinritoutiao') def charge_data(self, mi): return self.handle_order(mi) @payv4_callback('/open/ve/pay/jinritoutiao/callback') def doJinritoutiaoCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doJinritoutiaoCallback rparam', rparam) try: total_fee = int(rparam['total_fee']) trade_status = rparam['trade_status'] orderPlatformId = rparam['out_trade_no'] appid = rparam['client_id'] except Exception as e: TyContext.ftlog.error( 'doJinritoutiaoCallback param error, ' 'exception', e) return 'error' configs = TyContext.Configure.get_global_item_json( 'jinritoutiao_config', {}) try: config = configs[appid] public_key = _import_rsa_key_(config['pay_ras_pub_key']) except Exception, e: TyContext.ftlog.error( 'doJinritoutiaoCallback config or public_key invalid', e) return 'error' if not cls._check_ras_code(public_key, rparam): TyContext.ftlog.error( 'doJinritoutiaoCallback check rsa sign error', orderPlatformId) return 'error' if trade_status != '3' and trade_status != '0': TyContext.ftlog.error('doJinritoutiaoCallback trade_status ', trade_status) PayHelperV4.callback_error(orderPlatformId, '支付失败', rparam) return 'error' PayHelperV4.callback_ok(orderPlatformId, total_fee / 100.0, rparam) return 'success'
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: PayHelperV4.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', '') TyContext.RedisUser.execute(user_id, 'HMSET', 'user:'******'isYouyifuVipUser', '1', 'youyifuVipMsg', message, 'bugYouyifuVipAppid', appId, 'bugYouyifuVipClientid', clientId) # 这个参数用来告诉游戏服务器,这个商品是一件优易付的会员包月商品 rparam['isYouyifuMonthVip'] = '1' PayHelperV4.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: PayHelperV4.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', '')) PayHelperV4.callback_error(orderPlatformId, errinfo, rparam) return 'success'
def doLianTongWoCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('TuYouPayLianTongWoV4.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('TuYouPayLianTongWoV4.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('TuYouPayLianTongWoV4.doLianTongWoCallback->ERROR, exception', e) return TuYouPayLianTongWoV4.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='+TuYouPayLianTongWoV4V4.appkeys[str(appid)] TyContext.ftlog.debug( 'TuYouPayLianTongWoV4V4.doLianTongWoCallback ->', orderid, ordertime, cpid, appid, fid, consumeCode, payfee, payType, hRet, status, TuYouPayLianTongWoV4.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=' + TuYouPayLianTongWoV4._get_appkey(cpid, clientId) vSign = cls._calc_md5_sign(tSign) if signMsg != vSign: TyContext.ftlog.info('TuYouPayLianTongWoV4V4.doLianTongWoCallback->ERROR, sign error !! sign=', signMsg, 'vSign=', vSign) return TuYouPayLianTongWoV4.XML_ERRO # TyContext.ftlog.info('TuYouPayLianTongWoV4.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 = PayHelperV4.callback_ok(orderPlatformId, -1, notifys) if isOk: retXml = TuYouPayLianTongWoV4.XML_OK else: retXml = TuYouPayLianTongWoV4.XML_ERRO else: PayHelperV4.callback_error(orderPlatformId, str(hRet) + '|' + str(status), notifys) retXml = TuYouPayLianTongWoV4.XML_OK return retXml
def userSubscribeFailed(cls, param): PayHelperV4.callback_error( param['platformOrderId'], param['errorcode'] + ':' + param['errormsg'], param)
class TuYouPayHaiMaWanV4(PayBaseV4): @payv4_order('haimawan') def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) chargeinfo['chargeData'] = {'platformOrderId': chargeinfo['platformOrderId']} return cls.return_mo(0, chargeInfo=chargeinfo) @payv4_callback('/open/ve/pay/haimawan/callback') 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]) PayHelperV4.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"]) PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) TyContext.ftlog.debug('TuYouPayHaiMaWan->doHaiMaWanPayCallback deliver goods successed.') 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', {}) encryptKey = "" if anzhiconfig: for item in anzhiconfig: if 0 == cmp(item['appId'], appId): encryptKey = item['appsecret'] break else: TyContext.ftlog.error( 'TuYouPayAnZhi->doAnZhiCallback ERROR Cann\'t find appsecert, appId is: ', appId) else: TyContext.ftlog.error( 'TuYouPayAnZhi->doAnZhiCallback ERROR cann\'t find anzhi_config.' ) if not encryptKey: charge_key = 'sdk.charge:anzhi:%s' % appId encryptKey = TyContext.RedisPayData.execute( 'HGET', charge_key, 'appSecret') TyContext.ftlog.debug('get sdk config from redis,', encryptKey) try: # 先用base64解码,再采用3des解密 tripelDes = triple_des(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'] # 商品金额(分) redBagMoney = params['redBagMoney'] code = int(params['code']) # 订单状态 成功:1 ChargeModel.save_third_pay_order_id(orderPlatformId, params['orderId']) 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 = '安智支付失败' PayHelperV4.callback_error(orderPlatformId, errinfo, params) # 2) orderAmount+redBagMoney 应等于道具金额,金额验证异常请返回”money_error”。 chargeKey = 'sdk.charge:' + orderPlatformId chargeTotal = TyContext.RedisPayData.execute('HGET', chargeKey, 'chargeTotal') anzhiTotal = (float(orderAmount) + float(redBagMoney)) / 100 if float(chargeTotal) != anzhiTotal: return 'money_error' PayHelperV4.callback_ok(orderPlatformId, anzhiTotal, params) return 'success'
def doKuaiYongPingGuoPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug( 'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback rparam', rparam) ''' uid = rparam['uid'] subject = rparam['subject'] version = rparam['version'] ''' thirdId = rparam['orderid'] platformOrderId = rparam['dealseq'] encryptData = rparam['notify_data'] sign = rparam['sign'] verifySign = ''.join([ k + '=' + str(rparam[k]) + '&' for k in sorted(rparam.keys()) if k != 'sign' ]) verifySign = verifySign[0:-1] TyContext.ftlog.debug( 'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback verifySign', verifySign) # 公钥验签 if not _verify_with_publickey_pycrypto(verifySign, sign, _kuaiyongpingguo_pubkey_py): TyContext.ftlog.error( 'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback public verify fail' ) return 'failed' # 公钥解密:加载.so文件,python嵌入动态库 decryptData = rsa_decrypto_with_publickey(encryptData, KUAIYONGPINGGUO_PUB_KEY, 1) TyContext.ftlog.debug( 'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback decryptData', decryptData) # 将dealseq=20130219160809567&fee=0 .01&payresult=0转化为dict结构. responseStatus = {} attr = decryptData.split('&') for param in attr: params = param.split('=') responseStatus[params[0]] = params[1] TyContext.ftlog.debug( 'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback responseStatus', responseStatus) rparam['third_orderid'] = thirdId rparam['chargeType'] = 'kuaiyongpingguo' if 0 == int(responseStatus['payresult']): total_fee = int(float(responseStatus['fee'])) chargeKey = 'sdk.charge:' + platformOrderId chargeInfo = TyContext.RedisPayData.execute( 'HGET', chargeKey, 'charge') chargeInfo = json.loads(chargeInfo) # 当返回的fee和商品定价不一致时,采用商品本身的价格 TyContext.ftlog.debug( 'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback chargeInfo', chargeInfo, chargeInfo['chargeTotal'], total_fee) if chargeInfo['chargeTotal'] != total_fee: total_fee = chargeInfo['chargeTotal'] ChargeModel.save_third_pay_order_id(platformOrderId, thirdId) PayHelperV4.callback_ok(platformOrderId, total_fee, rparam) return 'success' else: errinfo = '支付失败' PayHelperV4.callback_error(platformOrderId, errinfo, rparam) return 'failed'
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'] PayHelperV4.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: PayHelperV4.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 = '爱动漫支付失败' PayHelperV4.callback_error(plantformId, errinfo, params) TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc', errinfo, 'rparams', params, 'mo', mo) return mo else: errinfo = '签名校验失败' PayHelperV4.callback_error(plantformId, errinfo, params) TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc', errinfo, 'rparams', params) return mo