商户进件
特约商户进件
基础支付
JSAPI支付
APP支付
H5支付
Native支付
小程序支付
合单支付
付款码支付
经营能力
支付即服务
点金计划
行业方案
平台收付通(商户进件)
平台收付通(普通支付)
平台收付通(合单支付)
平台收付通(分账)
平台收付通(补差)
平台收付通(退款)
平台收付通(余额查询)
平台收付通(商户提现)
平台收付通(注销申请)
平台收付通(注销后提现)
平台收付通(跨境付款)
平台收付通(下载账单)
智慧商圈
微信支付分停车服务
电子发票
营销工具
代金券
商家券
委托营销
支付有礼
小程序发券插件
H5发券
图片上传(营销专用)
现金红包
资金应用
分账
连锁品牌分账
风险合规
商户开户意愿确认
消费者投诉2.0
商户违规通知回调
其他能力
图片上传
视频上传
微信支付平台证书

商户平台处置记录回调通知

最新更新时间:2021.11.17 版本说明


当子商户被平台风险处置时,推送子商户违规处理记录和交易拦截记录给相应的服务商、渠道商、从业机构。

注意:

• 同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理,则再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。


特别提醒:商户系统对于开启结果通知的内容一定要做签名验证,并校验通知的信息是否与商户侧的信息一致,防止数据泄露导致出现“假通知”。

接口说明

适用对象:服务商 渠道商 从业机构

请求URL:该链接是通过【创建商户违规通知回调地址】中提交的参数url设置,如果链接无法访问,商户将无法接收到微信通知。

通知规则

当子商户被平台风险处置时,微信后台会把子商户违规处理记录和交易拦截记录推送给相应的服务商、渠道商、从业机构,商户需要接收处理该消息,并返回应答。

对后台通知交互时,如果微信收到应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。(通知频率为1s/15s/15s/30s/180s/600s/1200s/1800s,按照这个频率通知,之后的间隔都是1800s,最多重试48个小时)

通知报文

商户平台处置记录通知是以POST 方法访问商户设置的通知url,通知的数据以JSON 格式通过请求主体(BODY)传输。通知的数据包括了加密的支付结果详情。


下面详细描述对通知数据进行解密的流程:

  1. 1、用商户平台上设置的APIv3密钥【微信服务商平台(https://pay.weixin.qq.com/partner/public/home)—>账户设置—>API安全—>设置APIv3密钥】,记为 key;
  2. 2、针对resource.algorithm中描述的算法(目前为AEAD_AES_256_GCM),取得对应的参数nonce和associated_data;
  3. 3、使用key、nonce和associated_data,对数据密文resource.ciphertext进行解密,得到JSON形式的资源对象;

注: AEAD_AES_256_GCM算法的接口细节,请参考rfc5116。微信支付使用的密钥key长度为32个字节,随机串nonce长度12个字节,associated_data长度小于16个字节并可能为空。

通知参数

参数名 变量 类型[长度限制] 必填 描述
通知ID id string[1,32] 通知的唯一ID
示例值:EV-2018022511223320873
通知创建时间 create_time string[1,32] 通知创建的时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示北京时间2015年05月20日13点29分35秒。
示例值:2015-05-20T13:29:35+08:00
通知类型 event_type string[1,32] 通知的类型,投诉事件通知的类型,具体如 下:
VIOLATION.PUNISH:处罚
VIOLATION.INTERCEPT:拦截
VIOLATION.APPEAL:申诉
示例值:VIOLATION.PUNISH
通知数据类型 resource_type string[1,32] 通知的资源数据类型,支付成功通知为encrypt-resource
示例值:encrypt-resource
回调摘要 summary string[1,64] 回调摘要
示例值:产生新投诉
+通知数据 resource object 通知资源数据
json格式,见示例
参数名 变量 类型[长度限制] 必填 描述
加密算法类型 algorithm string[1,32] 对开启结果数据进行加密的加密算法,目前只支持AEAD_AES_256_GCM
示例值:AEAD_AES_256_GCM
数据密文 ciphertext string[1,1048576] Base64编码后的开启/停用结果数据密文
示例值:sadsadsadsad
原始回调类型 original_type string[1,64] 原始回调类型,为violation
示例值:violation
附加数据 associated_data string[1,16] 附加数据
示例值:fdasfwqewlkja484w
随机串 nonce string[1,16] 加密使用的随机串
示例值:fdasflkja484w

通知签名

加密不能保证通知请求来自微信。微信会对发送给商户的通知进行签名,并将签名值放在通知的HTTP头Wechatpay-Signature。商户应当验证签名,以确认请求来自微信,而不是其他的第三方。签名验证的算法请参考 《微信支付API v3签名验证》

回调示例

商户平台处置记录通知


{
    "id":"EV-2018022511223320873",
    "create_time":"20180225112233",
    "resource_type":"encrypt-resource",
    "event_type":"VIOLATION.PUNISH",
    "summary":"产生新投诉",
    "resource" : {
        "algorithm":"AEAD_AES_256_GCM",
        "original_type": "violation",
        "ciphertext": "...",
        "nonce": "...",
        "associated_data": ""
    }
}

商户对resource对象进行解密后,得到的资源对象示例


{
  "sub_mchid": "1900009231",
  "company_name":"财付通支付科技有限公司",
  "record_id":"200201820200101080076610000",
  "punish_plan":"关闭支付权限",
  "punish_time":"2015-05-20T13:29:35+08:00",
  "punish_description":"利用特殊行业违规经营,加重处罚",
  "risk_type":"ONE_YUAN_PURCHASES",
  "risk_description	":"涉嫌一元购"
}

通知参数

参数名 变量 类型[长度限制] 必填 描述
子商户号 sub_mchid string[1, 32] 该商户平台处置记录对应的商户号
示例值:1900009231
子商户公司名称 company_name string[1, 64] 子商户公司名称
示例值:财付通支付科技有限公司
商户违约处理通知ID record_id string[1, 128] 微信支付对违约商户处理通知的唯一标识,可用于去重
示例值:200201820200101080076610000
处罚方案 punish_plan string[1, 2048] 微信支付对违约商户的具体处罚方案,可根据具体的处罚方案指引商户登录商户平台/商家助手小程序进行申诉/相关操作,使用时请留意该值为处罚方法的文本内容,并非枚举值。
示例值:关闭支付权限
处罚时间 punish_time string[1, 64] 微信支付对违约商户的处置时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示北京时间2015年05月20日13点29分35秒。
示例值:2015-05-20T13:29:35+08:00
处罚方案描述信息 punish_description string[1, 2048] 微信支付对违约商户处罚方案的详细描述信息,补充处罚方案的相关影响。
示例值:利用特殊行业违规经营,加重处罚
风险类型 risk_type string[1, 128] 微信支付对违约商户定义的风险类型,枚举值:
ONE_YUAN_PURCHASES:涉嫌一元购
MULTI_LEVEL_DISTRIBUTION_REBATE:涉嫌多级分销返利
PROHIBITED_BUSINESS_CATEGORIES:涉嫌我司未开放类目
CASH_ADVANCE_VIA_CREDIT_CARD:涉嫌信用卡套现
INDUCING_USERS_TO_MAKE_PAYMENTS:涉嫌诱导支付
FRAUD:涉嫌欺诈
MALICIOUS_FAN_COUNT_BOOSTING:涉嫌恶意吸粉
CROSS_CATEGORY_ACTIVITIES:涉嫌跨类目
CROSS_CATEGORY_BUSINESS:涉嫌跨类目经营
GAMBLING:涉嫌赌博
LEWD_CONTENT:涉嫌色情
UNLICENSED_PAYMENT_AND_SETTLEMENT_BUSINESS:涉嫌无证经营支付结算业务
INVESTMENT:涉嫌投资理财
TRANSACTION_DISPUTE:涉嫌交易纠纷
CROSS_BORDER_USE_OF_DOMESTIC_PAYMENT_API:涉嫌境内支付接口跨境使用
OVERSEAS_ACTIVITIES_OUTSIDE_THE_BUSINESS_SCOPE_APPROVED_BY_REGULATORY_AUTHORITIES:涉嫌境外超监管批复范围经营
UNUSUAL_TRANSACTION:涉嫌交易异常
UNLICENSED_BUSINESS:涉嫌无资质经营
WEALTH_INVESTMENT:涉嫌投资理财
AFFILIATED_TO_A_VIOLATING_ENTITY:涉嫌关联违规主体等异常风险
INVOLVED_IN_A_JUDICIAL_CASE:涉嫌司法案件
INCORRECT_INFORMATION_SUBMITTED:涉嫌资料异常
APPEAL_SUCCESSFUL:申诉成功
REPORTED_BY_OTHERS:涉嫌他人投诉举报
VIOLATING_SMART_CATERING_ACTIVITIES:涉嫌智慧餐饮活动违规
MORE_THAN_ONE_MERCHANT_UNDER_A_SINGLE_MERCHANT_ID:涉嫌同一商户号下挂多个商户
CROSS_REGION_USE_OF_INTERNATIONAL_PAYMENT_API:涉嫌境外支付接口跨区域
UNUSUAL_REAL_TIME_TRANSACTION:涉嫌实时交易异常
UNACCEPTABLE_DOCUMENTS:涉嫌资料不合格
LARGE_AMOUNT_TRANSACTION:涉嫌大额交易
ALL_MERCHANTS_HAVE_CONFIRMED_THE_WILLINGNESS_TO_OPEN_AN_ACCOUNT:无交易商户未确认开户意愿
UNCONFIRMED_WILLINGNESS_TO_OPEN_AN_ACCOUNT:未确认开户意愿
INACTIVE_TRANSACTION:交易停滞
OTHER_UNUSUAL_ACTIVITIES:涉嫌其它异常
示例值:ONE_YUAN_PURCHASES
风险描述 risk_description string[1, 2048] 微信支付对违约商户定义的风险类型枚举值对应的中文描述
示例值:涉嫌一元购

通知应答

接收成功:HTTP应答状态码需返回200或204,无需返回应答报文。

接收失败:HTTP应答状态码需返回5XX或4XX,同时需返回应答报文,格式如下:

参数名 变量 类型[长度限制] 必填 描述
返回状态码 code string[1,32] 错误码,SUCCESS为接收成功,其他错误码为失败。
示例值:FAIL
返回信息 message string[1,64] 返回信息,如非空,为错误原因。
示例值:失败


{  
    "code": "FAIL",
    "message": "失败"
}


技术咨询

文档反馈