diff --git a/jituan/services/wechat_native_pay.py b/jituan/services/wechat_native_pay.py index 5168f38..c6b3504 100644 --- a/jituan/services/wechat_native_pay.py +++ b/jituan/services/wechat_native_pay.py @@ -25,20 +25,31 @@ 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 _native_pay_response(code_url: str) -> dict: - """二维码必须直接编码官方 code_url(weixin://wxpay/bizpayurl?...), - 微信扫后才能直接弹出付款密码;禁止再套 HTTPS 中转页。 +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 付款码会被安全拦截,无商户可关。 """ 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(code_url), + 'qr_image': qr_link_to_base64(bridge), + 'bridge_url': bridge, 'pay_method': PAY_METHOD_WECHAT_NATIVE, } @@ -73,7 +84,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(cached_url) + return _native_pay_response(dingdanid, cached_url) pay_cfg = get_wechat_v2_config(club_id) log_wechat_v2_pay_diag( @@ -137,4 +148,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(code_url) + return _native_pay_response(dingdanid, code_url) diff --git a/templates/wechat/native_pay.html b/templates/wechat/native_pay.html index 5dba4c2..517d9bb 100644 --- a/templates/wechat/native_pay.html +++ b/templates/wechat/native_pay.html @@ -6,31 +6,31 @@