def doSztyPayH5Callback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doSztyPayH5Callback', rparam) clientip = TyContext.RunHttp.get_client_ip() szty_config = TyContext.Configure.get_global_item_json('shuzitianyu_h5_config', {}) callback_ip = str(szty_config['callback_ip']) if clientip != callback_ip: TyContext.ftlog.error('doSztyPayH5Callback->ip auth failed. ' 'callback ip', clientip, 'expected', callback_ip) return 'error' try: orderPlatformId = rparam['orderid'] mobileId = rparam.get('mob', '') state = int(rparam['state']) price = int(rparam['price']) except Exception as e: TyContext.ftlog.error('doSztyPayH5Callback->param error !! rparam=', rparam, 'Exception:', e) return 'error' TyContext.ftlog.debug('doSztyPayH5Callback orderId', orderPlatformId) if state == 0: PayHelper.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelper.callback_ok(orderPlatformId, price / 100.0, rparam) return 'ok' else: PayHelper.callback_error(orderPlatformId, '支付失败', rparam) return 'error'
def doMingTianDongLiApiCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doMingTianDongLiApiCallback rparam', rparam) '''strSoureSign = md.encode(channelNum + appId + price + cpparams + subChannelNum + imei + provider + province + mobile + number''' strSoureSign = rparam['channelNum'] + rparam['appId'] + rparam['price'] + \ rparam['cpparams'] + rparam['subChannelNum'] + rparam['imei'] + \ rparam['provider'] + rparam['province'] + rparam['mobile'] + \ rparam['number'] if not cls._verify_sign(strSoureSign, rparam['sign']): TyContext.ftlog.error( 'doMingTianDongLiApiCallback->ERROR invalid strSoureSign', strSoureSign, 'rparam[sign]', rparam['sign']) return 'error' orderPlatformId = rparam['cpparams'] total_fee = float(rparam['price']) / 100 if rparam['mobile']: mobileId = rparam['mobile'] PayHelper.set_order_mobile(orderPlatformId, mobileId) PayHelper.callback_ok(orderPlatformId, total_fee, rparam) return 0
def doLinkYunApiCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doLinkYunApiCallback rparam', rparam) try: shortOrderPlatformId = rparam['cpparam'][2:] mobile = rparam['mobile'] orderPlatformId = ShortOrderIdMap.get_long_order_id( shortOrderPlatformId) sign = rparam['sign'] except: TyContext.ftlog.error( 'doLinkYunApiCallback->ERROR, param error !! rparam=', rparam) return 'error' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error( 'TuYouPayLinkYunApi.doLinkYunApiCallback verify error !!') return 'error' rparam['chargeType'] = 'linkyun.api' rparam['third_orderid'] = rparam['orderId'] total_fee = float(rparam['price']) / 100 PayHelper.set_order_mobile(orderPlatformId, mobile) isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return '0||' else: return 'error'
def doLangtianCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug('doLangtianCallback start, rparam=', rparam) try: msg = rparam['msg'] mobileId = rparam.get('mobile', '') msgList = msg.split('#') orderPlatformId = msgList[-1] sign = rparam['mac'] except: TyContext.ftlog.error( 'doLangtianCallback->ERROR, param error !! rparam=', rparam) return 'error' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error( 'TuyouPayLangtian.doLangtianCallback sign verify error !!') return 'error' total_fee = float(rparam['fee']) PayHelper.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'success' else: return 'error'
def doSztyPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() clientip = TyContext.RunHttp.get_client_ip() sztyconfig = TyContext.Configure.get_global_item_json( 'shuzitianyu_config', {}) callback_ip = str(sztyconfig['callback_ip']) if clientip != callback_ip: TyContext.ftlog.error('doSztyPayCallback->ERROR, ip error !! ip =', clientip) return 'error' try: shortorderPlatformId = rparam['linkid'][7:] mobileId = rparam.get('mobile', '') status = int(rparam['status']) except: TyContext.ftlog.error( 'doSztyPayCallback->ERROR, param error !! rparam=', rparam) return 'error' orderPlatformId = ShortOrderIdMap.get_long_order_id( shortorderPlatformId) rparam['chargeType'] = 'shuzitianyu' if status == 1: PayHelper.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelper.callback_ok(orderPlatformId, -1, rparam) # Youyifu will resend the callback if the response is NOT 'success' return 'success' else: PayHelper.callback_error(orderPlatformId, '支付失败', rparam) return 'success'
def doMsgDxCallback(self, rpath): MchNo = TyContext.RunHttp.getRequestParam('MchNo', '') Phone = TyContext.RunHttp.getRequestParam('Phone', '') Fee = TyContext.RunHttp.getRequestParam('Fee', '') # 单位:元 OrderId = TyContext.RunHttp.getRequestParam('OrderId', '') MobileType = TyContext.RunHttp.getRequestParam('MobileType', '') Sign = TyContext.RunHttp.getRequestParam('Sign', '') if MchNo == '' or Phone == '' or Fee == '' or OrderId == '' or Sign == '': return '401~参数错误~' eft_skey = '' try: eft_appid = OrderId[0:2] eft_skey = TuYouPayEftUnion.appkeys.get(eft_appid, None) except: TyContext.ftlog.exception() tSign = MchNo + Phone + Fee + OrderId + eft_skey m = md5() m.update(tSign) vSign = m.hexdigest() if Sign != vSign: TyContext.ftlog.info('doMsgDxCallback->ERROR, sign error !! sign=', Sign, 'vSign=', vSign, 'eft_skey=', eft_skey) return '555~数字签名错误~' # 解密得到原始游戏订单号 orderPlatformId = '' try: orderPlatformId = OrderId[2:] Fee = float(Fee) except: TyContext.ftlog.exception() TyContext.ftlog.info( 'TuYouPayEftUnion.doMsgDxCallback orderPlatformId=', orderPlatformId) notifys = { 'MchNo': MchNo, 'Phone': Phone, 'OrderId': OrderId, 'third_orderid': MchNo } if MobileType == 'LT': notifys['chargeType'] = 'EFTChinaUnion.msg' elif MobileType == 'DX': notifys['chargeType'] = 'EFTChinaTelecom.msg' PayHelper.set_order_mobile(orderPlatformId, Phone) isOk = PayHelper.callback_ok(orderPlatformId, Fee, notifys) if isOk: return '000~成功~' else: return '111~失败~'
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 doLinkYunUnionCallback(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionCallback->args=', rparam) try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderPlatformId = str(rparam['orderid'])[2:] msgcontent = rparam['msgcontent'] sign = rparam['sign'] # 效验sign isOk = PayHelper.verify_md5(sign, mobileId, '#', serviceid, '#', msgcontent, '#', cls.sign_skey) if isOk: # 对凌云充值的订单,把手机号补充到订单信息里 orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) PayHelper.set_order_mobile(orderPlatformId, mobileId) operator = PayHelper.get_mobile_operator(mobileId) if operator == 'chinaunicom': rparam['chargeType'] = 'linkyununion' elif operator == 'chinatelecom': rparam['chargeType'] = 'linkyundx' else: TyContext.ftlog.error( cls.__name__, 'doLinkYunUnionCallback->ERROR get_mobile_operator for', mobileId) if msgcontent == '0:0': PayHelper.callback_ok(orderPlatformId, -1, rparam) return '0' else: PayHelper.callback_error(orderPlatformId, '', rparam) except: TyContext.ftlog.exception() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionCallback->ERROR, rparam=', rparam) return '0'
def doLinkYunCallback(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info('doLinkYunCallback->args=', rparam) try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] price = rparam['price'] goodsInf = rparam['goodsInf'] sign = rparam['sign'] isOk = PayHelper.verify_md5(sign, orderId, mobileId, price, goodsInf, cls.sign_skey) # 效验sign if not isOk: TyContext.ftlog.info('doLinkYunCallback->ERROR, sign error !!') return '1||sign error' platformOrderId = str(goodsInf)[2:] if not platformOrderId: TyContext.ftlog.info('doLinkYunCallback->ERROR, platformOrderId error !!') return '1||orderPlatformId error' # 对凌云充值的订单,把手机号补充到订单信息里 platformOrderId = ShortOrderIdMap.get_long_order_id(platformOrderId) TyContext.RunMode.get_server_link(platformOrderId) PayHelper.set_order_mobile(platformOrderId, mobileId) rparam['chargeType'] = 'linkyun' rparam['third_orderid'] = orderId total_fee = float(price) / 100 isOk = PayHelper.callback_ok(platformOrderId, total_fee, rparam) if isOk: return '0||' else: return '1||charge fail' except: TyContext.ftlog.exception() TyContext.ftlog.info('doLinkYunCallback->ERROR, param error !! rparam=', rparam) return '1||charge exception'
def doZhuowangCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug('doZhuowangCallback start, rparam=', rparam) try: sts = rparam['sts'] shortorderid = rparam['cmd'].split(',')[-1] except: TyContext.ftlog.error( 'doZhuowangCallback->ERROR, param error !! rparam=', rparam) return 'error' orderPlatformId = ShortOrderIdMap.get_long_order_id(shortorderid) mobileId = rparam.get('usernumber', 'na') PayHelper.set_order_mobile(orderPlatformId, mobileId) rparam['third_orderid'] = rparam.get('tnsid', 'na') rparam['sub_paytype'] = rparam.get('feetype', 'na') if int(sts) != 0: errinfo = 'sts(%s) not 0' % sts PayHelper.callback_error(orderPlatformId, errinfo, rparam) else: total_fee = float(rparam['feecode']) / 100 isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) return '0' # 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: 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 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