# -*- coding: utf-8 -*- # !/usr/bin/env python from enum import Enum from apilib.systypes import StrEnum, IntEnum class DescStrEnum(Enum): @classmethod def choices(cls): result = list() for _ in cls.__members__.values(): if not _.support: continue result.append(_.code) return result @classmethod def to_list(cls): return [ {"code": _.code, "text": _.text, "support": _.support} for _ in cls.__members__.values() ] def __init__(self, code, text, support): self.code = code self.text = text self.support = support def __eq__(self, other): if isinstance(other, DescStrEnum): return self.code == other.code return self.code == other def __ne__(self, other): return not self.__eq__(other) class WechatSubjectType(DescStrEnum): """ 商户的类型 """ SUBJECT_TYPE_ENTERPRISE = "SUBJECT_TYPE_ENTERPRISE", u"企业", True SUBJECT_TYPE_INSTITUTIONS_CLONED = "SUBJECT_TYPE_INSTITUTIONS_CLONED", u"事业单位/政府单位", False SUBJECT_TYPE_MICRO = "SUBJECT_TYPE_MICRO", u"个人商户", True SUBJECT_TYPE_INDIVIDUAL = "SUBJECT_TYPE_INDIVIDUAL", u"个体工商户", False SUBJECT_TYPE_OTHERS = "SUBJECT_TYPE_OTHERS", u"其他组织", False class IdentificationType(DescStrEnum): """ 主要任务的证件类型 """ IDENTIFICATION_TYPE_IDCARD = "IDENTIFICATION_TYPE_IDCARD", u"身份证", True IDENTIFICATION_TYPE_OVERSEA_PASSPORT = "IDENTIFICATION_TYPE_OVERSEA_PASSPORT", u"护照(限境外人士)", False IDENTIFICATION_TYPE_HONGKONG_PASSPORT = "IDENTIFICATION_TYPE_HONGKONG_PASSPORT", u"香港居民内地来往通行证", False IDENTIFICATION_TYPE_MACAO_PASSPORT = "IDENTIFICATION_TYPE_MACAO_PASSPORT", u"澳门居民内地来往通行证", False IDENTIFICATION_TYPE_TAIWAN_PASSPORT = "IDENTIFICATION_TYPE_TAIWAN_PASSPORT", u"台湾居民内地来往通行证", False class CertType(DescStrEnum): """ 登记证书可选选项 """ CERTIFICATE_TYPE_2388 = "CERTIFICATE_TYPE_2388", u"事业单位法人证书", True CERTIFICATE_TYPE_2389 = "CERTIFICATE_TYPE_2389", u"统一社会信用代码证书", True CERTIFICATE_TYPE_2390 = "CERTIFICATE_TYPE_2390", u"有偿服务许可证(军队医院适用)", True CERTIFICATE_TYPE_2391 = "CERTIFICATE_TYPE_2391", u"医疗机构执业许可证(军队医院适用)", True CERTIFICATE_TYPE_2392 = "CERTIFICATE_TYPE_2392", u"企业营业执照(挂靠企业的党组织适用)", True CERTIFICATE_TYPE_2393 = "CERTIFICATE_TYPE_2393", u"组织机构代码证(政府机关适用)", True CERTIFICATE_TYPE_2394 = "CERTIFICATE_TYPE_2394", u"社会团体法人登记证书", True CERTIFICATE_TYPE_2395 = "CERTIFICATE_TYPE_2395", u"民办非企业单位登记证书", True CERTIFICATE_TYPE_2396 = "CERTIFICATE_TYPE_2396", u"基金会法人登记证书", True CERTIFICATE_TYPE_2397 = "CERTIFICATE_TYPE_2397", u"慈善组织公开募捐资格证书", True CERTIFICATE_TYPE_2398 = "CERTIFICATE_TYPE_2398", u"农民专业合作社法人营业执照", True CERTIFICATE_TYPE_2399 = "CERTIFICATE_TYPE_2399", u"宗教活动场所登记证", True CERTIFICATE_TYPE_2400 = "CERTIFICATE_TYPE_2400", u"其他证书/批文/证明", True class MicroBizType(DescStrEnum): """ 小微经营类型 """ MICRO_TYPE_STORE = "MICRO_TYPE_STORE", u"门店场所", True MICRO_TYPE_MOBILE = "MICRO_TYPE_MOBILE", u"流动经营/便民服务", False MICRO_TYPE_ONLINE = "MICRO_TYPE_ONLINE", u"线上商品/服务交易", False class ContactType(DescStrEnum): """联系人的类型""" LEGAL = "LEGAL", u"法人", True SUPER = "SUPER", u"经办人", True class COMPANY_TYPE(StrEnum): ENTERPRISE = "E" # 企业性质 开办公司 PERSON_COMPANY = "P" # 个体工商户 类似小商店 NORMAL_PERSON = "N" # 个人商户 自然人 class BLIC_CARD_TYPE(StrEnum): USC = "USC" # 统一社会信用代码 个体工商户 BLI = "BLI" # 普通五类证 企业性质 个体工商户 OCI = "OCI" # 多证合一 企业性质 ID = "ID" # 身份证 自然人专用 class LEP_CARD_TYPE(StrEnum): ID = "ID" # 大陆身份证 PAS = "PAS" # 护照 PASTW = "PASTW" # 台湾通行证 PASHK = "PASHK" # 港澳通行证 class PRIATE_OR_PUBLIC(StrEnum): PRIATE = "0" # 对私 PUBLIC = "1" # 对公 NO_LEG = "3" # 非法人 class SETTLEMENT_PERIOD(StrEnum): NATURAL = "D1" WORKDAY = "T1" class MerchantStatus(IntEnum): """ 我们系统中商户的申请状态 """ # 未申请 未入驻 INIT = 0 # 商户产品开通中 WAITING = 1 # 商户产品开通失败 FAIL = 2 # 商户流程走完 微信尚未提交 中间状态 CONFIRM = 3 # 商户开通成功 SUCCESS = 4 # ---- 新增的状态 ------- # 微信审核中状态 AUTH_WAITING = 5 # 微信审核通过 等待商户确认 AUTH_APPLY_SUCCESS = 6 # 微信审核通过 已经确认 AUTH_SUCCESS = 7 class MerchantLogAction(StrEnum): """ 商户的操作动作 目前要紧的就这四步 """ SUBMIT = "submit" ADD_JD_APP = "addApp" SUBMIT_WECHAT = "submitWechat" SUBMIT_ALI = "submitAli" AUTH_APPLY_SUCCESS = "authApplySuccess" CHANGE_PAY_APP = "changePayApp" FAIL = "fail" class MerchantVersion(StrEnum): SELF_DEVELOPED = "v1.0.0" OPEN_MERCHANT = "v2.0.0" class ProductStatus(IntEnum): """ 京东产品支付的状态 """ INIT = 0 WAITING = 1 FAIL = 2 CONFIRM = 3 SUCCESS = 4 class ProductRateType(StrEnum): """ 京东商户的产品 手续费类型 """ CHANGELESS = "1" # 固定额 PERCENTAGE = "2" # 百分比 PERCENTAGE_LIMIT = "3" # 百分比带上限 class ProductType(StrEnum): """ 京东商户的产品 类型 """ WECHAT = "401" # 微信 ALIPAY = "402" # 支付宝 JD = "403" # 京东支付的 # 单笔交易手续费 单位千分之一 DEFAULT_TRADE_FEE = 6 class SETTLE_STATUS(StrEnum): INIT = "INIT" DOING = "DOING" DONE = "DONE" FAILED = "FAILED" RETURN_BACK = "RETURN_BACK" class MERCHANT_OWNER_ROLE(StrEnum): AGENT = "agent" DEALER = "dealer" # 以下是新的商户相应常量参数 与自研系统不完全一致 OPEN_JD_ERROR = { "invalidProvince": u"地址信息填写错误(省),请仔细核对您的商户地址或公司地址", "invalidCity": u"地址信息填写错误(市),请仔细核对您的商户地址或公司地址", "invalidAddress": u"地址信息填写错误,请仔细核对您的商户地址或公司地址", "invalidIndustry": u"行业无效,请您仔细核对所在行业", "userExist": u"邮箱无效,请核对您的邮箱信息", "invalidIdCard": u"无效的身份证,请校验您的身份证号码或照片", "invalidCardType": u"证件类型无效", "invalidBank": u"无效的银行,请校验您的银行卡号或照片", "invalidAmount": u"金额无效", "settleInfoExist": u"结算信息已经存在,请勿重新申请", "customerFeeExist": u"商户费率信息已经存在,请勿重新提交", "settleInfoNotExist": u"结算信息不存在", "declareNotExist": u"报单不存在", "declareStatusError": "报单状态有误", "uploadFail": "图片上传失败", "shopExist": "店铺已经存在", "uploadUpdateFail": u"图片上传更新失败", "limitAttach": "图片上传超出限制", "createCustomerManagerFail": u"创建商户管理员失败,请与平台联系解决", "activeCustomerFail": u"激活商户失败,请与平台联系解决", "idNumLimit": u"身份证号重复,请更换省份证后重新上传", "idNumInBlacklist": u"身份证在黑名单中,请更换身份证信息", "bankcardNumLimit": u"银行卡重复,请更换银行卡", "bankcardNumInBlacklist": u"银行卡在黑名单中,请更换银行卡信息", "phoneNumLimit": "联系电话重复,请检测联系电话或更换" } class JdOpenMerchantType(StrEnum): COMPANY = "COMPANY" # 企业商户 PERSON = "PERSON" # 个人商户 INDIVIDUALBISS = "INDIVIDUALBISS" # 个体工商户 INSTITUTION = "INSTITUTION" # 事业单位 class JdOpenMerchantStatus(IntEnum): FAIL = -1 # 商户申请失败 WX_FAIL = -2 # 微信实名失败 ALI_FAIL = -2 # 支付宝实名失败 INIT = 0 # 尚未提交资料 SUBMIT = 1 # 资料提交完毕 CUSTOMER = 2 # 商户创建完毕 SETTLE = 3 # 结算创建完毕 SHOP = 4 # 商店创建完毕 ATTACH = 5 # 附件上传完毕 COMPLETE = 6 # 已报单 CONFIRM = 7 # 已报单确认(京东审核中) SUCCESS = 8 # 商户审核成功 AUTH_WAITING = 9 # 微信商户提交资料正在审核中 AUTH_APPLY_SUCCESS = 10 # 微信审核成功 等待用户扫码实名认证 AUTH_SUCCESS = 11 # 微信实名确认完成 ALI_SUCCESS = 10 class JdOpenAccountType(StrEnum): PUBLIC = "PUBLIC" PRIVATE = "PRIVATE" class JdOpenAuditStatus(StrEnum): INIT = "INIT" NOT_PASS = "NOTPASS" OT_AUDIT = "OTAUDIT" PASS = "PASS" WAIT_CHANNEL_AUDIT = "WAITCHANNELAUDIT" class JdOpenProductType(StrEnum): WX = "WX" ALI = "ALIPAY" class AuthStatus(object): """ 微信 阿里的实名状态 """ PASS = "PASS" NO_PASS = "NOPASS" AUDIT = "AUDIT" AUTHED = "AUTHED" ALI_PAY_QR_CODE = "data:image/png;base64,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"