feat: UFO H5 服务号 OAuth 登录与同商户公众号 JSAPI 支付
This commit is contained in:
@@ -990,6 +990,7 @@ class CreateOrderView(APIView):
|
||||
club_id=club_id,
|
||||
)
|
||||
else:
|
||||
from jituan.services.club_user import get_pay_app_source
|
||||
pay_params = self.generate_wechat_pay_params(
|
||||
dingdanid=dingdanid,
|
||||
jine=shangpin_jiage,
|
||||
@@ -997,6 +998,7 @@ class CreateOrderView(APIView):
|
||||
user_ip=self.get_client_ip(request),
|
||||
openid=user_openid,
|
||||
club_id=club_id,
|
||||
app_source=get_pay_app_source(request),
|
||||
)
|
||||
|
||||
if not pay_params:
|
||||
@@ -1029,37 +1031,42 @@ class CreateOrderView(APIView):
|
||||
ip = request.META.get('REMOTE_ADDR')
|
||||
return ip
|
||||
|
||||
def generate_wechat_pay_params(self, dingdanid, jine, beizhu, user_ip, openid, club_id=None):
|
||||
def generate_wechat_pay_params(self, dingdanid, jine, beizhu, user_ip, openid, club_id=None, app_source='mini'):
|
||||
"""
|
||||
调用微信支付统一下单接口,生成支付参数
|
||||
调用微信支付统一下单接口,生成支付参数。
|
||||
app_source=official/h5:用服务号 AppID + 同商户号(H5);跳过付呗小程序通道。
|
||||
"""
|
||||
try:
|
||||
from jituan.constants import FUBEI_BIZ_ORDER
|
||||
from jituan.services.mini_pay_router import maybe_create_fubei_jsapi_params
|
||||
from jituan.services.wechat_pay import get_wechat_v2_config
|
||||
pay_cfg = get_wechat_v2_config(club_id)
|
||||
source = (app_source or 'mini').strip().lower()
|
||||
pay_cfg = get_wechat_v2_config(club_id, app_source=source)
|
||||
APPID = pay_cfg['appid']
|
||||
MCHID = pay_cfg['mch_id']
|
||||
KEY = pay_cfg['key']
|
||||
NOTIFY_URL = getattr(settings, 'WEIXIN_NOTIFY_URL', '')
|
||||
|
||||
fb_params = maybe_create_fubei_jsapi_params(
|
||||
club_id=club_id,
|
||||
out_trade_no=dingdanid,
|
||||
amount_yuan=jine,
|
||||
body=beizhu,
|
||||
openid=openid,
|
||||
notify_url=NOTIFY_URL,
|
||||
biz_type=FUBEI_BIZ_ORDER,
|
||||
)
|
||||
# H5/服务号:复用同一商户号走微信直连 JSAPI,不走付呗小程序通道
|
||||
fb_params = None
|
||||
if source not in ('official', 'h5', 'oa'):
|
||||
fb_params = maybe_create_fubei_jsapi_params(
|
||||
club_id=club_id,
|
||||
out_trade_no=dingdanid,
|
||||
amount_yuan=jine,
|
||||
body=beizhu,
|
||||
openid=openid,
|
||||
notify_url=NOTIFY_URL,
|
||||
biz_type=FUBEI_BIZ_ORDER,
|
||||
)
|
||||
if fb_params is not None:
|
||||
return fb_params
|
||||
|
||||
# NOAUTH 诊断日志:打印生效的 club_id / appid / mchid / openid 指纹
|
||||
_oid_preview = (openid or '')[:6] + '...' + (openid or '')[-4:] if (openid or '') else '(empty)'
|
||||
logger.warning(
|
||||
"[WX_PAY_NOAUTH_DIAG] dingdanid=%s club_id=%s appid=%s mch_id=%s openid_preview=%s openid_len=%d",
|
||||
dingdanid, club_id, APPID, MCHID, _oid_preview, len(openid or ''),
|
||||
"[WX_PAY_NOAUTH_DIAG] dingdanid=%s club_id=%s app_source=%s appid=%s mch_id=%s openid_preview=%s openid_len=%d",
|
||||
dingdanid, club_id, source, APPID, MCHID, _oid_preview, len(openid or ''),
|
||||
)
|
||||
|
||||
if not all([APPID, MCHID, KEY, NOTIFY_URL]):
|
||||
@@ -1308,6 +1315,7 @@ class ContinuePayView(APIView):
|
||||
club_id=club_id,
|
||||
)
|
||||
else:
|
||||
from jituan.services.club_user import get_pay_app_source
|
||||
pay_params = helper.generate_wechat_pay_params(
|
||||
dingdanid=dingdanid,
|
||||
jine=jine,
|
||||
@@ -1315,6 +1323,7 @@ class ContinuePayView(APIView):
|
||||
user_ip=helper.get_client_ip(request),
|
||||
openid=user_openid,
|
||||
club_id=club_id,
|
||||
app_source=get_pay_app_source(request),
|
||||
)
|
||||
except Exception as pay_exc:
|
||||
err_text = str(pay_exc)
|
||||
|
||||
Reference in New Issue
Block a user