def doCancelOrder(cls, path): ''' 用于客户端支付失败后取消订单 reason 0: user cancel the order for client sdk (e.g. ydmm/ltw) failed 1: user cancel the order in the first place 2: user cancel the order on sms send fail 3: user cancel the order on sms send timeout ''' mi = TyContext.RunHttp.convertToMsgPack() platformOrderId = mi.getParamStr('platformOrderId', 'na') productOrderId = mi.getParamStr('productOrderId', 'na') shortId = 'na' if ShortOrderIdMap.is_short_order_id_format(platformOrderId): shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id( platformOrderId) appId = mi.getParamInt('appId', 'na') userId = mi.getParamInt('userId', 'na') clientId = mi.getParamStr('clientId', 'na') paytype = mi.getParamStr('payType', 'na') errinfo = mi.getParamStr('errInfo', 'na') reason = mi.getParamStr('reason', 'na') Order.log(platformOrderId, Order.CLIENT_CANCELED, userId, appId, clientId, shortId=shortId, prodOrderId=productOrderId, paytype=paytype, subevent=reason, info=errinfo if errinfo else 'na') mo = TyContext.Cls_MsgPack() mo.setCmd('cancelorder') mo = mo.packJson() return mo
def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) packageName = chargeinfo['packageName'] appId = chargeinfo['appId'] buttonId = chargeinfo['diamondId'] clientId = chargeinfo['clientId'] # 先取多appId对应的支付配置 payData = None duokuAppId = mi.getParamStr('dksdk_appid', "") config = GameItemConfigure(appId).get_game_channel_configure_by_primarykey('duoku', 'dksdk_appid', duokuAppId, chargeinfo['mainChannel']) if config: prodconfig = config.get('products', {}) diamondList = filter(lambda x: buttonId in x.values(), prodconfig) payData = diamondList[0] if diamondList else {} if payData: orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(orderPlatformId) payData['orderPlatformId'] = shortOrderPlatformId chargeinfo['chargeData'] = payData return cls.return_mo(0, chargeInfo=chargeinfo) prodconfig = TyContext.Configure.get_global_item_json('duoku_prodids') if duokuAppId: config = prodconfig.get(duokuAppId, None) if config: payData = config.get(buttonId, None) if not payData: if packageName: try: appconfig = prodconfig[packageName] payData = appconfig[buttonId] except: TyContext.ftlog.exception() raise PayErrorV4(1, '【百度】找不到这个商品[%s]配置!' % buttonId) else: try: appconfig = prodconfig[str(appId)] payData = appconfig[buttonId] except Exception as e: TyContext.ftlog.exception() raise PayErrorV4(1, '【百度】找不到这个商品[%s]配置!' % buttonId) orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(orderPlatformId) payData['orderPlatformId'] = shortOrderPlatformId chargeinfo['chargeData'] = payData return cls.return_mo(0, chargeInfo=chargeinfo)
def doIDOCallback(cls, rpath): TyContext.ftlog.info('doIDOCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: orderidconfig = TyContext.Configure.get_global_item_json( 'IDO_orderid', {}) start = orderidconfig.get(str(rparam['price']), None)[0] end = orderidconfig.get(str(rparam['price']), None)[1] sortOrderPlatformId = rparam['order_code'][start:end] orderPlatformId = ShortOrderIdMap.get_long_order_id( sortOrderPlatformId) sign = rparam['sign'] except: TyContext.ftlog.error( 'doIDOCallback->ERROR, param error !! rparam=', rparam) return 'error' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error( 'TuyouPayIDO.doIDOCallbacksign verify error !!') return 'error' from tysdk.entity.pay.pay import TuyouPay trade_status = 'TRADE_FINISHED' isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, -1, trade_status, rparam) if isOk: return 'successful' else: return 'error'
def doBuyStraight(self, userId, params, mo): appId = params['appId'] prodId = params['prodId'] prodconfig = TyContext.Configure.get_global_item_json( 'IDO_prodids', {}) smscodeconfig = TyContext.Configure.get_global_item_json( 'IDO_smscodes', {}) data = prodconfig[str(appId)].get(prodId, None) if data: amount = data['price'] else: raise Exception('can not find IDO product define of prodId=' + prodId) orderPlatformId = params['orderPlatformId'] sortOrderPlatformId = ShortOrderIdMap.get_short_order_id( orderPlatformId) smsPort = '1065889920' smscode = smscodeconfig.get(str(amount), None) if smscode: smsMsg = smscode.format(orderId=sortOrderPlatformId + '00') else: raise Exception('can not find IDO smscode in the price=' + amount) # type是短信支付的方式,1代表的是发一条短信支付 smsPayinfo = {'type': '1', 'smsMsg': smsMsg, 'smsPort': smsPort} mo.setResult('smsPayinfo', smsPayinfo)
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 doLinkYunConfirm(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info('doLinkYunConfirm->args=', rparam) try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] price = rparam['price'] goodsInf = rparam['goodsInf'] sign = rparam['sign'] # 效验sign isOk = PayHelper.verify_md5(sign, orderId, mobileId, price, goodsInf, cls.sign_skey) if isOk: orderPlatformId = str(goodsInf)[2:] orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) order_state = TyContext.RedisPayData.execute('HGET', 'sdk.charge:' + str(orderPlatformId), 'state') if order_state != None and int(order_state) >= PayConst.CHARGE_STATE_BEGIN and int( order_state) < PayConst.CHARGE_STATE_DONE: return 'Y' return 'N' else: TyContext.ftlog.error('doLinkYunConfirm->ERROR, sign error !! ') return 'N' except: TyContext.ftlog.exception() TyContext.ftlog.error('doLinkYunConfirm->ERROR, exception error !! ', rparam) return 'N'
def doLinkYunUnionConfirm(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionConfirm->args=', rparam) try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderId = rparam['orderid'] orderPlatformId = str(rparam['orderid'])[2:] sign = rparam['sign'] # 效验sign=mobile#serviceid#orderid#密钥 isOk = PayHelper.verify_md5(sign, mobileId, '#', serviceid, '#', orderId, '#', cls.sign_skey) if isOk: orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) order_state = TyContext.RedisPayData.execute( 'HGET', 'sdk.charge:' + str(orderPlatformId), 'state') if order_state is not None and int( order_state) >= PayConst.CHARGE_STATE_BEGIN and int( order_state) < PayConst.CHARGE_STATE_DONE: return '0' except: TyContext.ftlog.exception() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionConfirm->ERROR, rparam=', rparam) return '1'
def charge_data(cls, chargeinfo): mdo_config = TyContext.Configure.get_global_item_json( 'zwmdo_configs', {}) price = int(float(chargeinfo['chargeTotal'])) if not str(price) in mdo_config['smscodes']: TyContext.ftlog.error( 'can not find zhuowang smscode in the price=', price) return orderPlatformId = chargeinfo['platformOrderId'] spnumber = mdo_config['spnumber'] smscode = mdo_config['smscodes'][str(price)] shortorderid = ShortOrderIdMap.get_short_order_id(orderPlatformId) sms_msg = smscode.format(orderId=shortorderid) # type是短信支付的方式,1代表的是发一条短信支付 userId = chargeinfo['uid'] if not ClientRevision(userId).support_type0_smspayinfo: payinfo = SmsPayInfo.getSmsPayInfo(1, sms_msg, spnumber) else: no_hint = chargeinfo.get('nohint', None) messages = [] messages.append((spnumber, sms_msg, 1000)) payinfo = SmsPayInfo.build_sms_payinfo(messages, nohint=no_hint) SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'], chargeinfo['diamondPrice']) chargeinfo['chargeData'] = {'smsPayinfo': payinfo}
def charge_data(cls, chargeinfo): userId = chargeinfo['uid'] price = int(float(chargeinfo['chargeTotal'])) platformOrderId = chargeinfo['platformOrderId'] shortOrderId = ShortOrderIdMap.get_short_order_id(platformOrderId) response, spnumber = cls.__create_order(price, shortOrderId) if len(response) == 1: TyContext.ftlog.error('TuYouPaySzty create_order failed for user', userId, 'orderid', platformOrderId, 'response', response) return sms_msg = response if not ClientRevision(userId).support_type0_smspayinfo: payinfo = SmsPayInfo.getSmsPayInfo(1, sms_msg, spnumber) chargeinfo['chargeData'] = {'smsPayinfo': payinfo} return messages = [(spnumber, sms_msg, 1000)] no_hint = chargeinfo.get('nohint', None) payinfo = SmsPayInfo.build_sms_payinfo(messages, nohint=no_hint) SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'], chargeinfo['diamondPrice']) chargeinfo['chargeData'] = {'smsPayinfo': payinfo}
def doBuyStraight(self, userId, params, mo): prodId = params['prodId'] appId = params['appId'] payCode = '' orderPhone = '10658077696611' if prodId == 'VOICE100': payCode = 'YX,258736,1,ff3f,1800529,611001' if prodId == 'MOONKEY': payCode = 'YX,258736,2,02fb,1800529,611001' if prodId == 'CARDMATCH10': payCode = 'YX,258736,3,0b75,1800529,611001' if prodId == 'T80K': payCode = 'YX,258736,4,3e00,1800529,611001' if prodId == 'T100K': payCode = 'YX,258736,5,9f1f,1800529,611001' if prodId == 'RAFFLE_NEW': payCode = 'YX,258736,6,a822,1800529,611001' if prodId == 'ZHUANYUN_MEZZO': payCode = 'YX,258736,7,c9ec,1800529,611001' orderPlatformId = ShortOrderIdMap.get_short_order_id( params['orderPlatformId']) payCode = payCode + ',' + orderPlatformId payData = {'msgOrderCode': payCode, 'orderPhone': orderPhone} params['payData'] = payData mo.setResult('payData', payData) mo.setResult('orderPlatformId', orderPlatformId) pass
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 charge_data(cls, chargeinfo): appId = chargeinfo['appId'] prodId = chargeinfo.get("prodId", chargeinfo['diamondId']) prodconfig = TyContext.Configure.get_global_item_json( 'IDO_prodids', {}) smscodeconfig = TyContext.Configure.get_global_item_json( 'IDO_smscodes', {}) data = prodconfig[str(appId)].get(prodId, None) if data: amount = data['price'] else: raise Exception('can not find IDO product define of prodId=' + prodId) orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id( orderPlatformId) smsPort = '1065889920' smscode = smscodeconfig.get(str(amount), None) if smscode: smsMsg = smscode.format(orderId=shortOrderPlatformId + '00') else: raise Exception('can not find IDO smscode in the price=' + amount) # type是短信支付的方式,1代表的是发一条短信支付 smsPayinfo = {'type': '1', 'smsMsg': smsMsg, 'smsPort': smsPort} chargeinfo['chargeData'] = {'smsPayinfo': smsPayinfo}
def doIDOCallback(cls, rpath): TyContext.ftlog.info('doIDOCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: orderidconfig = TyContext.Configure.get_global_item_json( 'IDO_orderid', {}) start = orderidconfig.get(str(rparam['price']), None)[0] end = orderidconfig.get(str(rparam['price']), None)[1] shortOrderPlatformId = rparam['order_code'][start:end] orderPlatformId = ShortOrderIdMap.get_long_order_id( shortOrderPlatformId) sign = rparam['sign'] except: TyContext.ftlog.error( 'doIDOCallback->ERROR, param error !! rparam=', rparam) return 'error' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error( 'TuyouPayIDO.doIDOCallbacksign verify error !!') return 'error' rparam['chargeType'] = 'linkyun.ido' rparam['third_orderid'] = rparam['orderID'] total_fee = float(rparam['price']) / 100 isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'successful' else: return 'error'
def charge_data(cls, chargeinfo): appId = chargeinfo['appId'] buttonId = chargeinfo['buttonId'] clientId = chargeinfo['clientId'] packageName = chargeinfo.get('packageName') prodconfig = TyContext.Configure.get_global_item_json('duoku_prodids') if packageName: try: appconfig = prodconfig[packageName] payData = appconfig[buttonId] except: TyContext.ftlog.exception() raise Exception( 'can not find duoku product define: buttonId=' + buttonId + ' clientId=' + clientId) else: try: appconfig = prodconfig[str(appId)] payData = appconfig[buttonId] except Exception as e: TyContext.ftlog.exception() raise Exception( 'can not find duoku product define: buttonId=' + buttonId + ' clientId=' + clientId) orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id( orderPlatformId) payData['orderPlatformId'] = shortOrderPlatformId chargeinfo['chargeData'] = payData
def getUserInfo(cls, smsContent, mobile, status, OrderId, phoneType='na'): # 只有当用户订阅的时候,smsContent中才有可能会有订单号,是在_或者ty后面 redisKey = 'vipuser:'******'TuYouPayHuiYuanBaoYue->getUserInfo status is:[%s] redisKey is:[%s].' % (status, redisKey)) # 联通和电信用户订阅时,由客户端发送的短信息,含有_订单号;移动用户订阅时,由客户端发短信,第三方回掉,含有ty订单号 # 第一层控制,通过status,让特定的情况修改redis if status and ('_' in smsContent or 'ty' in smsContent): if '_' in smsContent: shortOrderId = smsContent.split('_')[1] else: shortOrderId = smsContent.split('ty')[1] # 第二层控制,判断短订单号是否和之前的相同 if HttpGateWay.isShortOrderIdSame(mobile, shortOrderId): return HttpGateWay.getUserInfoParam(mobile) OrderId[0] = platformOrderId = ShortOrderIdMap.get_long_order_id(shortOrderId) TyContext.ftlog.debug('TuYouPayHuiYuanBaoYue->getUserInfo shortOrderId : [%s], platformOrderId :[%s]' % (shortOrderId, platformOrderId)) retValue = TyContext.RedisPayData.execute('EXISTS', redisKey) if int(retValue) == 1: UserInfostatus = cls.getUserInfoStatus(redisKey) # 第三层控制,判断之前的订单是否是成功的 if 0 == cmp(UserInfostatus, 'success'): TyContext.ftlog.error( 'TuYouPayHuiYuanBaoYue->getUserInfo Mobile [%s] has already bind to somebody already. ' % mobile) return None # 程序能走到这里,只有含有订单号信息的回调、无绑定记录的电话号码、之前绑定的订单号的状态是失败的,这几种情况才可以 # 举个例子:用户重发订阅时含有订单号的短信,用户再次订阅,联通的状态为91022的回调都不会都到这儿来 chargeInfo = cls.getChargeInfo(platformOrderId, mobile) if not chargeInfo: TyContext.ftlog.error( 'TuYouPayHuiYuanBaoYue->getUserInfo Doesn\'t exit chargeInfo, key is: sdk.charge:', platformOrderId) return None try: params = { 'userId': str(chargeInfo['uid']), 'mobile': mobile, 'phoneType': phoneType, 'iccid': TyContext.UserSession.get_session_iccid(str(chargeInfo['uid'])), 'platformOrderId': platformOrderId, 'shortOrderId': shortOrderId, 'productId': chargeInfo.get('diamondId', chargeInfo.get('buttonId', chargeInfo.get('prodId', 'na'))), 'payType': chargeInfo.get('chargeType', 'na'), 'total_fee': chargeInfo['chargeTotal'], 'appId': str(chargeInfo['appId']), 'clientId': chargeInfo['clientId'], 'subscribeTime': time.strftime('%Y-%m-%d %H:%M:%S'), 'status': 'create', } except Exception, e: TyContext.ftlog.error('TuYouPayHuiYuanBaoYue->getUserInfo ERROR: ', e) return None paramsStr = json.dumps(params) TyContext.RedisPayData.execute('SET', redisKey, paramsStr)
def doZhuoWangCallback(self, rpath): xmldata = TyContext.RunHttp.get_body_content() xmldata = xmldata.replace('encoding="gbk"', 'encoding="utf-8"') xmldata = unicode(xmldata, encoding='gbk').encode('utf-8') TyContext.ftlog.info('zhuowangMdo encode->xmldata=', xmldata) transactionId = '' try: xmlroot = ElementTree.fromstring(xmldata) checkCode = xmlroot.find('checkCode').text transactionId = xmlroot.find('transactionId').text serviceId = xmlroot.find('serviceId').text spId = xmlroot.find('spId').text serviceType = xmlroot.find('serviceType').text feeType = xmlroot.find('feeType').text # 获取orderPlatformId orderPlatformId = '' parmMap = xmlroot.getiterator("paramMap")[0] for x in parmMap: k, v = x.getchildren() if k.text == 'command': orderPlatformId = v.text orderPlatformId = orderPlatformId.split(',')[-1] orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doZhuoWangCallback->ERROR, param error !! xmldata=', xmldata) return TuYouPayZhuoWang.XML_RET % (transactionId, '0') if len(orderPlatformId) != 14: TyContext.ftlog.info( 'doZhuoWangCallback->ERROR, orderPlatformId error !!', 'orderPlatformId=', orderPlatformId) return TuYouPayZhuoWang.XML_RET % (transactionId, '0') TyContext.RunMode.get_server_link(orderPlatformId) if str(checkCode) == '000': from tysdk.entity.pay.pay import TuyouPay trade_status = 'TRADE_FINISHED' notifys = {'xml': xmldata} isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, -1, trade_status, notifys) if isOk: ret_msg = TuYouPayZhuoWang.XML_RET % (transactionId, '1') else: ret_msg = TuYouPayZhuoWang.XML_RET % (transactionId, '0') ret_msg = unicode(ret_msg, encoding='utf-8').encode('gbk') return ret_msg pass
def doCancelOrder(cls, path): ''' 用于客户端支付失败后取消订单 reason 0: user cancel the order for client sdk (e.g. ydmm/ltw) failed 1: user cancel the order in the first place 2: user cancel the order on sms send fail 3: user cancel the order on sms send timeout ''' mi = TyContext.RunHttp.convertToMsgPack() platformOrderId = mi.getParamStr('platformOrderId', 'na') productOrderId = mi.getParamStr('productOrderId', 'na') shortId = 'na' if ShortOrderIdMap.is_short_order_id_format(platformOrderId): shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id(platformOrderId) appId = mi.getParamInt('appId', 'na') userId = mi.getParamInt('userId', 'na') clientId = mi.getParamStr('clientId', 'na') paytype = mi.getParamStr('payType', 'na') errinfo = mi.getParamStr('errInfo', 'na') reason = mi.getParamStr('reason', 'na') chargeKey = 'sdk.charge:' + platformOrderId chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey, 'charge') if chargeInfo == None: chargeInfo = {} else: chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) Order.log(platformOrderId, Order.CLIENT_CANCELED, userId, appId, clientId, shortId=shortId, prodOrderId=productOrderId, paytype=paytype, prodid=chargeInfo.get('prodId', 'na'), diamondid=chargeInfo.get('diamondId', 'na'), charge_price=chargeInfo.get('chargeTotal', 'na'), subevent=reason, info=errinfo if errinfo else 'na') mo = TyContext.Cls_MsgPack() mo.setCmd('cancelorder') mo = mo.packJson() return mo
def doLinkYunCallback(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = '' try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] # productCode = rparam['productCode'] price = rparam['price'] goodsInf = rparam['goodsInf'] orderPlatformId = str(goodsInf)[2:] sign = rparam['sign'] except: TyContext.ftlog.info( 'doLinkYunCallback->ERROR, param error !! rparam=', rparam) return '1||param error' # 效验sign tSign = str(orderId) + str(mobileId) + str(price) + str( goodsInf) + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunCallback->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return '1||sign error' if orderPlatformId == '': TyContext.ftlog.info( 'doLinkYunCallback->ERROR, orderPlatformId error !! orderPlatformId=', orderPlatformId, 'goodsInf=', goodsInf) return '1||orderPlatformId error' orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 对凌云充值的订单,把手机号补充到订单信息里 self.__set_order_mobile__(orderPlatformId, mobileId) rparam['third_orderid'] = orderId total_fee = int(float(price) / 100) isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, total_fee, 'TRADE_FINISHED', rparam) if isOk: return '0||' else: return '1||charge fail'
def doLinkYunUnionCallback(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = '' try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderPlatformId = str(rparam['orderid'])[2:] msgcontent = rparam['msgcontent'] sign = rparam['sign'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunUnionCallback->ERROR, param error !! rparam=', rparam) return '0' # 效验sign tSign = str(mobileId) + '#' + str(serviceid) + '#' + str( msgcontent) + '#' + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunUnionCallback->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return '0' if orderPlatformId == '': TyContext.ftlog.info( 'doLinkYunUnionCallback->ERROR, orderPlatformId error !! orderPlatformId=', orderPlatformId) return '0' orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 对凌云充值的订单,把手机号补充到订单信息里 self.__set_order_mobile__(orderPlatformId, mobileId) if msgcontent == '0:0': TuyouPay.doBuyChargeCallback(orderPlatformId, -1, 'TRADE_FINISHED', rparam) return '0'
def doDuoKuCallback(cls, rpath): TyContext.ftlog.info('doDuoKuCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: shortOrderPlatformId = rparam['cpdefinepart'] orderPlatformId = ShortOrderIdMap.get_long_order_id(shortOrderPlatformId) appId = rparam['appid'] sign = rparam['sign'] unit = rparam['unit'] amount = rparam['amount'] status = rparam['status'] mobileId = rparam.get('phone', '') except: TyContext.ftlog.info('doDuoKuCallback->ERROR, param error !! rparam=', rparam) TyContext.ftlog.exception() return 'failure' if status != 'success': PayHelperV4.callback_error(orderPlatformId, 'pay fail', rparam) return 'failure' paykey_dict = TyContext.Configure.get_global_item_json('duoku_paykeys', {}) paykey = paykey_dict.get(appId, "") if not paykey: config = GameItemConfigure.get_game_channel_configure_by_orderId(orderPlatformId) paykey = config.get('dksdk_appsecret', "") if not paykey: TyContext.ftlog.error("doDuokuCallback", "cannot get %s sdkconfig" % appId) # 签名校验 if not cls.__verify_sign(rparam, paykey, sign): return 'failure' if unit == 'fen': total_fee = float(amount) / 100 else: total_fee = float(amount) ChargeModel.save_third_pay_order_id(orderPlatformId, rparam.get('orderid')) rparam['chargeType'] = 'duoku' rparam['third_orderid'] = rparam['orderid'] PayHelperV4.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'success' else: return 'failure'
def doDuoKuCallback(cls, rpath): TyContext.ftlog.info('doDuoKuCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: shortOrderPlatformId = rparam['cpdefinepart'] orderPlatformId = ShortOrderIdMap.get_long_order_id( shortOrderPlatformId) appId = rparam['appid'] sign = rparam['sign'] unit = rparam['unit'] amount = rparam['amount'] status = rparam['status'] mobileId = rparam.get('phone', '') except: TyContext.ftlog.info( 'doDuoKuCallback->ERROR, param error !! rparam=', rparam) TyContext.ftlog.exception() return 'failure' if status != 'success': PayHelper.callback_error(orderPlatformId, 'pay fail', rparam) return 'failure' paykey_dict = TyContext.Configure.get_global_item_json( 'duoku_paykeys', {}) paykey = str(paykey_dict[str(appId)]) # 签名校验 if not cls.__verify_sign(rparam, paykey, sign): return 'failure' if unit == 'fen': total_fee = float(amount) / 100 else: total_fee = float(amount) rparam['chargeType'] = 'duoku' rparam['third_orderid'] = rparam['orderid'] PayHelper.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'success' else: return 'failure'
def doGetSmsBindCode(cls, rparams, mo): TyContext.ftlog.info(cls.__name__, 'doGetSmsBindCode->rparams=', rparams) appId = rparams['appId'] clientId = rparams['clientId'] userId = rparams['userId'] bound = False if userId > 0: bindMobile = TyContext.RedisUser.execute(userId, 'HGET', 'user:'******'bindMobile') if bindMobile is not None and len(str(bindMobile)) == 11: bound = True if bound: mo.setResult('code', AccountConst.CODE_USER_MOBILE_BINDED) mo.setResult('info', '当前账号已绑定手机') return bindOrderId = TyContext.ServerControl.makeSmsBindOrderIdV3( userId, appId, clientId) shortId = ShortOrderIdMap.get_short_order_id(bindOrderId) smsconfig = TyContext.Configure.get_global_item_json( 'smsup_content', {}) sms = smsconfig['bindcode'] % int(shortId) mo.setResult('code', 0) mo.setResult('sms', sms) ### TyContext.RedisUserKeys.execute('HMSET', 'bindOrder:' + bindOrderId, 'state', AccountConst.MOBILE_BIND_PENDING, 'userId', userId, 'appId', appId, 'clientId', clientId) TyContext.RedisUserKeys.execute('EXPIRE', 'bindOrder:' + bindOrderId, 5 * 60) mo.setResult('bindOrderId', bindOrderId) smsup_port = TyContext.Configure.get_global_item_str('smsup_port') mo.setResult('port', smsup_port) TyContext.ftlog.info(cls.__name__, 'doGetSmsBindCode->bindOrderId=', bindOrderId, 'userid=', userId, 'sms', sms, 'port', smsup_port)
def doBuyStraight(self, userId, params, mo): prodId = params['prodId'] payCode = '' orderPhone = '' if prodId == 'T20K' or prodId == 'CARDMATCH10' or prodId == 'MOONKEY' or prodId == 'TGBOX1' or prodId == 'T3_NS_COIN_2' or prodId == 'COIN8' or prodId == 'TEXAS_COIN1' or prodId == 'C2': payCode = 'YY,11,10026' orderPhone = '10658035616002' sortOrderId = ShortOrderIdMap.get_short_order_id( params['orderPlatformId']) payData = { 'msgOrderCode': payCode, 'orderPhone': orderPhone, 'sortOrderId': sortOrderId } params['payData'] = payData mo.setResult('payData', payData) pass
def _charge_data(cls, chargeinfo): duandai_paytypes = TyContext.Configure.get_global_item_json("all_duandai_paytypes") noncfg_paytypes = TyContext.Configure.get_global_item_json("nonconfigured_duandai_paytypes") chargeType = chargeinfo['chargeType'] cfun, cdata = None, {} if chargeType in duandai_paytypes and chargeType not in noncfg_paytypes: phoneType = TyContext.UserSession.get_phone_type_code(chargeinfo['phoneType']) _, cdata = cls._get_duandai_paydata( chargeinfo['appId'], chargeinfo['buttonId'], chargeinfo['clientId'], phoneType, chargeinfo) chargeinfo['chargeData'] = cdata else: if chargeType in cls._charg_data_funs: cfun = cls._charg_data_funs[chargeType] else: if chargeType in TuyouPayChargeConf.CHARGE_DATA: cpath = TuyouPayChargeConf.CHARGE_DATA[chargeType] tks = cpath.split('.') mpackage = '.'.join(tks[0:-1]) clsName = tks[-1] clazz = None exec 'from %s import %s as clazz' % (mpackage, clsName) cfun = getattr(clazz, 'charge_data') cls._charg_data_funs[chargeType] = cfun else: cls._charg_data_funs[chargeType] = None if cfun: try: cfun(chargeinfo) cdata = chargeinfo['chargeData'] except: pass TyContext.ftlog.debug('_charge_data', 'chargeinfo', chargeinfo, 'cfun', cfun, 'cdata', cdata) if not cdata: return if cdata.get('need_short_order_id', 0) == 1: chargeinfo['shortDiamondOrderId'] = \ ShortOrderIdMap.get_short_order_id(chargeinfo['platformOrderId'])
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 doLinkYunLtsdkCallback(self, rpath): clientIp = TyContext.RunHttp.get_client_ip() TyContext.ftlog.info('doLinkYunLtsdkCallback in clientIp=', clientIp) ''' if not clientIp in ('219.238.157.144','125.39.218.102'): return '1' ''' rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = '' try: mobileId = rparam['mobile'] transactionId = rparam['transactionId'] orderPlatformId = rparam['outTradeNo'] status = rparam['status'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunLtsdkCallback->ERROR, param error !! rparam=', rparam) return '1' if orderPlatformId == '': TyContext.ftlog.info( 'doLinkYunLtsdkCallback->ERROR, orderPlatformId error !! orderPlatformId=', orderPlatformId) return '1' orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 对凌云充值的订单,把手机号补充到订单信息里 self.__set_order_mobile__(orderPlatformId, mobileId) if int(status) == 4: TuyouPay.doBuyChargeCallback(orderPlatformId, -1, 'TRADE_FINISHED', rparam) return '0'
def doLinkYunUnionConfirm(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderId = rparam['orderid'] orderPlatformId = str(rparam['orderid'])[2:] sign = rparam['sign'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunUnionConfirm->ERROR, param error !! rparam=', rparam) return '1' # 效验sign=mobile#serviceid#orderid#密钥 tSign = str(mobileId) + '#' + str(serviceid) + '#' + str( orderId) + '#' + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunUnionConfirm->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return '1' else: # 新增对订单状态确认,避免玩家重复发同一订单的问题 # 获取订单状态,如果订单状态大于1,则返回凌云N orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) order_state = TyContext.RedisPayData.execute( 'HGET', 'platformOrder:' + str(orderPlatformId), 'state') if order_state != None and int(order_state) > 1: return '1' return '0'
def doLinkYunConfirm(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] # productCode = rparam['productCode'] price = rparam['price'] goodsInf = rparam['goodsInf'] orderPlatformId = str(goodsInf)[2:] sign = rparam['sign'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunConfirm->ERROR, param error !! rparam=', rparam) return 'N' # 效验sign tSign = str(orderId) + str(mobileId) + str(price) + str( goodsInf) + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunConfirm->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return 'N' else: orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 新增对订单状态确认,避免玩家重复发同一订单的问题 # 获取订单状态,如果订单状态大于1,则返回凌云N order_state = TyContext.RedisPayData.execute( 'HGET', 'platformOrder:' + str(orderPlatformId), 'state') if order_state != None and int(order_state) > 1: return 'N' return 'Y'
def get_charge_data(cls, chargeinfo): ''' delegate to charge_data func of thirdpay ''' cfun = TuyouPayChargeConf.get_charge_data_func( chargeinfo['chargeType']) try: cfun(chargeinfo) except TyContext.FreetimeException as e: raise except Exception as e: TyContext.ftlog.exception() return if 'chargeData' not in chargeinfo and 'chargeCategories' not in chargeinfo: raise Exception( 'neither chargeData nor chargeCategories in chargeinfo') try: if chargeinfo['chargeData'].get('need_short_order_id', 0): chargeinfo[ 'shortDiamondOrderId'] = ShortOrderIdMap.get_short_order_id( chargeinfo['platformOrderId']) except: pass
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'