def doAliCallback(self, rpath): rparam = PayHelperV4.getArgsDict() TyContext.ftlog.info('doAliCallbackNew->args=', rparam) sign = rparam['sign'] notify_data = self.createLinkString(rparam) # TyContext.ftlog.info('doAliCallbackNew->notify_data=', notify_data) # TyContext.ftlog.info('doAliCallbackNew->sign=', sign) # 签名校验 if not self.rsaVerify(notify_data, **rparam): TyContext.ftlog.error('TuyouPayTuyou.doAliCallback rsa verify error !!') return 'error' trade_status = rparam['trade_status'] total_fee = rparam['total_fee'] subject = rparam['subject'] out_trade_no = rparam['out_trade_no'] trade_no = rparam['trade_no'] platformOrderId = out_trade_no chargeKey = 'sdk.charge:' + platformOrderId oldState, chargeInfo, consumeInfo = TyContext.RedisPayData.execute('HMGET', chargeKey, 'state', 'charge', 'consume') chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) if chargeInfo else {} appId = int(chargeInfo.get('appId', 9999)) chargeType = chargeInfo.get('chargeType', 'tuyou.ali') notifys = {'status': trade_status, 'total_fee': total_fee, 'subject': subject, 'out_trade_no': out_trade_no, 'trade_no': trade_no, 'sign': sign, 'notify_data': notify_data, 'chargeType': chargeType, 'third_orderid': trade_no} if trade_status == 'TRADE_CLOSED': PayHelperV4.callback_error(platformOrderId, 'TRADE_CLOSED', notifys) return 'success' if trade_status != 'TRADE_SUCCESS' and trade_status != 'TRADE_FINISHED': if chargeInfo.get('chargeType') == 'alibig': userId = chargeInfo['userId'] timestamp, count = TyContext.RedisPayData.execute('HMGET', 'alibig:%s' % userId, 'timestamp', 'count') now = date.fromtimestamp(int(time.time())) if timestamp and now.toordinal() == date.fromtimestamp(int(timestamp)).toordinal(): count = int(count) + 1 else: timestamp = int(time.time()) count = 1 TyContext.RedisPayData.execute('HMSET', 'alibig:%s' % userId, 'timestamp', timestamp, 'count', count) return 'success' isOK = PayHelperV4.callback_ok(platformOrderId, -1, notifys) if isOK: return 'success' else: return 'error'
def doIosCallback(cls, rpath): platformOrderId = TyContext.RunHttp.getRequestParam('iosOrderId', '') TyContext.RunMode.get_server_link(platformOrderId) isReturn, params = AccountCheck.normal_check(rpath, True) if isReturn: return params userId = params['userId'] appId = params['appId'] clientId = params['clientId'] appInfo = TyContext.RunHttp.getRequestParam('appInfo', '') isMock = bool(TyContext.RunHttp.getRequestParam('isMock')) receipt = TyContext.RunHttp.getRequestParam('receipt', '') receiptData = {'receiptJsonStr': '{"receipt-data" : "' + receipt + '"}', 'platformOrder': platformOrderId, 'userId': userId} TyContext.ftlog.info('IOS->doIosCallback->userId', userId, 'appId', appId, 'clientId', clientId, 'appInfo', appInfo, 'platformOrderId', platformOrderId, 'receipt', receipt, 'isMock', isMock) rparam = PayHelperV4.getArgsDict() rparam['chargeType'] = 'tuyooios' rparam['userId'] = params['userId'] rparam['appId'] = params['appId'] rparam['clientId'] = params['clientId'] isSandbox = is_sandbox_receipt(receipt) ret = cls.doIosCallbackVerify(receiptData, isSandbox, isMock) TyContext.ftlog.debug('IOS->doIosCallback->doIosCallbackVerify ret=', ret) if ret != 'ok' and ret != 'uuid_prohibit': PayHelperV4.callback_error(platformOrderId, ret, rparam) return ret # 如果是被封禁的uuid,不进行发货处理 if ret == 'uuid_prohibit': return 'success' transaction_id = receiptData['original_transaction_id'] rparam['third_orderid'] = transaction_id rparam['third_prodid'] = receiptData.get('product_id', 'na') rparam['isTestOrder'] = receiptData.get('sandbox', False) if cls._is_ios_transaction_delivered(transaction_id): PayHelperV4.callback_error(platformOrderId, 'error-transaction-already-delivered', rparam) TyContext.ftlog.info('IOS->doIosCallback error-transaction-already-delivered ' 'userId', userId, 'platformOrder', platformOrderId) return 'error-transaction-already-delivered' if not platformOrderId: ret = cls._deliver_missing_order(rparam) if not ret: return 'error-platform-order-missing' else: platformOrderId = ret # 根据商品Id过滤刷单的订单---------------start try: chargeKey = 'sdk.charge:' + platformOrderId chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey, 'charge') if chargeInfo == None: TyContext.ftlog.info('IOS->doIosCallback error-platformOrderId-not-found ' 'userId', userId, 'platformOrder', platformOrderId) return 'error-platform-order-missing' chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True) if 'chargeData' in chargeInfo and 'orderIosCode' in chargeInfo['chargeData'] and chargeInfo['chargeData'][ 'orderIosCode'] != rparam['third_prodid']: TyContext.ftlog.info('IOS->doIosCallback error-product_id ' 'userId', userId, 'platformOrder', platformOrderId, 'orderIosCode', chargeInfo['chargeData']['orderIosCode'], 'receipt_product_id', rparam['third_prodid']) return 'error-product_id' except: pass product = cls.get_pay_ios_product(appId, rparam['third_prodid'], clientId, 'iosid') if not product: TyContext.ftlog.error('get_pay_ios_product products not found!' ' appId=', appId, 'iosId=', rparam['third_prodid'], 'clientId=', clientId, 'checkIdKey=iosid') return 'error-product_id' # 根据商品Id过滤刷单的订单---------------end isOk = PayHelperV4.callback_ok(platformOrderId, -1, rparam) if isOk: cls._mark_ios_transaction_as_delivered(transaction_id) try: # 328 & 628 第一次购买后只能使用微信支付 ios_control = TyContext.Configure.get_global_item_json('ios_weinxin_pay_control', {}) if product['tyid'] in ios_control.get('weixin_products', []): wxpay_count = TyContext.RedisUser.execute(userId, 'HGET', 'user:'******'wxpay_flag') if not wxpay_count: wxpay_count = 0 TyContext.RedisUser.execute(userId, 'HSET', 'user:'******'wxpay_flag', int(wxpay_count) + 1) except: TyContext.ftlog.exception() return 'success' else: return 'error-handle-callback'