Merge branch 'main' of https://git.opencomputing.cn/yumoqing/kboss
This commit is contained in:
commit
9b0f0282d4
@ -43,8 +43,8 @@ async def affirmbz_order(ns={}):
|
|||||||
|
|
||||||
servicename = orgid[0]['servicename']
|
servicename = orgid[0]['servicename']
|
||||||
product_url = None
|
product_url = None
|
||||||
if ('BCC' in servicename) or ('GPU' in servicename):
|
# if ('BCC' in servicename) or ('GPU' in servicename):
|
||||||
product_url = 'https://console.vcp.baidu.com/bcc/#/bcc/instance/list'
|
# product_url = 'https://console.vcp.baidu.com/bcc/#/bcc/instance/list'
|
||||||
|
|
||||||
date = await get_business_date(sor=None)
|
date = await get_business_date(sor=None)
|
||||||
# await sor.U('bz_order',{'id':ns['orderid'],'order_date': date})
|
# await sor.U('bz_order',{'id':ns['orderid'],'order_date': date})
|
||||||
@ -112,13 +112,12 @@ async def affirmbz_order(ns={}):
|
|||||||
await sor.rollback()
|
await sor.rollback()
|
||||||
raise error
|
raise error
|
||||||
|
|
||||||
async def get_baidu_orderlist(ns={}):
|
async def baidu_new_update_resouce(ns={}):
|
||||||
"""
|
|
||||||
百度支付
|
# 增加延迟
|
||||||
1、获取订单
|
import asyncio
|
||||||
2、算出购买的产品折扣
|
await asyncio.sleep(12)
|
||||||
3、比对账号余额
|
|
||||||
"""
|
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext('kboss') as sor:
|
async with db.sqlorContext('kboss') as sor:
|
||||||
baidu_users = await sor.R('baidu_users', {'user_id': ns.get('userid'),'del_flg':'0'})
|
baidu_users = await sor.R('baidu_users', {'user_id': ns.get('userid'),'del_flg':'0'})
|
||||||
@ -139,15 +138,107 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
headers=header,
|
headers=header,
|
||||||
json=nss) as res:
|
json=nss) as res:
|
||||||
data_ = await res.json()
|
data_ = await res.json()
|
||||||
|
with open('baidu_new_order_after_confirm.txt', 'a+') as f:
|
||||||
|
f.write(json.dumps(data_) + '\n')
|
||||||
|
orders = data_['orders']
|
||||||
|
|
||||||
|
for item in orders:
|
||||||
|
order_items = item['orderItems']
|
||||||
|
for order_info in order_items:
|
||||||
|
resourceids = ','.join(order_info['shortIds']) if order_info.get('shortIds') else ''
|
||||||
|
if not resourceids:
|
||||||
|
continue
|
||||||
|
resourcestarttime = await time_convert(order_info.get('resourceStartTime')) if order_info.get(
|
||||||
|
'resourceStartTime') else None
|
||||||
|
resourceendtime = await time_convert(order_info.get('resourceEndTime')) if order_info.get(
|
||||||
|
'resourceEndTime') else None
|
||||||
|
|
||||||
|
order_key = order_info['key']
|
||||||
|
update_order_goods_sql = """ UPDATE order_goods og
|
||||||
|
JOIN bz_order o ON og.orderid = o.id
|
||||||
|
SET
|
||||||
|
og.resourceids = '%s',
|
||||||
|
og.resourcestarttime = '%s',
|
||||||
|
og.resourceendtime = '%s'
|
||||||
|
WHERE
|
||||||
|
og.orderkey = '%s'
|
||||||
|
AND o.provider_orderid = '%s'; """ \
|
||||||
|
% (resourceids, resourcestarttime, resourceendtime, order_key, ns.get('order_id'))
|
||||||
|
await sor.sqlExe(update_order_goods_sql, {})
|
||||||
|
update_customer_goods_sql = """ UPDATE customer_goods og
|
||||||
|
JOIN bz_order o ON og.orderid = o.id
|
||||||
|
SET
|
||||||
|
og.resourceid = '%s',
|
||||||
|
og.start_date = '%s',
|
||||||
|
og.expire_date = '%s'
|
||||||
|
WHERE
|
||||||
|
og.orderkey = '%s'
|
||||||
|
AND o.provider_orderid = '%s'; """ \
|
||||||
|
% (resourceids, resourcestarttime, resourceendtime, order_key, ns.get('order_id'))
|
||||||
|
await sor.sqlExe(update_customer_goods_sql, {})
|
||||||
|
|
||||||
|
async def baidu_order_cancel(ns={}):
|
||||||
|
baidu_id = ns['baidu_id']
|
||||||
|
order_id = ns['order_id']
|
||||||
|
paydata = {'queryAccountId': baidu_id, 'orderIds': [order_id]}
|
||||||
|
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
||||||
|
url = 'https://billing.baidubce.com/v1/order/cancel?%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:
|
||||||
|
await res.json()
|
||||||
|
return {
|
||||||
|
'status': True,
|
||||||
|
'msg': 'order cancel success'
|
||||||
|
}
|
||||||
|
|
||||||
|
async def get_baidu_orderlist(ns={}):
|
||||||
|
"""
|
||||||
|
百度支付
|
||||||
|
1、获取订单
|
||||||
|
2、算出购买的产品折扣
|
||||||
|
3、比对账号余额
|
||||||
|
"""
|
||||||
|
# 增加延迟
|
||||||
|
import asyncio
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('kboss') as sor:
|
||||||
|
baidu_users = await sor.R('baidu_users', {'user_id': ns.get('userid'),'del_flg':'0'})
|
||||||
|
user = await sor.R('users', {'id': ns.get('userid')})
|
||||||
|
orgid = await sor.R('organization', {'id': user[0]['orgid']})
|
||||||
|
nss = {'uuids': [ns.get('order_id')], 'queryAccountId': baidu_users[0]['baidu_id']}
|
||||||
|
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
||||||
|
url = 'https://billing.baidubce.com/v1/order/getByUuid?%s' % ns_format
|
||||||
|
method = 'POST'
|
||||||
|
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=nss) as res:
|
||||||
|
data_ = await res.json()
|
||||||
|
with open('baidu_new_order.txt', 'a+') as f:
|
||||||
|
f.write(json.dumps(data_) + '\n')
|
||||||
orders = data_['orders']
|
orders = data_['orders']
|
||||||
serviceType = orders[0]['orderItems']
|
serviceType = orders[0]['orderItems']
|
||||||
|
|
||||||
# 可能获取得到的是延迟订单
|
# 可能获取得到的是延迟订单
|
||||||
if orders[0]['type'] == 'REFUND' and orders[0]['status'] != 'CREATED':
|
if orders[0]['type'] == 'REFUND' and orders[0]['status'] != 'CREATED':
|
||||||
return {
|
await update_baidu_order_list({'userid': ns.get('userid')})
|
||||||
'status': False,
|
res_refund = await baidu_confirm_refund_order({'order_id': ns.get('order_id'), 'baidu_id': baidu_users[0]['baidu_id'], 'user_id': ns.get('userid')})
|
||||||
'msg': 'delay_order'
|
return res_refund
|
||||||
}
|
|
||||||
|
|
||||||
# 避免重复退订
|
# 避免重复退订
|
||||||
if orders[0]['type'] == 'REFUND' and orders[0]['status'] == 'CREATED':
|
if orders[0]['type'] == 'REFUND' and orders[0]['status'] == 'CREATED':
|
||||||
@ -166,19 +257,52 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
(float(orders[0]['price']), orders[0]['status'], updatetime, ns.get('order_id'))
|
(float(orders[0]['price']), orders[0]['status'], updatetime, ns.get('order_id'))
|
||||||
await sor.sqlExe(update_refund_sql, {})
|
await sor.sqlExe(update_refund_sql, {})
|
||||||
|
|
||||||
|
productType = 'prepay'
|
||||||
# 判断订单item中productType是否有后付费的产品
|
# 判断订单item中productType是否有后付费的产品
|
||||||
for item in orders:
|
for item in orders:
|
||||||
order_items = item['orderItems']
|
order_items = item['orderItems']
|
||||||
for order_info in order_items:
|
for order_info in order_items:
|
||||||
postpay_price = order_info['itemFee']['price'] if order_info.get('itemFee') else order_info['catalogPrice']
|
postpay_price = order_info['itemFee']['price'] if order_info.get('itemFee') else order_info['catalogPrice']
|
||||||
|
if not postpay_price:
|
||||||
|
# cpt1Price: 固定配置,按分钟计费
|
||||||
|
postpay_price = order_info['pricingDetail'].get('cpt1Price') if order_info.get('pricingDetail') else 0
|
||||||
|
|
||||||
|
# 确定是否是后付费订单
|
||||||
if order_info['productType'] == 'postpay' and postpay_price != 0:
|
if order_info['productType'] == 'postpay' and postpay_price != 0:
|
||||||
|
productType = 'postpay'
|
||||||
|
# 获取余额
|
||||||
|
user_balance = await getCustomerBalance(sor, orgid[0]['id'])
|
||||||
|
# 判断余额是否大于50
|
||||||
|
if user_balance < 50:
|
||||||
|
await sor.rollback()
|
||||||
|
paydata = {'queryAccountId': baidu_users[0]['baidu_id'], 'orderIds': [ns.get('order_id')]}
|
||||||
|
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
||||||
|
url = 'https://billing.baidubce.com/v1/order/cancel?%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:
|
||||||
|
await res.json()
|
||||||
|
ns_record = {
|
||||||
|
'orderid': ns.get('order_id'),
|
||||||
|
'ordertype': orders[0]['type'],
|
||||||
|
'userid': ns.get('userid'),
|
||||||
|
'reason': '后付费 该账号余额不足50,无法完成购买'
|
||||||
|
}
|
||||||
|
await user_action_record(ns_record)
|
||||||
return {
|
return {
|
||||||
'status': False,
|
'status': False,
|
||||||
'msg': '暂不支持后付费按量购买, 请联系后台开通'
|
'msg': '您的余额小于该产品的起购金额50元, 目前无法购买立即充值'
|
||||||
}
|
}
|
||||||
# 实付价格
|
# 实付价格
|
||||||
total_price = 0
|
total_price = 0
|
||||||
productType = ''
|
# productType = ''
|
||||||
|
|
||||||
# 买/续/退 字段映射
|
# 买/续/退 字段映射
|
||||||
order_type = orders[0]['type']
|
order_type = orders[0]['type']
|
||||||
@ -211,7 +335,8 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
bz_ns['order_date'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
bz_ns['order_date'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
bz_ns['thirdparty_order'] = ns.get('order_id')
|
bz_ns['thirdparty_order'] = ns.get('order_id')
|
||||||
bz_ns['source'] = '百度智能云'
|
bz_ns['source'] = '百度智能云'
|
||||||
bz_ns['originalprice'] = orders[0]['price']
|
# bz_ns['originalprice'] = orders[0]['price']
|
||||||
|
bz_ns['originalprice'] = sum(i['catalogPrice'] for i in serviceType)
|
||||||
bz_ns['provider_orderid'] = ns.get('order_id')
|
bz_ns['provider_orderid'] = ns.get('order_id')
|
||||||
bz_ns['ordertype'] = orders[0]['productType']
|
bz_ns['ordertype'] = orders[0]['productType']
|
||||||
bz_ns['servicename'] = orders[0]['serviceType']
|
bz_ns['servicename'] = orders[0]['serviceType']
|
||||||
@ -220,23 +345,45 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
bz_ns['specdataid'] = ns['specdataid']
|
bz_ns['specdataid'] = ns['specdataid']
|
||||||
await sor.C('bz_order', bz_ns)
|
await sor.C('bz_order', bz_ns)
|
||||||
for i in serviceType:
|
for i in serviceType:
|
||||||
if i['productType'] == 'prepay':
|
# if i['productType'] == 'prepay':
|
||||||
# 预付费
|
# # 预付费
|
||||||
productType = 'prepay'
|
# productType = 'prepay'
|
||||||
# financePrice = 0
|
# financePrice = 0
|
||||||
# 获取产品id
|
# 获取产品id
|
||||||
product = await sor.R('product', {'providerpid': 'baidu_' + i['serviceType'], 'del_flg': '0'})
|
product = await sor.R('product', {'providerpid': 'baidu_' + i['serviceType'], 'del_flg': '0'})
|
||||||
|
if not product:
|
||||||
|
return {
|
||||||
|
'status': False,
|
||||||
|
'msg': '未配置该产品, 请联系售后处理'
|
||||||
|
}
|
||||||
# 获取协议
|
# 获取协议
|
||||||
saleprotocol = await sor.R('saleprotocol',
|
saleprotocol_to_person = await sor.R('saleprotocol',
|
||||||
{'bid_orgid': orgid[0]['id'], 'offer_orgid': orgid[0]['parentid'],
|
{'bid_orgid': orgid[0]['id'], 'offer_orgid': orgid[0]['parentid'],
|
||||||
'del_flg': '0'})
|
'del_flg': '0'})
|
||||||
if saleprotocol == []:
|
|
||||||
# 等于空就代表这个客户没有特殊折扣,就要找到买方为*的协议
|
# 等于空就代表这个客户没有特殊折扣,就要找到买方为*的协议
|
||||||
saleprotocol = await sor.R('saleprotocol', {'bid_orgid': '*', 'offer_orgid': orgid[0]['parentid'],
|
saleprotocol_to_all = await sor.R('saleprotocol', {'bid_orgid': '*', 'offer_orgid': orgid[0]['parentid'],
|
||||||
'del_flg': '0', 'salemode': '0'})
|
'del_flg': '0', 'salemode': '0'})
|
||||||
|
|
||||||
|
if saleprotocol_to_person:
|
||||||
product_salemode = await sor.R('product_salemode',
|
product_salemode = await sor.R('product_salemode',
|
||||||
{'protocolid': saleprotocol[0]['id'], 'productid': product[0]['id'],
|
{'protocolid': saleprotocol_to_person[0]['id'],
|
||||||
|
'productid': product[0]['id'],
|
||||||
'del_flg': '0'})
|
'del_flg': '0'})
|
||||||
|
if not product_salemode:
|
||||||
|
product_salemode = await sor.R('product_salemode',
|
||||||
|
{'protocolid': saleprotocol_to_all[0]['id'],
|
||||||
|
'productid': product[0]['id'],
|
||||||
|
'del_flg': '0'})
|
||||||
|
else:
|
||||||
|
product_salemode = await sor.R('product_salemode',
|
||||||
|
{'protocolid': saleprotocol_to_all[0]['id'],
|
||||||
|
'productid': product[0]['id'],
|
||||||
|
'del_flg': '0'})
|
||||||
|
if not product_salemode:
|
||||||
|
return {
|
||||||
|
'status': False,
|
||||||
|
'msg': '还未上线这个产品的协议配置'
|
||||||
|
}
|
||||||
supply_price = i['itemFee']['price'] if i.get('itemFee') else i['catalogPrice']
|
supply_price = i['itemFee']['price'] if i.get('itemFee') else i['catalogPrice']
|
||||||
financePrice = abs(supply_price * product_salemode[0]['discount'])
|
financePrice = abs(supply_price * product_salemode[0]['discount'])
|
||||||
total_price += financePrice
|
total_price += financePrice
|
||||||
@ -262,10 +409,11 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
nss['chargeduration'] = i.get('time')
|
nss['chargeduration'] = i.get('time')
|
||||||
nss['unit'] = i.get('timeUnit')
|
nss['unit'] = i.get('timeUnit')
|
||||||
nss['resourceids'] = ','.join(i['shortIds']) if i.get('shortIds') else ''
|
nss['resourceids'] = ','.join(i['shortIds']) if i.get('shortIds') else ''
|
||||||
|
nss['orderkey'] = i.get('key')
|
||||||
|
|
||||||
# 如果是续费订单 由于没有返回日期, 重新计算日期
|
# 如果是续费订单 由于没有返回日期, 重新计算日期
|
||||||
if order_type == 'RENEW':
|
if order_type == 'RENEW':
|
||||||
history_time_sql = "select resourcestarttime, resourceendtime from order_goods where resourceids = '%s' order by resourceendtime desc;" % \
|
history_time_sql = "select resourcestarttime, resourceendtime from order_goods where FIND_IN_SET('%s', resourceids) order by resourceendtime desc;" % \
|
||||||
nss['resourceids']
|
nss['resourceids']
|
||||||
history_time = await sor.sqlExe(history_time_sql, {})
|
history_time = await sor.sqlExe(history_time_sql, {})
|
||||||
new_end_time = await cal_expire_time(history_time=history_time[0]['resourceendtime'],
|
new_end_time = await cal_expire_time(history_time=history_time[0]['resourceendtime'],
|
||||||
@ -274,27 +422,45 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
nss['resourcestarttime'] = history_time[0]['resourcestarttime']
|
nss['resourcestarttime'] = history_time[0]['resourcestarttime']
|
||||||
nss['resourceendtime'] = new_end_time
|
nss['resourceendtime'] = new_end_time
|
||||||
else:
|
else:
|
||||||
nss['resourcestarttime'] = await time_convert(i.get('resourceStartTime')) if i.get(
|
if i.get('resourceStartTime'):
|
||||||
'resourceStartTime') else None
|
nss['resourcestarttime'] = await time_convert(i.get('resourceStartTime'))
|
||||||
nss['resourceendtime'] = await time_convert(i.get('resourceEndTime')) if i.get(
|
else:
|
||||||
'resourceEndTime') else None
|
nss['resourcestarttime'] = await time_convert(orders[0]['updateTime'])
|
||||||
|
|
||||||
|
if i.get('resourceEndTime'):
|
||||||
|
nss['resourceendtime'] = await time_convert(i.get('resourceEndTime'))
|
||||||
|
|
||||||
|
# 后付费没有资源结束时间
|
||||||
|
if i.get('productType') == 'prepay':
|
||||||
|
end_time = await time_convert(orders[0]['updateTime'])
|
||||||
|
nss['resourceendtime'] = await cal_expire_time(history_time=end_time,
|
||||||
|
chargeduration=nss['chargeduration'],
|
||||||
|
unit=nss['unit'])
|
||||||
|
else:
|
||||||
|
nss['resourceendtime'] = None
|
||||||
|
|
||||||
await sor.C('order_goods', nss)
|
await sor.C('order_goods', nss)
|
||||||
|
|
||||||
# 循环后更新订单中总价
|
# 循环后更新订单中总价
|
||||||
await sor.U('bz_order', {'id': bz_ns['id'], 'amount': round(total_price, 2)})
|
await sor.U('bz_order', {'id': bz_ns['id'], 'amount': round(total_price, 2)})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
await baidu_order_cancel({'baidu_id': baidu_users[0]['baidu_id'], 'order_id': ns.get('order_id')})
|
||||||
|
import traceback
|
||||||
ns_record = {
|
ns_record = {
|
||||||
'orderid': ns.get('order_id'),
|
'orderid': ns.get('order_id'),
|
||||||
'ordertype': orders[0]['type'],
|
'ordertype': orders[0]['type'],
|
||||||
'userid': ns.get('userid'),
|
'userid': ns.get('userid'),
|
||||||
'reason': '发生错误, %s' % str(e)[:100]
|
'reason': '发生错误, %s' % str(traceback.format_exc())
|
||||||
}
|
}
|
||||||
await user_action_record(ns_record)
|
await user_action_record(ns_record)
|
||||||
import traceback
|
|
||||||
with open('baiducloud_err.txt', 'w') as f:
|
with open('baiducloud_err.txt', 'w') as f:
|
||||||
f.write(str(e)+ traceback.format_exc())
|
f.write(str(e) + str(traceback.format_exc()))
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
await sor.rollback()
|
||||||
|
return {
|
||||||
|
'status': False,
|
||||||
|
'msg': '产品错误, 请联系售后'
|
||||||
|
}
|
||||||
|
|
||||||
# 判断用户账户余额是否足够支付
|
# 判断用户账户余额是否足够支付
|
||||||
try:
|
try:
|
||||||
@ -304,7 +470,7 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
|
|
||||||
if round(total_price,2) <= count:
|
if round(total_price,2) <= count:
|
||||||
#判断预付费或者后付费
|
#判断预付费或者后付费
|
||||||
if productType == 'prepay':
|
if productType == 'prepay' or productType == 'postpay':
|
||||||
# 调用扣费接口
|
# 调用扣费接口
|
||||||
affirmbz_order_ns = {
|
affirmbz_order_ns = {
|
||||||
'sor': sor,
|
'sor': sor,
|
||||||
@ -319,7 +485,7 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
'orderid': ns.get('order_id'),
|
'orderid': ns.get('order_id'),
|
||||||
'ordertype': orders[0]['type'],
|
'ordertype': orders[0]['type'],
|
||||||
'userid': ns.get('userid'),
|
'userid': ns.get('userid'),
|
||||||
'reason': '支付错误, 请联系售后'
|
'reason': '支付错误, 请联系售后, %s' % affirmbz_order_res.get('msg')
|
||||||
}
|
}
|
||||||
await user_action_record(ns_record)
|
await user_action_record(ns_record)
|
||||||
return {
|
return {
|
||||||
@ -335,22 +501,21 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
# 调用支付订单接口
|
# 调用支付订单接口
|
||||||
# paydata = {'queryAccountId':baidu_users[0]['baidu_id'],'orderId':ns.get('order_id')}
|
paydata = {'queryAccountId':baidu_users[0]['baidu_id'],'orderId':ns.get('order_id')}
|
||||||
# ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
||||||
# url = 'https://billing.baidubce.com/v1/order/pay?%s' % ns_format
|
url = 'https://billing.baidubce.com/v1/order/pay?%s' % ns_format
|
||||||
# method = 'POST'
|
method = 'POST'
|
||||||
# header = {
|
header = {
|
||||||
# "Host": "billing.baidubce.com"
|
"Host": "billing.baidubce.com"
|
||||||
# }
|
}
|
||||||
# header = await get_auth_header(method=method, url=url, header=header)
|
header = await get_auth_header(method=method, url=url, header=header)
|
||||||
# async with aiohttp_client.request(
|
async with aiohttp_client.request(
|
||||||
# method=method,
|
method=method,
|
||||||
# url=url,
|
url=url,
|
||||||
# headers=header,
|
headers=header,
|
||||||
# json=paydata) as res:
|
json=paydata) as res:
|
||||||
# data_ = await res.json()
|
data_ = await res.json()
|
||||||
# if data_ == {'success': True}:
|
if data_ == {'success': True}:
|
||||||
if True:
|
|
||||||
ns_record = {
|
ns_record = {
|
||||||
'orderid': ns.get('order_id'),
|
'orderid': ns.get('order_id'),
|
||||||
'ordertype': orders[0]['type'],
|
'ordertype': orders[0]['type'],
|
||||||
@ -358,12 +523,23 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
'reason': '购买成功'
|
'reason': '购买成功'
|
||||||
}
|
}
|
||||||
await user_action_record(ns_record)
|
await user_action_record(ns_record)
|
||||||
return {
|
ns_cron_job = {
|
||||||
'status': True,
|
'id': uuid(),
|
||||||
'orderid': bz_ns['id']
|
'source': 'baidu',
|
||||||
|
'orderid': ns.get('order_id'),
|
||||||
|
'ordertype': orders[0]['type'],
|
||||||
|
'userid': ns.get('userid'),
|
||||||
|
'reason': 'buy success'
|
||||||
}
|
}
|
||||||
|
await sor.C('baidu_cron_job', ns_cron_job)
|
||||||
|
# return {
|
||||||
|
# 'status': True,
|
||||||
|
# 'orderid': bz_ns['id']
|
||||||
|
# }
|
||||||
else:
|
else:
|
||||||
await sor.rollback()
|
await sor.rollback()
|
||||||
|
await baidu_order_cancel(
|
||||||
|
{'baidu_id': baidu_users[0]['baidu_id'], 'order_id': ns.get('order_id')})
|
||||||
ns_record = {
|
ns_record = {
|
||||||
'orderid': ns.get('order_id'),
|
'orderid': ns.get('order_id'),
|
||||||
'ordertype': orders[0]['type'],
|
'ordertype': orders[0]['type'],
|
||||||
@ -426,10 +602,26 @@ async def get_baidu_orderlist(ns={}):
|
|||||||
await user_action_record(ns_record)
|
await user_action_record(ns_record)
|
||||||
return {'status': False,'msg': '该账号余额不足,无法完成购买'}
|
return {'status': False,'msg': '该账号余额不足,无法完成购买'}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
await baidu_order_cancel({'baidu_id': baidu_users[0]['baidu_id'], 'order_id': ns.get('order_id')})
|
||||||
import traceback
|
import traceback
|
||||||
with open('baiducloud_err.txt', 'w') as f:
|
with open('baiducloud_err.txt', 'w') as f:
|
||||||
f.write(str(e)+ traceback.format_exc())
|
f.write(str(e)+ traceback.format_exc())
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
await sor.rollback()
|
||||||
|
return {
|
||||||
|
'status': False,
|
||||||
|
'msg': '产品错误, 请联系售后'
|
||||||
|
}
|
||||||
|
# 更新资源时间 资源id
|
||||||
|
# if order_type == 'NEW':
|
||||||
|
# await baidu_new_update_resouce(ns)
|
||||||
|
return {
|
||||||
|
'status': True,
|
||||||
|
'orderid': bz_ns['id'],
|
||||||
|
'originalprice': bz_ns.get('originalprice'),
|
||||||
|
'servicename': bz_ns.get('servicename'),
|
||||||
|
'amount': total_price
|
||||||
|
}
|
||||||
|
|
||||||
async def get_order_list_base_page(baidu_id, pageNo=1, pageSize=500):
|
async def get_order_list_base_page(baidu_id, pageNo=1, pageSize=500):
|
||||||
ns = {'queryAccountId': baidu_id, 'pageNo': pageNo, 'pageSize': pageSize}
|
ns = {'queryAccountId': baidu_id, 'pageNo': pageNo, 'pageSize': pageSize}
|
||||||
@ -520,6 +712,11 @@ async def update_baidu_order_list(ns={}):
|
|||||||
}
|
}
|
||||||
|
|
||||||
async def baidu_confirm_refund_order(ns={}):
|
async def baidu_confirm_refund_order(ns={}):
|
||||||
|
# ns = {
|
||||||
|
# 'order_id': ["03ee8d08da79458b8f8d3157d3498330", "e711729606024080bf9613d975294616"],
|
||||||
|
# 'userid': 'KsKhCUPizQyGiw3L1WVRy'
|
||||||
|
# }
|
||||||
|
import asyncio
|
||||||
# 把 NEED_CONFIRM的订单同步到本地库,用于后续状态更新
|
# 把 NEED_CONFIRM的订单同步到本地库,用于后续状态更新
|
||||||
await update_baidu_order_list({'userid': ns.get('userid')})
|
await update_baidu_order_list({'userid': ns.get('userid')})
|
||||||
|
|
||||||
@ -562,7 +759,8 @@ async def baidu_confirm_refund_order(ns={}):
|
|||||||
if data_ == {'success': True}:
|
if data_ == {'success': True}:
|
||||||
# if True:
|
# if True:
|
||||||
ns_record = {
|
ns_record = {
|
||||||
'orderid': uuid(),
|
'id': uuid(),
|
||||||
|
'orderid': order_id,
|
||||||
'ordertype': 'REFUND',
|
'ordertype': 'REFUND',
|
||||||
'userid': ns.get('userid'),
|
'userid': ns.get('userid'),
|
||||||
'reason': '远程退款成功'
|
'reason': '远程退款成功'
|
||||||
@ -573,8 +771,7 @@ async def baidu_confirm_refund_order(ns={}):
|
|||||||
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '1'})
|
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '1'})
|
||||||
|
|
||||||
# 增加延迟
|
# 增加延迟
|
||||||
import asyncio
|
await asyncio.sleep(2)
|
||||||
await asyncio.sleep(1)
|
|
||||||
|
|
||||||
# 把 NEED_CONFIRM的本地库改为CREATED
|
# 把 NEED_CONFIRM的本地库改为CREATED
|
||||||
await update_baidu_order_list({'userid': ns.get('userid')})
|
await update_baidu_order_list({'userid': ns.get('userid')})
|
||||||
@ -592,10 +789,10 @@ async def baidu_confirm_refund_order(ns={}):
|
|||||||
}
|
}
|
||||||
|
|
||||||
if refundstatus == '2':
|
if refundstatus == '2':
|
||||||
return {
|
"""
|
||||||
'status': True,
|
退款状态为2, 说明退款成功, 无需继续处理
|
||||||
'msg': '已退款成功'
|
"""
|
||||||
}
|
continue
|
||||||
|
|
||||||
# 获取created状态后再去退款
|
# 获取created状态后再去退款
|
||||||
local_refund_status = await get_baidu_orderlist({'order_id': order_id, 'userid': ns.get('userid')})
|
local_refund_status = await get_baidu_orderlist({'order_id': order_id, 'userid': ns.get('userid')})
|
||||||
@ -605,20 +802,26 @@ async def baidu_confirm_refund_order(ns={}):
|
|||||||
async with db.sqlorContext('kboss') as sor:
|
async with db.sqlorContext('kboss') as sor:
|
||||||
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '2'})
|
await sor.U('baidu_orders', {'id': refund_id, 'refundstatus': '2'})
|
||||||
await sor.U('user_action', {'id': ns_record.get('id'), 'ordertype': 'REFUND', 'reason': '远程退款成功, 本地客户退款成功'})
|
await sor.U('user_action', {'id': ns_record.get('id'), 'ordertype': 'REFUND', 'reason': '远程退款成功, 本地客户退款成功'})
|
||||||
|
continue
|
||||||
|
|
||||||
return {
|
# return {
|
||||||
'status': True,
|
# 'status': True,
|
||||||
'msg': '百度云给平台退款成功,平台给客户退款成功'
|
# 'msg': '百度云给平台退款成功,平台给客户退款成功'
|
||||||
}
|
# }
|
||||||
else:
|
else:
|
||||||
if local_refund_status.get('msg') == 'delay_order':
|
if local_refund_status.get('msg') == 'delay_order':
|
||||||
return {
|
return {
|
||||||
'status': False,
|
'status': False,
|
||||||
'msg': '百度远程订单还未生成, 请十秒后重试'
|
'msg': '百度远程订单还未生成, 请十秒后重试, %s' % str(local_refund_status)
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
'status': False,
|
'status': False,
|
||||||
'msg': '百度云退款成功,本机构给客户退款出错!'
|
'msg': '百度云退款成功,本机构给客户退款出错!, %s' % str(local_refund_status)
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'status': True,
|
||||||
|
'msg': '退款处理完成'
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = await baidu_confirm_refund_order(params_kw)
|
ret = await baidu_confirm_refund_order(params_kw)
|
||||||
|
|||||||
@ -15,7 +15,11 @@ async def baidu_order_cancel(ns={}):
|
|||||||
headers=header,
|
headers=header,
|
||||||
json=paydata) as res:
|
json=paydata) as res:
|
||||||
res = await res.json()
|
res = await res.json()
|
||||||
print(res)
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('kboss') as sor:
|
||||||
|
if res.get('success'):
|
||||||
|
sql_update = "update baidu_orders set status='CANCELLED' where order_id='%s'" % order_id
|
||||||
|
await sor.sqlExe(sql_update, {})
|
||||||
return {
|
return {
|
||||||
'status': True,
|
'status': True,
|
||||||
'msg': 'order cancel success, %s' % str(res)
|
'msg': 'order cancel success, %s' % str(res)
|
||||||
|
|||||||
@ -227,9 +227,9 @@ async def baidu_confirm_refund_order(ns={}):
|
|||||||
# if True:
|
# if True:
|
||||||
ns_record = {
|
ns_record = {
|
||||||
'id': uuid(),
|
'id': uuid(),
|
||||||
'orderid': ns.get('order_id'),
|
'orderid': order_id,
|
||||||
'ordertype': 'REFUND',
|
'ordertype': 'REFUND',
|
||||||
'userid': ns.get('user_id'),
|
'userid': ns.get('userid'),
|
||||||
'reason': '远程退款成功'
|
'reason': '远程退款成功'
|
||||||
}
|
}
|
||||||
await user_action_record(ns_record)
|
await user_action_record(ns_record)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user