def doMiDaShiPayCallback(cls, rpath): # 由于设计到路径和请求方法,验签放到httpgateway里做了,这里只负责发货 rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug('TuYouPayMiDaShi->doMiDaShiPayCallback rparam: ', rparam) if 'payitem' in rparam: payitem = rparam['payitem'] appmeta = payitem.split('*')[0] platformOrderId = appmeta else: return cls.getReturnContent(4, 'payitem') if 'appmeta' in rparam: appmeta = rparam['appmeta'] if '*' in appmeta: appmeta = appmeta.split('*')[1] thirdPayType = appmeta else: return cls.getReturnContent(4, 'appmeta') if 'amt' in rparam: total_fee = float(rparam['amt']) else: return cls.getReturnContent(4, 'amt') rparam['sub_paytype'] = thirdPayType PayHelperV4.callback_ok(platformOrderId, -1, rparam) return cls.getReturnContent(0)
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 doJinliCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doJinliCallback', rparam) try: orderPlatformId = rparam['out_order_no'] total_fee = rparam['deal_price'] except Exception as e: TyContext.ftlog.error('doJinliCallback ,param err,exception ', e) return 'exception in params' if not cls._check_sign(rparam): TyContext.ftlog.error('doJinliCallback ,check sign error!') return 'check sign error!' PayHelperV4.callback_ok(orderPlatformId, float(total_fee), rparam) return 'success'
def incr_user_diamond(orderId, amount): chargeKey = 'sdk.charge:' + platformOrderId chargeInfo = TyContext.RedisPayData.execute( 'HMGET', chargeKey, 'charge') chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) userId = chargeInfo['uid'] appId = chargeInfo.get('appId', "") UniversalUser().increase_user_charge_data( chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'], amount, chargeInfo.get('chargeType', 'na')) userKey = 'user:'******'charge.callback') # 增加用户的充值次数 PayHelperV4.incr_paycount(userId) # 增加用户总体支付的数量 TyContext.RedisUser.execute(userId, 'HINCRBYFLOAT', userKey, 'chargeTotal', amount) # 增加用户的钻石购买的数据 # RiskControlV4(userId).record_diamond(diamondId) if not is_orderId_valid(orderId, rparams, amount): return False incr_user_diamond(orderId, amount) PayHelperV4.notify_game_server_on_diamond_change({ 'appId': chargeInfo['appId'], 'clientId': chargeInfo['clientId'], 'userId': chargeInfo['uid'], 'buttonId': chargeInfo['diamondId'], 'diamonds': chargeInfo['chargedDiamonds'], 'rmbs': amount }) return True
def doCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('TuYouNow callback with: %s' % rparam) payNowAppId = rparam['appId'] borui_paykeys = TyContext.Configure.get_global_item_json('borui_paykeys', {}) try: payNowInfo = borui_paykeys[payNowAppId] except KeyError: payNowInfo = borui_paykeys appSecret = payNowInfo['appSecret'] ## check signature keys = filter(lambda k: k not in ['signType', 'signature', ], rparam.keys()) keys.sort() text = '&'.join(['%s=%s' % (k, rparam[k]) for k in keys]) text = urllib.unquote(text) # 转为utf-8编码 s1 = hashlib.md5(appSecret).hexdigest() s2 = hashlib.md5('%s&%s' % (text, s1)).hexdigest() if rparam['signature'] != s2: TyContext.ftlog.error('TuYouNow->ERROR, sign error !! rparam=', rparam) return 'N' # do charge tradeStatus = rparam['tradeStatus'] orderPlatformId = rparam['mhtOrderNo'] if tradeStatus == 'A001': if PayHelperV4.callback_ok(orderPlatformId, -1, rparam): return 'Y' return 'N'
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 doCallback(self, rpath): rparams = TyContext.RunHttp.convertArgsToDict() order_id = rparams['dealseq'] TyContext.ftlog.debug('TuYouPayJusdkV4->doCallback,rparams=', rparams) if not self.verify_sign(rparams): return 'failed' notify_data = rparams['notify_data'] data = rsa_decrypto_with_publickey(notify_data, JUSDK_PUB_KEY, 1) TyContext.ftlog.debug('TuYouPayJusdkV4 -> de rsa notify data = ', data) notify_dict = dict((l.split('=') for l in data.split('&'))) if notify_dict.get('dealseq') != rparams.get('dealseq'): TyContext.ftlog.debug('TuYouPayJusdkV4 -> dealseq Different') return 'failed' if int(notify_dict.get('payresult')) != 0: TyContext.ftlog.debug('TuYouPayJusdkV4 -> payresult Different') return 'failed' is_ok = PayHelperV4.callback_ok(order_id, -1, rparams) if is_ok: return 'success' else: TyContext.ftlog.debug('TuYouPayJusdkV4 -> not ok') return 'failed'
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 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 doJiuxiuCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doJiuxiuCallback start rparam=', rparam) try: orderPlatformId = rparam['orderPlatformId'] total_fee = rparam['amount'] sign = rparam['sign'] thirdorderid = rparam['orderId'] except: TyContext.ftlog.error('doJiuxiuCallback->ERROR, param error !! rparam=', rparam) return 'fail' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error('TuYouPayJiuxiu.doJiuxiuCallback verify error !!') return 'fail' rparam['chargeType'] = '9xiu' rparam['third_orderid'] = thirdorderid total_fee = float(total_fee) isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'success' else: return 'fail'
def __check_callback(cls, rparam, appKey): signQuery = rparam['signature'] del rparam['signature'] sk = rparam.keys() sk.sort() queryStr = "" for k in sk: queryStr = queryStr + str(k) + '=' + str(rparam[k]) + '&' signData = queryStr[:-1] TyContext.ftlog.info('doXiaomiCallback->queryStr=', queryStr, 'signData=', signData) a = hmac.new(appKey, signData, sha1) sign = a.digest().encode('hex').upper() if signQuery.upper() != sign: TyContext.ftlog.info( 'doXiaomiCallback->ERROR, sign error !! signQuery=', signQuery, 'sign=', sign) return '{"errcode":1525}' orderPlatformId = rparam['cpOrderId'] total_fee = float(rparam['payFee']) / 100 ChargeModel.save_third_pay_order_id(orderPlatformId, rparam.get('orderId')) isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return '{"errcode":200}' else: return '{"errcode":1506}'
def charge_data(self, mi): chargeInfo = self.get_charge_info(mi) chargeInfo['chargeData'] = { 'platformOrderId': chargeInfo['platformOrderId'], 'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/bdgame/callback' } return self.return_mo(0, chargeInfo=chargeInfo)
def charge_data_direct(self, mi): chargeInfo = self.get_charge_info(mi) chargeInfo['chargeData'] = { 'platformOrderId': chargeInfo['platformOrderId'], 'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/ysdk/callback', 'paymentUrl': self.getPaymentUrl(mi, chargeInfo) } return self.return_mo(0, chargeInfo=chargeInfo)
def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) notifyurl = PayHelperV4.getSdkDomain() + '/v1/pay/uc/callback' TyContext.ftlog.debug('TuYouPayUc charge_data callback url=', notifyurl) paydata = cls.generate_sign(mi, chargeinfo) chargeinfo['chargeData'] = {'notifyUrl': notifyurl, 'payData': paydata} return cls.return_mo(0, chargeInfo=chargeinfo)
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'
def notifyGameServerDelivery(self, rparam): TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->notifyGameServerDelivery User[%s, mobile:%s, orderid:%s] ' 'subscribe monthly vip!' % (rparam['userId'], rparam['mobile'], rparam['platformOrderId'])) TyContext.RedisUser.execute(rparam['userId'], 'HMSET', 'user:'******'userId'], 'isYouyifuVipUser', '1', 'youyifuVipMsg', rparam['message']) # 这个参数用来告诉游戏服务器,这个商品是一件会员包月商品 rparam['isYouyifuMonthVip'] = '1' PayHelperV4.callback_ok(rparam['platformOrderId'], rparam['total_fee'], rparam) self.changeUserInfoStatus('vipuser:'******'mobile'], 'success') TyContext.ftlog.info( 'TuYouPayHuiYuanBaoYue->notifyGameServerDelivery %s has subscribed Monthly VIP.' % self.getLogUserInfo(rparam))
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 _pay_request(cls, chargeInfo, mi, mo, bankIndex): rparam = cls._get_pay_requset_params(chargeInfo, mi, mo, bankIndex) if not rparam: return PayConst.CHARGE_STATE_REQUEST_RETRY purl = cls.pay_request_url + PayHelperV4.createLinkString4Get(rparam) TyContext.ftlog.info(cls.__name__, '_pay_request->return bankIndex=', bankIndex, 'purl=', purl) response, purl = TyContext.WebPage.webget(purl) TyContext.ftlog.info(cls.__name__, '_pay_request->return bankIndex=', bankIndex, 'purl=', purl, 'response=', response) if response == None: response = '' else: response = response.strip() mo.setResult('payData', '') if response[0:7] == 'success': return PayConst.CHARGE_STATE_REQUEST elif response[0] == '{': try: jsondatas = json.loads(response) if jsondatas['code'] == 'success': mo.setResult('payData', jsondatas['paydata']) else: if 'info' in jsondatas: errInfo = jsondatas['info'] mo.setResult('info', jsondatas['info']) else: errInfo = '360充值请求错误' raise PayErrorV4(1, errInfo) mo.setError(1, errInfo) return PayConst.CHARGE_STATE_REQUEST except: pass i = response.find('<h2>[') if i > 0: j = response.find('</h2>', i) errInfo = response[i + 4: j] errInfo = errInfo.decode('gb2312') mo.setError(1, errInfo) return PayConst.CHARGE_STATE_REQUEST_IGNORE else: try: errInfo = response.decode('gb2312') except: errInfo = response if errInfo.find('failed:') == 0: errInfo = errInfo[7:] raise PayErrorV4(1, errInfo) mo.setError(1, errInfo) return PayConst.CHARGE_STATE_ERROR_REQUEST
def doCallback(cls, rpath): rparams = TyContext.RunHttp.convertArgsToDict() platformOrderId = rparams['extend'] TyContext.ftlog.debug('TuYouPayLizi->doCallback, rparams=', rparams) if not cls.verify_sign(rparams): return 'failure' isOk = PayHelperV4.callback_ok(platformOrderId, -1, rparams) if isOk: return 'success' else: return 'failure'
def doPPZhuShouPayCallback(cls, rpath): postData = TyContext.RunHttp.get_body_content() jsondata = json.loads(postData) TyContext.ftlog.info('TuYouPayPPZhuShou->jsondata', jsondata) param = eval(''.join(str(jsondata).replace('&', '').split())) TyContext.ftlog.debug('TuYouPayPPZhuShou->param after eval()', param) # 去除字符串中的回车和换行符 rparams = param['data'] orderPlatformId = rparams['orderId'] config = GameItemConfigure.get_game_channel_configure_by_orderId( orderPlatformId, 'ppzhushou') if config: md5key = config.get('PPZHUSHOU_md5key', "") else: ppzhushouconfig = TyContext.Configure.get_global_item_json( 'ppzhushou_config', {}) md5key = ppzhushouconfig['md5key'] strSign = cls._cal_sign(rparams, md5key) TyContext.ftlog.debug('TuYouPayPPZhuShou->strSign', strSign, 'sign', param['sign']) total_fee = float(rparams['amount']) rparams['third_orderid'] = rparams['tradeId'] rparams['chargeType'] = 'ppzhushou' if strSign == param['sign']: if 'S' == rparams['orderStatus']: PayHelperV4.callback_ok(orderPlatformId, total_fee, rparams) return 'SUCCESS' else: errorInfo = '错误订单,等待正确订单......' TyContext.ftlog.info('TuYouPayPPZhuShou->errorInfo', errorInfo, 'failedDesc', rparams['failedDesc']) return 'SUCCESS' else: errorInfo = '签名校验错误' TyContext.ftlog.error('TuYouPayPPZhuShou->errorInfo', errorInfo) return 'FAILURE'
def doMomoCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() momo_paykeys = TyContext.Configure.get_global_item_json( 'momo_paykeys', {}) TyContext.ftlog.debug('doMomoCallback->rparam=', rparam) try: orderPlatformId = rparam['app_trade_no'] trade_no = rparam['trade_no'] appid = rparam['appid'] postparams = {} postparams['appid'] = appid postparams['sign'] = rparam['sign'] postparams['trade_no'] = trade_no postparams['app_secret'] = momo_paykeys[str(appid)] response, _ = TyContext.WebPage.webget(cls.checkorder_url, postdata_=postparams) response = json.loads(response) if int(response['ec']) != 0: TyContext.ftlog.error( 'doMomoCallback->ERROR, check momo order fail, response=', response) return 'fail' except: TyContext.ftlog.exception() TyContext.ftlog.error('doMomoCallback->ERROR, rparam=', rparam) return 'fail' if int(rparam['currency_type']) == 0: total_fee = float(rparam['total_fee']) else: total_fee = float(rparam['total_fee']) / 10 rparam['third_orderid'] = trade_no rparam['chargeType'] = 'momo' # channel_type string 支付渠道 0-苹果 1-支付宝 2-短信 3-陌陌币 4-网页版 rparam['sub_paytype'] = rparam['channel_type'] try: chargeKey = 'sdk.charge:' + orderPlatformId chargeInfo = TyContext.RedisPayData.execute( 'HGET', chargeKey, 'charge') if chargeInfo == None: chargeInfo = {} else: chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) chargeInfo['sub_paytype'] = rparam['channel_type'] TyContext.RedisPayData.execute('HSET', chargeKey, 'charge', json.dumps(chargeInfo)) except: TyContext.ftlog.error() ChargeModel.save_third_pay_order_id(orderPlatformId, trade_no) isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) return 'success'
def doVivoCallback(cls, rpath): rparams = TyContext.RunHttp.convertArgsToDict() appId = rparams.get('verdorCode') platformOrderId = rparams.get('orderId') config = GameItemConfigure.get_game_channel_configure_by_orderId( platformOrderId, '16wifi') md5key = config.get('16wifi_key') signStr = '&'.join(k + '=' + rparams[k] for k in sorted(rparams.keys()) if rparams[k] and k != 'sign') signStr += '&key=%s' % md5key m = md5(signStr) if m.hexdigest().upper() != rparams['sign']: return {'ReturnCode': 1} total_fee = rparams.get('cashAmount') ChargeModel.save_third_pay_order_id(platformOrderId, rparams.get('payCode')) PayHelperV4.callback_ok(platformOrderId, total_fee, rparams) return {'ReturnCode': 200}
def do168xCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() signKey = ['game_key', 'game_orderno', 'nonce', 'subject', 'timestamp', 'total_fee'] platformOrderId = rparam.get('game_orderno') signStr = '&'.join(k + '=' + str(rparam.get(k)) for k in signKey) config = GameItemConfigure.get_game_channel_configure_by_orderId(platformOrderId) if not config: appId = '9999' sdk = '168x' mainChannel = '168x' packageName = 'com.sdk.168x.default' config = GameItemConfigure(appId).get_game_channel_configure_by_package(sdk, packageName, mainChannel) secret = config.get('game_sceret') signStr = signStr + '&' + secret from hashlib import md5 m = md5(signStr) if m.hexdigest().lower() != rparam.get('signature'): return 1 PayHelperV4.callback_ok(platformOrderId, rparam.get('total_fee'), rparam) return 0
def doTongBuTuiPayCallback(cls, rpath): success = json.dumps({'status': 'success'}) fail = json.dumps({'status': 'fail'}) params = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug('TuYouPayTongBuTui->doPayTongBuTuiCallback Request Params: ', params) rparam = OrderedDict() try: rparam['source'] = params['source'] rparam['trade_no'] = params['trade_no'] rparam['amount'] = params['amount'] rparam['partner'] = params['partner'] rparam['paydes'] = params['paydes'] rparam['debug'] = params['debug'] rparam['tborder'] = params['tborder'] rparam['sign'] = params['sign'] except Exception as e: TyContext.ftlog.error('TuYouPayTongBuTui->doPayTongBuTuiCallback Get Params ERROR. ', e) return fail # appid = 150918, appkey = rBODan#VKXuF8He2B4Olyn@KhXu8RG2q # 获取key,根据partner keyvalue = TyContext.Configure.get_global_item_json('tongbutui_config', {}) # 获取同步推的key for value in keyvalue: if 0 == cmp(value['appid'], params['partner']): appkey = value['appkey'] break else: TyContext.ftlog.error('TuYouPayHaiMaWan->doHaiMaWanPayCallback get appkey ERROR') return 'fail' rparam['key'] = appkey sign = cls.generate_verifysign(rparam) if 0 != cmp(sign, rparam['sign']): TyContext.ftlog.error('TuYouPayHaiMaWan->doHaiMaWanPayCallback verify sign ERROR.' 'sign: [%s], verify_sign: [%s]' % (rparam['sign'], sign)) return fail # 通知游戏服发货 rparam['third_orderid'] = rparam['tborder'] ChargeModel.save_third_pay_order_id(rparam['trade_no'], rparam['tborder']) PayHelperV4.callback_ok(rparam['trade_no'], float(rparam['amount']) / 100, rparam) return success
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 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 _get_pay_requset_params(cls, chargeInfo, mi, mo, bankIndex): cls.reqSeq += 1 rparam = {} # 如果同一个事务,发送第一次请求,失败,360认为此事务已被占用,必须使用不同的事务ID rparam['mer_trade_code'] = chargeInfo['platformOrderId'] + '-' + str(cls.reqSeq) rparam['rec_amount'] = float(chargeInfo['chargeTotal']) rparam['product_name'] = chargeInfo['buttonName'] rparam['mer_code'] = cls.merchant_code rparam['trans_service'] = cls.trans_service rparam['input_cha'] = cls.input_cha rparam['sign_type'] = cls.sign_type rparam['notify_url'] = PayHelperV4.getSdkDomain() + cls.notify_url rparam['return_url'] = cls.no_notify_url rparam['bank_code'] = cls.bank_code[bankIndex] if bankIndex in (1, 2, 3): if not PayHelperV4.checkCardParam(mi, mo): return None rparam['card_amount'] = mi.getParamInt('card_amount') rparam['card_number'] = mi.getParamStr('card_number') rparam['card_pwd'] = mi.getParamStr('card_pwd') rparam['sign'] = cls.__build_my_sign__(rparam) return rparam