Files
server-core/wechatpayv3/smartguide.py
T
Pine f1147dced3 feat(pay): 微信支付V3子应用与算力充值
- app/pay 独立支付子应用(config/wxpay/models/repository/service/routers),便于后期拆分微服务
- 充值订单表 0026_compute_recharge;套餐支持折扣(discount)与上架开关(enabled),DB system_configs 优先、env 兜底
- 统一小程序支付:桌面端出小程序码→扫码进小程序确认页按 openid 发起 JSAPI→回调幂等到账(引擎 adjust_user_quota+镜像回写)
- 内嵌 wechatpayv3(含 async_),响应验签失败降级告警;新增 aiofiles 依赖

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-30 22:29:44 +08:00

135 lines
5.8 KiB
Python

# -*- coding: utf-8 -*-
from .type import RequestType
def guides_register(self, corpid, store_id, userid, name, mobile, qr_code, avatar, group_qrcode=None, sub_mchid=None):
"""服务人员注册
:param corpid: 企业ID, 示例值:'1234567890'
:param store_id: 门店ID, 示例值:12345678
:param userid: 企业微信的员工ID, 示例值:'robert'
:param name: 企业微信的员工姓名, 示例值:'robert'
:param mobile: 手机号码, 示例值:'13900000000'
:param qr_code: 员工个人二维码, 示例值:'https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx'
:param avatar: 头像URL, 示例值:'http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0'
:param group_qrcode: 群二维码URL, 示例值:'http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0'
:param sub_mchid: (服务商模式)子商户的商户号,由微信支付生成并下发。示例值:'1900000109'
"""
params = {}
if corpid:
params.update({'corpid': corpid})
else:
raise Exception('corpid is not assigned.')
if store_id:
params.update({'store_id': store_id})
else:
raise Exception('store_id is not assigned.')
if userid:
params.update({'userid': userid})
else:
raise Exception('userid is not assigned.')
if name:
params.update({'name': self._core.encrypt(name)})
else:
raise Exception('name is not assigned')
if mobile:
params.update({'mobile': self._core.encrypt(mobile)})
else:
raise Exception('mobile is not assigned.')
if qr_code:
params.update({'qr_code': qr_code})
else:
raise Exception('qr_code is not assigned.')
if avatar:
params.update({'avatar': avatar})
else:
raise Exception('avatar is not assigned.')
if group_qrcode:
params.update({'group_qrcode': group_qrcode})
if self._partner_mode and sub_mchid:
params.update({'sub_mchid': sub_mchid})
path = '/v3/smartguide/guides'
return self._core.request(path, method=RequestType.POST, data=params, cipher_data=True)
def guides_assign(self, guide_id, out_trade_no, sub_mchid=None):
"""服务人员分配
:param guide_id: 服务人员ID,示例值:'LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic'
:param out_trade_no: 商户订单号, 示例值:'20150806125346'
:param sub_mchid: (服务商模式)子商户的商户号,由微信支付生成并下发。示例值:'1900000109'
"""
params = {}
if out_trade_no:
params.update({'out_trade_no': out_trade_no})
else:
raise Exception('out_trade_no is not assigned.')
if self._partner_mode and sub_mchid:
params.update({'sub_mchid': sub_mchid})
if guide_id:
path = '/v3/smartguide/guides/%s/assign' % guide_id
else:
raise Exception('guide_id is not assigned.')
return self._core.request(path, method=RequestType.POST, data=params)
def guides_query(self, store_id, userid=None, mobile=None, work_id=None, limit=None, offset=0, sub_mchid=None):
"""服务人员查询
:params store_id: 门店ID, 示例值:1234
:params userid: 企业微信的员工ID, 示例值:'robert'
:params mobile: 手机号码, 示例值:'13900000000'
:params work_id: 工号, 示例值:'robert'
:params limit: 最大资源条数, 示例值:5
:params offset: 请求资源起始位置, 示例值:0
:param sub_mchid: (服务商模式)子商户的商户号,由微信支付生成并下发。示例值:'1900000109'
"""
if not store_id:
raise Exception('store_id is not assigned.')
path = '/v3/smartguide/guides?store_id=%s' % store_id
if userid:
path = '%s&userid=%s' % (path, userid)
cipher_data = False
if mobile:
path = '%s&mobile=%s' % (path, self._core.encrypt(mobile))
cipher_data = True
if work_id:
path = '%s&work_id=%s' % (path, work_id)
if limit:
path = '%s&limit=%s' % (path, limit)
if offset:
path = '%s&offset=%s' % (path, offset)
if self._partner_mode and sub_mchid:
path = '%s&sub_mchid=%s' % (path, sub_mchid)
return self._core.request(path, cipher_data=cipher_data)
def guides_update(self, guide_id, name=None, mobile=None, qr_code=None, avatar=None, group_qrcode=None, sub_mchid=None):
"""服务人员信息更新
:params guide_id: 服务人员ID, 示例值:'LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic'
:params name: 服务人员姓名, 示例值:'robert'
:params mobile: 服务人员手机号码, 示例值:'13900000000'
:params qr_code: 服务人员二维码URL, 示例值:'https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx'
:params avatar: 服务人员头像URL, 示例值:'http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0'
:params group_qrcode: 群二维码URL, 示例值:'http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0'
:param sub_mchid: (服务商模式)子商户的商户号,由微信支付生成并下发。示例值:'1900000109'
"""
params = {}
if not guide_id:
raise Exception('guide_id is not assigned.')
path = '/v3/smartguide/guides/%s' % guide_id
cipher_data = False
if name:
params.update({'name': self._core.encrypt(name)})
cipher_data = True
if mobile:
params.update({'mobile': self._core.encrypt(mobile)})
cipher_data = True
if qr_code:
params.update({'qr_code': qr_code})
if avatar:
params.update({'avatar': avatar})
if group_qrcode:
params.update({'group_qrcode': group_qrcode})
if self._partner_mode and sub_mchid:
params.update({'sub_mchid': sub_mchid})
return self._core.request(path, method=RequestType.PATCH, data=params, cipher_data=cipher_data)