diff --git a/backend/app/api/endpoints/finance.py b/backend/app/api/endpoints/finance.py index 7ee069f..1581876 100644 --- a/backend/app/api/endpoints/finance.py +++ b/backend/app/api/endpoints/finance.py @@ -85,42 +85,6 @@ def update_order_status(order_no: str, body: dict = Body(...)): db.close() -@router.post("/orders/{order_no}/refund") -def request_refund(order_no: str, body: dict = Body(...)): - try: - data = finance_service.request_refund( - order_no, - reason=str(body.get("reason") or "").strip(), - operator=str(body.get("operator") or "后台管理员").strip(), - ) - return ApiResponse(data=data, message="退款申请已提交") - except FinanceServiceError as exc: - _raise(exc) - - -@router.get("/refunds") -def refunds( - page: int = Query(1, ge=1), - page_size: int = Query(20, ge=1, le=100), - status: str = Query(""), -): - db = _session() - try: - total, items = finance_service.list_refunds(db, page=page, page_size=page_size, status=status) - return ApiResponse(data={"total": total, "page": page, "page_size": page_size, "items": items}) - finally: - db.close() - - -@router.post("/refunds/{refund_no}/confirm") -def confirm_refund(refund_no: str, body: dict = Body(...)): - try: - data = finance_service.confirm_refund(refund_no, body) - return ApiResponse(data=data, message="退款结果已登记") - except FinanceServiceError as exc: - _raise(exc) - - @router.get("/invoices") def invoices( page: int = Query(1, ge=1), diff --git a/digital-avatar-app/backend/routers/tokens.py b/digital-avatar-app/backend/routers/tokens.py index 6255828..4efa01d 100644 --- a/digital-avatar-app/backend/routers/tokens.py +++ b/digital-avatar-app/backend/routers/tokens.py @@ -419,7 +419,6 @@ def charge_via_huihui_org(payload: dict = Body(...), authorization: str = Header scene = str(payload.get("payScene") or "APP").upper() if scene not in PAYMENT_SCENES: return fail("支付场景不正确", 400) - pay_type = 6 if scene == "LITE" else (1 if method == "wechat" else 2) if scene == "LITE" and method != "wechat": return fail("微信小程序仅支持微信支付", 400) cents = _price_cents(plan.price) @@ -427,7 +426,7 @@ def charge_via_huihui_org(payload: dict = Body(...), authorization: str = Header result = HuihuiOrgPaymentClient().create_order( token=user.huihui_token, user_id=user.huihui_user_id, name=user.nickname, phone=user.phone, avatar=user.avatar_url, - amount=f"{cents / 100:.2f}", pay_type=pay_type, + amount=f"{cents / 100:.2f}", ) except HuihuiPaymentError as exc: return fail(str(exc), 502) @@ -445,7 +444,10 @@ def charge_via_huihui_org(payload: dict = Body(...), authorization: str = Header ) db.add(order) db.commit() - return ok(_payment_payload(order, get_or_create_account(db, user.id))) + result = _payment_payload(order, get_or_create_account(db, user.id)) + if "fat-open.99hui.com" in os.getenv("HUIHUI_ORG_BASE_URL", ""): + result["checkoutToken"] = user.huihui_token + return ok(result) @router.get("/token/payment/{order_id}") @@ -457,27 +459,7 @@ def payment_status(order_id: str, authorization: str = Header(None), db: Session ).first() if not order: return fail("支付订单不存在", 404) - if order.provider == "huihui_org" and order.status == "pending": - try: - details = HuihuiOrgPaymentClient().get_order( - token=user.huihui_token, user_id=user.huihui_user_id, - order_no=order.provider_order_no, - ) - status = int(details.get("payStatus") or 0) - if (str(details.get("orderNo") or "") == order.provider_order_no - and str(details.get("userId") or "") == user.huihui_user_id - and int(details.get("chargeType") or 0) == 9 - and _callback_amount_cents({"chargeAmount": details.get("chargeAmount")}) == order.price_cents): - order.provider_status = str(status) - if status in (2, 3, 4): - _settle_paid_order(db, order, provider_status=f"ORG_{status}", - transaction_no=order.provider_order_no) - elif status == 5: - order.status = "closed" - db.commit() - db.refresh(order) - except (HuihuiPaymentError, TypeError, ValueError): - pass # 查询失败时保持待支付,不将未经核对的结果入账。 + # 会会组织支付以回调为准;查询此接口只返回本地订单,不向会会轮询查单。 if order.provider == "wechat_virtual" and order.status == "pending" and user.wechat_mp_openid: try: provider_data = query_wechat_virtual_order( diff --git a/digital-avatar-app/backend/services/huihui_org_payment.py b/digital-avatar-app/backend/services/huihui_org_payment.py index 3296a1c..c981b6f 100644 --- a/digital-avatar-app/backend/services/huihui_org_payment.py +++ b/digital-avatar-app/backend/services/huihui_org_payment.py @@ -36,8 +36,8 @@ class HuihuiOrgPaymentClient(HuihuiPaymentClient): return data def create_order(self, *, token: str, user_id: str, name: str, phone: str, - avatar: str, amount: str, pay_type: int) -> dict: - body = {"chargeAmount": float(amount), "payType": pay_type, + avatar: str, amount: str) -> dict: + body = {"chargeAmount": float(amount), "commodityName": "数字分身积分充值", "userId": user_id, "name": name or "", "phoneNumber": phone or "", "avatar": avatar or ""} return self._request("POST", "/order/tokenRecharge", token=token, user_id=user_id, body=body) diff --git a/digital-avatar-app/src/api/index.ts b/digital-avatar-app/src/api/index.ts index 74d87cb..0901ecf 100644 --- a/digital-avatar-app/src/api/index.ts +++ b/digital-avatar-app/src/api/index.ts @@ -158,6 +158,7 @@ export interface TokenPaymentOrder { status: 'pending' | 'paid' | 'failed' | 'closed' | 'refunded' provider: 'huihui' | 'wechat_virtual' | 'huihui_org' providerOrderNo?: string + checkoutToken?: string providerStatus: string payMessage: string failureReason: string diff --git a/digital-avatar-app/src/views/TokenCharge.vue b/digital-avatar-app/src/views/TokenCharge.vue index d0909ae..a664d34 100644 --- a/digital-avatar-app/src/views/TokenCharge.vue +++ b/digital-avatar-app/src/views/TokenCharge.vue @@ -45,8 +45,8 @@