This commit is contained in:
2026-06-15 14:45:15 +08:00
2 changed files with 158 additions and 56 deletions
+29 -15
View File
@@ -452,7 +452,7 @@ def _create_wechat_order(order: PaymentOrder, db_configs: dict[str, str]) -> str
try:
# 调用微信支付 Native 下单接口
code, result = client.pay(
description=f"充值订单 {order.order_no}",
description=f"充值积分{order.credits}订单 {order.order_no}",
out_trade_no=order.order_no,
amount={
"total": int(order.amount * 100), # 微信支付以分为单位
@@ -565,7 +565,10 @@ async def _refund_wechat_order(
refund_reason: str,
db_configs: dict[str, str]
) -> dict:
"""Call WeChat Pay refund API."""
"""Call WeChat Pay refund API.
微信退款是异步的,调用后会返回PROCESSING状态,实际退款结果通过回调通知。
"""
mch_id = db_configs.get("payment_wechat_mch_id", "")
private_key = db_configs.get("payment_wechat_private_key", "")
cert_serial_no = db_configs.get("payment_wechat_cert_serial_no", "")
@@ -599,18 +602,29 @@ async def _refund_wechat_order(
data = _parse_wechat_result(result)
if code == 200 and data.get('status') == 'SUCCESS':
logger.info(f"WeChat refund succeeded: order_no={order.order_no}")
return {"success": True, "refund_id": data.get('refund_id')}
else:
logger.error(
f"WeChat refund failed: order_no={order.order_no}, "
f"code={code}, result={result}"
)
return {
"success": False,
"message": f"微信退款失败: code={code}, {data.get('code', '')}"
}
# 微信退款是异步的,PROCESSING是正常状态,表示退款已受理
if code == 200:
status = data.get('status')
if status in ('SUCCESS', 'PROCESSING', 'REFUNDCLOSE'):
logger.info(
f"WeChat refund initiated: order_no={order.order_no}, "
f"status={status}, refund_id={data.get('refund_id')}"
)
return {
"success": True,
"refund_id": data.get('refund_id'),
"status": status,
"message": "退款申请已提交,等待微信处理"
}
logger.error(
f"WeChat refund failed: order_no={order.order_no}, "
f"code={code}, result={result}"
)
return {
"success": False,
"message": f"微信退款失败: code={code}, {data.get('message', '')}"
}
except Exception as e:
logger.exception(f"WeChat refund exception: order_no={order.order_no}")
return {"success": False, "message": f"微信退款异常: {str(e)}"}
@@ -656,7 +670,7 @@ def _create_alipay_order(order: PaymentOrder, db_configs: dict[str, str]) -> str
model = AlipayTradePrecreateModel()
model.out_trade_no = order.order_no
model.total_amount = f"{order.amount:.2f}"
model.subject = f"充值订单 {order.order_no}"
model.subject = f"充值积分{order.credits}订单 {order.order_no}"
model.product_code = "QR_CODE_OFFLINE"
body_parts = []