update
This commit is contained in:
parent
a5fd2647e3
commit
5f12f60b45
@ -247,7 +247,8 @@ async def merchant_cancel_order(
|
|||||||
wechat = WeChatClient()
|
wechat = WeChatClient()
|
||||||
await wechat.apply_refund(
|
await wechat.apply_refund(
|
||||||
order_id=order.order_id,
|
order_id=order.order_id,
|
||||||
total_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分
|
total_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分,订单总金额
|
||||||
|
refund_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分,退款金额
|
||||||
reason="商家取消订单"
|
reason="商家取消订单"
|
||||||
)
|
)
|
||||||
return success_response(data=MerchantOrderInfo.model_validate(order))
|
return success_response(data=MerchantOrderInfo.model_validate(order))
|
||||||
@ -278,7 +279,8 @@ async def user_cancel_order(
|
|||||||
wechat = WeChatClient()
|
wechat = WeChatClient()
|
||||||
await wechat.apply_refund(
|
await wechat.apply_refund(
|
||||||
order_id=order.order_id,
|
order_id=order.order_id,
|
||||||
total_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分
|
total_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分,订单总金额
|
||||||
|
refund_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分,退款金额
|
||||||
reason="用户取消订单"
|
reason="用户取消订单"
|
||||||
)
|
)
|
||||||
return success_response(data=MerchantOrderInfo.model_validate(order))
|
return success_response(data=MerchantOrderInfo.model_validate(order))
|
||||||
@ -554,7 +556,8 @@ async def apply_refund(
|
|||||||
wechat = WeChatClient()
|
wechat = WeChatClient()
|
||||||
await wechat.apply_refund(
|
await wechat.apply_refund(
|
||||||
order_id=order.order_id,
|
order_id=order.order_id,
|
||||||
total_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分
|
total_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分,订单总金额
|
||||||
|
refund_amount=int(float(order.pay_amount) * 100) if not settings.DEBUG else 1, # 转换为分,退款金额
|
||||||
reason="用户申请退款"
|
reason="用户申请退款"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -912,7 +912,8 @@ async def cancel_order(
|
|||||||
wechat = WeChatClient()
|
wechat = WeChatClient()
|
||||||
await wechat.apply_refund(
|
await wechat.apply_refund(
|
||||||
order_id=order.orderid,
|
order_id=order.orderid,
|
||||||
total_amount=int(float(order.final_amount) * 100) if not settings.DEBUG else 1, # 转换为分
|
total_amount=int(float(order.final_amount) * 100) if not settings.DEBUG else 1, # 订单总金额(分)
|
||||||
|
refund_amount=int(float(order.final_amount) * 100) if not settings.DEBUG else 1, # 退款金额(分)
|
||||||
reason="用户取消订单"
|
reason="用户取消订单"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1174,7 +1175,8 @@ async def deliveryman_cancel_order(
|
|||||||
wechat = WeChatClient()
|
wechat = WeChatClient()
|
||||||
await wechat.apply_refund(
|
await wechat.apply_refund(
|
||||||
order_id=order.orderid,
|
order_id=order.orderid,
|
||||||
total_amount=int(float(order.final_amount) * 100) if not settings.DEBUG else 1, # 转换为分
|
total_amount=int(float(order.final_amount) * 100) if not settings.DEBUG else 1, # 订单总金额(分)
|
||||||
|
refund_amount=int(float(order.final_amount) * 100) if not settings.DEBUG else 1, # 退款金额(分)
|
||||||
reason="配送员取消订单"
|
reason="配送员取消订单"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1616,8 +1618,9 @@ async def refund_order_amount(
|
|||||||
wechat = WeChatClient()
|
wechat = WeChatClient()
|
||||||
await wechat.apply_refund(
|
await wechat.apply_refund(
|
||||||
order_id=order.orderid,
|
order_id=order.orderid,
|
||||||
total_amount=int(float(request.amount) * 100) if not settings.DEBUG else 1, # 转换为分
|
total_amount=int(float(order.final_amount + request.amount) * 100) if not settings.DEBUG else 1, # 原订单总金额(分)
|
||||||
reason="后台退款"
|
refund_amount=int(float(request.amount) * 100) if not settings.DEBUG else 1, # 本次退款金额(分)
|
||||||
|
reason=request.reason or "后台退款"
|
||||||
)
|
)
|
||||||
|
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|||||||
@ -370,6 +370,7 @@ class WeChatClient:
|
|||||||
self,
|
self,
|
||||||
order_id: str,
|
order_id: str,
|
||||||
total_amount: int,
|
total_amount: int,
|
||||||
|
refund_amount: int = None,
|
||||||
reason: str = "用户申请退款"
|
reason: str = "用户申请退款"
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""
|
"""
|
||||||
@ -377,14 +378,19 @@ class WeChatClient:
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
order_id: 订单号(同时作为退款单号)
|
order_id: 订单号(同时作为退款单号)
|
||||||
total_amount: 退款金额(分)
|
total_amount: 订单总金额(分)
|
||||||
|
refund_amount: 退款金额(分),默认为None时等于total_amount(全额退款)
|
||||||
reason: 退款原因
|
reason: 退款原因
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict: 退款结果
|
dict: 退款结果
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
print(f"开始申请退款: order_id={order_id}, amount={total_amount}")
|
# 如果未指定退款金额,默认全额退款
|
||||||
|
if refund_amount is None:
|
||||||
|
refund_amount = total_amount
|
||||||
|
|
||||||
|
print(f"开始申请退款: order_id={order_id}, total_amount={total_amount}, refund_amount={refund_amount}")
|
||||||
# 生成随机字符串
|
# 生成随机字符串
|
||||||
nonce_str = generate_random_string()
|
nonce_str = generate_random_string()
|
||||||
timestamp = str(int(time.time()))
|
timestamp = str(int(time.time()))
|
||||||
@ -396,17 +402,17 @@ class WeChatClient:
|
|||||||
# 构建请求体
|
# 构建请求体
|
||||||
body = {
|
body = {
|
||||||
"out_trade_no": order_id, # 商户订单号,二选一
|
"out_trade_no": order_id, # 商户订单号,二选一
|
||||||
"out_refund_no": f"refund_{order_id}", # 商户退款单号
|
"out_refund_no": f"refund_{order_id}_{int(time.time())}", # 商户退款单号,加入时间戳避免重复
|
||||||
"reason": reason,
|
"reason": reason,
|
||||||
"notify_url": f"{settings.API_BASE_URL}/api/wechat/refund/notify",
|
"notify_url": f"{settings.API_BASE_URL}/api/wechat/refund/notify",
|
||||||
"amount": {
|
"amount": {
|
||||||
"refund": total_amount, # 退款金额
|
"refund": refund_amount, # 退款金额
|
||||||
"total": total_amount, # 原订单金额
|
"total": total_amount, # 原订单金额
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# 生成签名
|
# 生成签名
|
||||||
nonce_str, timestamp, signature = self.sign_message("POST", url_path, body)
|
nonce_str, timestamp, signature = self.sign_message("POST", url_path, body)
|
||||||
|
|
||||||
# 构建认证头
|
# 构建认证头
|
||||||
|
|||||||
BIN
jobs.sqlite
BIN
jobs.sqlite
Binary file not shown.
Loading…
Reference in New Issue
Block a user