给所有支付接口加上了支付宝

This commit is contained in:
2026-07-09 22:06:46 +08:00
parent 914e8c70f2
commit 581295443a
11 changed files with 611 additions and 127 deletions

View File

@@ -131,13 +131,6 @@ class FaKuanPayView(APIView):
from jituan.services.club_user import get_payment_openid
from products.czjilu_types import CZJILU_LEIXING_FAKUAN, penalty_cz_shuoming
pay_openid, _ = get_payment_openid(request)
if not pay_openid:
return Response({
'code': 400,
'message': '用户openid不存在无法发起微信支付',
}, status=status.HTTP_400_BAD_REQUEST)
chongzhi_jilu = Czjilu.query.create(
dingdan_id=dingdanid,
zhuangtai=9,
@@ -148,20 +141,46 @@ class FaKuanPayView(APIView):
club_id=penalty_cz_club_id(fadan),
)
try:
pay_params = self.generate_wechat_pay_params(
dingdanid=dingdanid,
jine=jine,
openid=pay_openid,
pay_type='fakuan'
)
except Exception as e:
chongzhi_jilu.delete()
logger.error(f"生成微信支付参数失败: {str(e)}")
return Response({
'code': 500,
'message': f'支付参数生成失败: {str(e)}'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
# 生成支付参数(支持支付宝/微信)
pay_method = (request.data.get('pay_method') or request.data.get('payMethod') or 'wechat').lower()
if pay_method == 'alipay':
try:
from jituan.services.alipay_pay import generate_alipay_czjilu_pay_params
pay_params = generate_alipay_czjilu_pay_params(
dingdanid=dingdanid,
jine=jine,
subject=settings.FAKUAN_PAY_DESCRIPTION,
club_id=penalty_cz_club_id(fadan),
)
except Exception as e:
chongzhi_jilu.delete()
logger.error(f"生成支付宝支付参数失败: {str(e)}")
return Response({
'code': 500,
'message': f'支付参数生成失败: {str(e)}'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
else:
pay_openid, _ = get_payment_openid(request)
if not pay_openid:
chongzhi_jilu.delete()
return Response({
'code': 400,
'message': '用户openid不存在无法发起微信支付',
}, status=status.HTTP_400_BAD_REQUEST)
try:
pay_params = self.generate_wechat_pay_params(
dingdanid=dingdanid,
jine=jine,
openid=pay_openid,
pay_type='fakuan'
)
except Exception as e:
chongzhi_jilu.delete()
logger.error(f"生成微信支付参数失败: {str(e)}")
return Response({
'code': 500,
'message': f'支付参数生成失败: {str(e)}'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return Response({
'code': 200,
@@ -670,25 +689,45 @@ class KaohePayView(APIView):
attach_str = json.dumps({'oid': dingdanid}, ensure_ascii=False)
logger.info(f"attach内容: {attach_str},长度: {len(attach_str.encode('utf-8'))}字节")
# 11. 生成微信支付参数
try:
pay_params = self.generate_wechat_pay_params(
dingdanid=dingdanid,
jine=float(fee),
openid=user.OpenID,
attach=attach_str,
pay_type='kaohe'
)
logger.info(f"微信支付参数生成成功: {dingdanid}")
except Exception as e:
order.delete() # 下单失败,删除订单记录
# 同时删除临时表记录
# 11. 生成支付参数(支持支付宝/微信)
pay_method = (request.data.get('pay_method') or request.data.get('payMethod') or 'wechat').lower()
if pay_method == 'alipay':
try:
KaohePayTemp.query.filter(dingdan_id=dingdanid).delete()
except Exception as del_e:
logger.error(f"删除临时表记录失败: {str(del_e)}")
logger.error(f"生成微信支付参数失败: {str(e)}", exc_info=True)
return Response({'code': 500, 'message': f'支付参数生成失败: {str(e)}'})
from jituan.services.alipay_pay import generate_alipay_czjilu_pay_params
pay_params = generate_alipay_czjilu_pay_params(
dingdanid=dingdanid,
jine=float(fee),
subject=settings.KAOHE_PAY_DESCRIPTION,
club_id=resolve_club_id_for_write(request, user),
)
logger.info(f"支付宝支付参数生成成功: {dingdanid}")
except Exception as e:
order.delete()
try:
KaohePayTemp.query.filter(dingdan_id=dingdanid).delete()
except Exception as del_e:
logger.error(f"删除临时表记录失败: {str(del_e)}")
logger.error(f"生成支付宝支付参数失败: {str(e)}", exc_info=True)
return Response({'code': 500, 'message': f'支付参数生成失败: {str(e)}'})
else:
try:
pay_params = self.generate_wechat_pay_params(
dingdanid=dingdanid,
jine=float(fee),
openid=user.OpenID,
attach=attach_str,
pay_type='kaohe'
)
logger.info(f"微信支付参数生成成功: {dingdanid}")
except Exception as e:
order.delete() # 下单失败,删除订单记录
# 同时删除临时表记录
try:
KaohePayTemp.query.filter(dingdan_id=dingdanid).delete()
except Exception as del_e:
logger.error(f"删除临时表记录失败: {str(del_e)}")
logger.error(f"生成微信支付参数失败: {str(e)}", exc_info=True)
return Response({'code': 500, 'message': f'支付参数生成失败: {str(e)}'})
return Response({
'code': 200,