update refund baidu
This commit is contained in:
parent
80821599ea
commit
7917ac2d3d
@ -1,6 +1,7 @@
|
||||
async def user_action_record(ns={}):
|
||||
ns_dic_id = uuid() if not ns.get('id') else ns.get('id')
|
||||
ns_dic = {
|
||||
'id': uuid(),
|
||||
'id': ns_dic_id,
|
||||
'source': '百度智能云',
|
||||
'orderid': ns.get('orderid'),
|
||||
'ordertype': ns.get('ordertype'),
|
||||
@ -430,87 +431,192 @@ async def get_baidu_orderlist(ns={}):
|
||||
f.write(str(e)+ traceback.format_exc())
|
||||
traceback.print_exc()
|
||||
|
||||
async def baidu_confirm_refund_order(ns={}):
|
||||
async def get_order_list_base_page(baidu_id, pageNo=1, pageSize=500):
|
||||
ns = {'queryAccountId': baidu_id, 'pageNo': pageNo, 'pageSize': pageSize}
|
||||
method = 'POST'
|
||||
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
||||
url = 'https://billing.baidubce.com/v1/order/list?%s' % ns_format
|
||||
header = {
|
||||
"Host": "billing.baidubce.com",
|
||||
"ContentType": "application/json;charset=UTF-8"
|
||||
}
|
||||
header = await get_auth_header(method=method, url=url, header=header)
|
||||
async with aiohttp_client.request(
|
||||
method=method,
|
||||
url=url,
|
||||
headers=header,
|
||||
json=ns) as res:
|
||||
data_orders = await res.json()
|
||||
return data_orders
|
||||
|
||||
|
||||
async def update_baidu_order_list(ns={}):
|
||||
"""
|
||||
ns = {'queryAccountId': '139fc7a23b314596ad78b6bb8e7c1503', 'orderType': 'REFUND'}
|
||||
:return:
|
||||
"""
|
||||
db = DBPools()
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
refund_status_li = await sor.R('baidu_orders', {'orderid': ns.get('order_id')})
|
||||
refundstatus = refund_status_li[0]['refundstatus']
|
||||
refund_id = refund_status_li[0]['id']
|
||||
username = None
|
||||
# 更新机构下全部用户订单信息
|
||||
if ns.get('orgid'):
|
||||
users_find_sql = """SELECT DISTINCT b.baidu_id FROM organization o INNER JOIN users u ON o.id = u.orgid INNER JOIN baidu_users b ON u.id = b.user_id WHERE o.parentid = '%s' AND b.del_flg = '0';""" % ns.get('orgid')
|
||||
users = await sor.sqlExe(users_find_sql, {})
|
||||
|
||||
if not refundstatus:
|
||||
# data_ = {}
|
||||
# 调用支付订单接口
|
||||
paydata = {'queryAccountId': ns.get('baidu_id'), 'orderId':ns.get('order_id')}
|
||||
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
||||
url = 'https://billing.baidubce.com/v1/order/pay?%s' % ns_format
|
||||
method = 'POST'
|
||||
header = {
|
||||
"Host": "billing.baidubce.com"
|
||||
}
|
||||
header = await get_auth_header(method=method, url=url, header=header)
|
||||
async with aiohttp_client.request(
|
||||
method=method,
|
||||
url=url,
|
||||
headers=header,
|
||||
json=paydata) as res:
|
||||
data_ = await res.json()
|
||||
if data_ == {'success': True}:
|
||||
# if True:
|
||||
ns_record = {
|
||||
'orderid': ns.get('order_id'),
|
||||
'ordertype': 'REFUND',
|
||||
'userid': ns.get('userid'),
|
||||
'reason': '远程退款成功'
|
||||
}
|
||||
await user_action_record(ns_record)
|
||||
db = DBPools()
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '1'})
|
||||
|
||||
# 增加延迟
|
||||
import asyncio
|
||||
await asyncio.sleep(10)
|
||||
# 更新个人订单信息
|
||||
elif ns.get('userid'):
|
||||
users = await sor.R('baidu_users', {'user_id': ns['userid']})
|
||||
username_li = await sor.R('users', {'id': ns['userid']})
|
||||
username = username_li[0]['username'] if username_li else None
|
||||
else:
|
||||
ns_record = {
|
||||
'orderid': ns.get('order_id'),
|
||||
'ordertype': 'REFUND',
|
||||
'userid': ns.get('userid'),
|
||||
'reason': '产品退费失败, %s' % str(data_)[:400]
|
||||
}
|
||||
await user_action_record(ns_record)
|
||||
return {
|
||||
'status': False,
|
||||
'msg': '产品退款出错!%s' % str(data_)[:400]
|
||||
}
|
||||
users = []
|
||||
|
||||
update_count = 0
|
||||
add_count = 0
|
||||
for baidu_id in users:
|
||||
data_orders = await get_order_list_base_page(baidu_id['baidu_id'], pageNo=1, pageSize=1000)
|
||||
page_num_count = int(data_orders['totalCount'] / data_orders['pageSize']) + 1
|
||||
for page_num in range(1, page_num_count + 1):
|
||||
data_orders = await get_order_list_base_page(baidu_id['baidu_id'], pageNo=page_num, pageSize=1000)
|
||||
orders = data_orders['orders']
|
||||
for item in orders:
|
||||
updatetime = await time_convert(item.get('updateTime')) if item.get('updateTime') else None
|
||||
ns_dic = {
|
||||
"id": uuid(),
|
||||
"orderid": item.get("uuid"),
|
||||
"ordertype": item.get("type"),
|
||||
"accountid": item.get("accountId"),
|
||||
"servicetype": item.get("serviceType"),
|
||||
"producttype": item.get("productType"),
|
||||
"shortids": ','.join(item['shortIds']) if item.get('shortIds') else '',
|
||||
"price": item.get("price"),
|
||||
"status": item.get("status"),
|
||||
"autoreneworder": '1' if item.get("autoRenewOrder") else '0',
|
||||
"createtime": await time_convert(item.get('createTime')) if item.get(
|
||||
'createTime') else None,
|
||||
"updatetime": updatetime
|
||||
}
|
||||
ns_exist_order = {
|
||||
'orderid': item.get("uuid")
|
||||
}
|
||||
exist_order = await sor.R('baidu_orders', ns_exist_order)
|
||||
if exist_order and exist_order[0]['updatetime'] != updatetime:
|
||||
update_refund_sql = """UPDATE baidu_orders SET price = '%s', status = '%s', updatetime = '%s' WHERE orderid = '%s';""" % \
|
||||
(item.get("price"), item.get("status"), updatetime,
|
||||
item.get("uuid"))
|
||||
await sor.sqlExe(update_refund_sql, {})
|
||||
update_count += 1
|
||||
|
||||
if not exist_order:
|
||||
await sor.C('baidu_orders', ns_dic)
|
||||
add_count += 1
|
||||
|
||||
if refundstatus == '2':
|
||||
return {
|
||||
'status': True,
|
||||
'msg': '已退款成功'
|
||||
'msg': '同步数据成功, 新增 %s 条, 更新 %s 条' % (add_count, update_count),
|
||||
'data': {
|
||||
'username': username
|
||||
}
|
||||
}
|
||||
|
||||
# 获取created状态后再去退款
|
||||
local_refund_status = await get_baidu_orderlist({'order_id': ns.get('order_id'), 'userid': ns.get('user_id')})
|
||||
print('local_refund_status', local_refund_status)
|
||||
if local_refund_status.get('status'):
|
||||
async def baidu_confirm_refund_order(ns={}):
|
||||
# 把 NEED_CONFIRM的订单同步到本地库,用于后续状态更新
|
||||
await update_baidu_order_list({'userid': ns.get('userid')})
|
||||
|
||||
db = DBPools()
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
users = await sor.R('baidu_users', {'user_id': ns['userid']})
|
||||
ns['baidu_id'] = users[0]['baidu_id'] if users else None
|
||||
if not ns['baidu_id']:
|
||||
return {
|
||||
'status': False,
|
||||
'msg': '用户 %s 未绑定百度智能云账号' % ns.get('userid')
|
||||
}
|
||||
|
||||
orders = json.loads(ns.get('order_id')) if isinstance(ns.get('order_id'), str) else ns.get('order_id')
|
||||
|
||||
for order_id in orders:
|
||||
db = DBPools()
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '2'})
|
||||
refund_status_li = await sor.R('baidu_orders', {'orderid': order_id})
|
||||
refundstatus = refund_status_li[0]['refundstatus']
|
||||
refund_id = refund_status_li[0]['id']
|
||||
|
||||
return {
|
||||
'status': True,
|
||||
'msg': '百度云给平台退款成功,平台给客户退款成功'
|
||||
}
|
||||
else:
|
||||
if local_refund_status.get('msg') == 'delay_order':
|
||||
if not refundstatus:
|
||||
# data_ = {}
|
||||
# 调用支付订单接口
|
||||
paydata = {'queryAccountId': ns.get('baidu_id'), 'orderId': order_id}
|
||||
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
||||
url = 'https://billing.baidubce.com/v1/order/pay?%s' % ns_format
|
||||
method = 'POST'
|
||||
header = {
|
||||
"Host": "billing.baidubce.com"
|
||||
}
|
||||
header = await get_auth_header(method=method, url=url, header=header)
|
||||
async with aiohttp_client.request(
|
||||
method=method,
|
||||
url=url,
|
||||
headers=header,
|
||||
json=paydata) as res:
|
||||
data_ = await res.json()
|
||||
if data_ == {'success': True}:
|
||||
# if True:
|
||||
ns_record = {
|
||||
'orderid': uuid(),
|
||||
'ordertype': 'REFUND',
|
||||
'userid': ns.get('userid'),
|
||||
'reason': '远程退款成功'
|
||||
}
|
||||
await user_action_record(ns_record)
|
||||
db = DBPools()
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '1'})
|
||||
|
||||
# 增加延迟
|
||||
import asyncio
|
||||
await asyncio.sleep(1)
|
||||
else:
|
||||
ns_record = {
|
||||
'orderid': order_id,
|
||||
'ordertype': 'REFUND',
|
||||
'userid': ns.get('userid'),
|
||||
'reason': '产品退费失败, %s' % str(data_)[:400]
|
||||
}
|
||||
await user_action_record(ns_record)
|
||||
return {
|
||||
'status': False,
|
||||
'msg': '产品退款出错!%s' % str(data_)[:400]
|
||||
}
|
||||
|
||||
if refundstatus == '2':
|
||||
return {
|
||||
'status': True,
|
||||
'msg': '已退款成功'
|
||||
}
|
||||
|
||||
# 获取created状态后再去退款
|
||||
local_refund_status = await get_baidu_orderlist({'order_id': order_id, 'userid': ns.get('user_id')})
|
||||
print('local_refund_status', local_refund_status)
|
||||
if local_refund_status.get('status'):
|
||||
db = DBPools()
|
||||
async with db.sqlorContext('kboss') as sor:
|
||||
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '2'})
|
||||
await sor.U('user_action', {'id': ns_record.get('id'), 'ordertype': 'REFUND', 'reason': '远程退款成功, 本地客户退款成功'})
|
||||
|
||||
return {
|
||||
'status': True,
|
||||
'msg': '百度云给平台退款成功,平台给客户退款成功'
|
||||
}
|
||||
else:
|
||||
if local_refund_status.get('msg') == 'delay_order':
|
||||
return {
|
||||
'status': False,
|
||||
'msg': '百度远程订单还未生成, 请十秒后重试'
|
||||
}
|
||||
return {
|
||||
'status': False,
|
||||
'msg': '百度远程订单还未生成, 请十秒后重试'
|
||||
'msg': '百度云退款成功,本机构给客户退款出错!'
|
||||
}
|
||||
return {
|
||||
'status': False,
|
||||
'msg': '百度云退款成功,本机构给客户退款出错!'
|
||||
}
|
||||
|
||||
ret = await baidu_confirm_refund_order(params_kw)
|
||||
return ret
|
||||
Loading…
x
Reference in New Issue
Block a user