From be42721fe67d62b829d9bed4b322a7cc34156686 Mon Sep 17 00:00:00 2001 From: XingQue Date: Sat, 8 Aug 2026 20:41:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Native=E4=BA=8C=E7=BB=B4=E7=A0=81?= =?UTF-8?q?=E6=94=B9=E5=9B=9E=E5=AE=98=E6=96=B9weixin=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E5=8F=96=E6=B6=88HTTPS=E4=B8=AD=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- jituan/services/wechat_native_pay.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/jituan/services/wechat_native_pay.py b/jituan/services/wechat_native_pay.py index f4edd4b..5168f38 100644 --- a/jituan/services/wechat_native_pay.py +++ b/jituan/services/wechat_native_pay.py @@ -25,28 +25,20 @@ logger = logging.getLogger(__name__) CACHE_KEY_PREFIX = 'wx_native_code_' CACHE_TTL_SECONDS = 60 * 30 -# 相册扫码友好:二维码图编码 HTTPS 中转页(打开后再跳 weixin://),复制链接仍给官方 code_url -BRIDGE_URL_BASE = 'https://www.abas.asia/hqhd/dingdan/wx-native-pay/' def _cache_key(dingdanid: str) -> str: return f'{CACHE_KEY_PREFIX}{dingdanid}' -def build_native_bridge_url(dingdanid: str) -> str: - from urllib.parse import quote - return f'{BRIDGE_URL_BASE}?out_trade_no={quote(dingdanid, safe="")}' - - -def _native_pay_response(dingdanid: str, code_url: str) -> dict: +def _native_pay_response(code_url: str) -> dict: + """二维码必须直接编码官方 code_url(weixin://wxpay/bizpayurl?...), + 微信扫后才能直接弹出付款密码;禁止再套 HTTPS 中转页。 + """ from jituan.services.alipay_pay import qr_link_to_base64 - bridge = build_native_bridge_url(dingdanid) return { - # 复制支付链接:与同行一致,官方 weixin://wxpay/bizpayurl?... 'qr_code': code_url, - # 展示用二维码:HTTPS 中转,便于微信「扫一扫-相册」识别 - 'qr_image': qr_link_to_base64(bridge), - 'bridge_url': bridge, + 'qr_image': qr_link_to_base64(code_url), 'pay_method': PAY_METHOD_WECHAT_NATIVE, } @@ -81,7 +73,7 @@ def generate_wechat_native_pay_params( '[WX_NATIVE] reuse code_url dingdan=%s club=%s scene=%s', dingdanid, club_id, scene, ) - return _native_pay_response(dingdanid, cached_url) + return _native_pay_response(cached_url) pay_cfg = get_wechat_v2_config(club_id) log_wechat_v2_pay_diag( @@ -145,4 +137,4 @@ def generate_wechat_native_pay_params( '[WX_NATIVE] unifiedorder ok dingdan=%s club=%s mch=%s scene=%s', dingdanid, pay_cfg.get('club_id'), mch_id, scene, ) - return _native_pay_response(dingdanid, code_url) + return _native_pay_response(code_url)