From d342c4b818eaacc0c167f14902682185dc7a2773 Mon Sep 17 00:00:00 2001 From: XingQue Date: Sat, 8 Aug 2026 20:53:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Native=E4=BA=8C=E7=BB=B4=E7=A0=81?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=AE=98=E6=96=B9weixin=E7=A0=81=EF=BC=9B?= =?UTF-8?q?=E6=9C=AC=E6=9C=BA=E6=94=B9=E8=B5=B0JSAPI?= 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 | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/jituan/services/wechat_native_pay.py b/jituan/services/wechat_native_pay.py index c6b3504..7f3696d 100644 --- a/jituan/services/wechat_native_pay.py +++ b/jituan/services/wechat_native_pay.py @@ -25,31 +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: - """双轨: - - qr_image:HTTPS 中转页(绕开「相册不支持识别付款码」) - - qr_code:官方 weixin://(复制链接 / 中转页「立即支付」按钮) - 微信规定:扫一扫从相册识别 weixin://wxpay 付款码会被安全拦截,无商户可关。 +def _native_pay_response(code_url: str) -> dict: + """二维码直接编码官方 weixin://wxpay/bizpayurl(供另一台手机扫,直接出密码)。 + 本机相册识别付款码会被微信官方拦截,无法伪装;本机付款走小程序 JSAPI。 """ from jituan.services.alipay_pay import qr_link_to_base64 - bridge = build_native_bridge_url(dingdanid) return { 'qr_code': code_url, - 'qr_image': qr_link_to_base64(bridge), - 'bridge_url': bridge, + 'qr_image': qr_link_to_base64(code_url), 'pay_method': PAY_METHOD_WECHAT_NATIVE, } @@ -84,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( @@ -148,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)