公众号调起签约api
更新时间:2024.12.30应用场景
商户可以通过请求此接口唤起微信委托代扣的页面,页面样例见案例与规范。
用户在微信的页面中完成代扣签约后,微信会同时将签约信息通过异步通知的方式通知给商户后台。如果用户放弃签约或签约失败则不通知。
接口调用请求说明
请求Url | https://api.mch.weixin.qq.com/papay/partner/entrustweb |
---|---|
是否需要证书 | 否 |
请求方式 | GET |
请求参数
字段名 | 字段 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|---|
请求appid | appid | 是 | String(32) | wxcbda96de0b165486 | 服务商商户号绑定的APPID |
商户号 | mch_id | 是 | String(32) | 1200009811 | 服务商商户号 |
特约商户公众账号ID | sub_appid | 否 | String(32) | wxcbda96de0b165489 | 子商户号绑定的服务号的appid(非必填,如需操作,需要服务商在商户平台为子商户绑定) |
特约商户号 | sub_mch_id | 是 | String(32) | 1900000109 | 子商户号 |
模板id | plan_id | 是 | String(28) | 12535 | 协议模板id,设置路径见开发步骤。 |
签约协议号 | contract_code | 是 | String(128) | 100000 | 商户侧的签约协议号,由商户生成 |
请求序列号 | request_serial | 是 | int64 | 1000 | 商户请求签约时的序列号,商户侧须唯一。序列号主要用于排序,不作为查询条件,纯数字。长度不超过12位 |
用户账户展示名称 | contract_display_account | 是 | String(128) | 微信代扣 | 签约用户的名称,用于页面展示,参数值不支持UTF8非3字节编码的字符,例如表情符号,所以请勿传微信昵称到该字段 |
回调通知url | notify_url | 是 | String | https://weixin.qq.com | 用于接收签约成功消息的回调通知地址,以http或https开头。请对notify_url参数值进行encode处理,注意是对参数值进行encode,例如参数为notify_url=“https://weixin.qq.com”,则需要encode的内容为https://weixin.qq.com |
版本号 | version | 是 | string | 1.0 | 固定值1.0 |
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 详见签名生成算法 |
时间戳 | timestamp | 是 | String(10) | 1414488825 | 系统当前时间,10位 |
以下字段为非必填项,用来控制签约页面结束后的返回路径(不传此参数,则签约完成后停留在微信内): | |||||
返回web | return_web | 否 | int | 1 | 1表示返回签约页面的referrer url, 不填或获取不到referrer则不返回; 跳转referrer url时会自动带上参数from_wxpay=1 |
签约请求数据示例:
返回参数(异步返回)
签约成功后,微信会把相关签约结果异步发送给商户,返回的url为调用上述签约接口时填写的notify_url字段。商户在收到签约结果通知后,需进行接收处理并返回应答
对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。
(通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
由于存在重新发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。
推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
字段名 | 变量名 | 必填 | 示例值 | 类型 | 说明 |
---|---|---|---|---|---|
返回状态码 | return_code | 是 | SUCCESS | String(16) | SUCCESS/FAIL |
返回信息 | return_msg | 否 | 签名失败 | String(128) | 返回信息,如非空,为错误原因 |
以下字段在return_code为SUCCESS的时候返回 | |||||
业务结果 | result_code | 是 | SUCCESS | String(16) | SUCCESS/FAIL |
以下字段在return_code 和result_code都为SUCCESS的时候有返回 | |||||
商户号 | mch_id | 是 | 10000098 | String(32) | 微信支付分配的商户号 |
子商户号 | sub_mch_id | 是 | 1900000109 | String(32) | 微信支付分配的子商户号 |
签约协议号 | contract_code | 是 | 100001256 | String(128) | 签约协议号 |
模板id | plan_id | 是 | 123 | String | 协议模板id |
用户标识 | openid | 是 | onqOjjmM1tad-3ROpncN-yUfa6ua | String(32) | Appid下,用户的唯一标识 |
用户子标识 | sub_openid | 否 | oUpF8uMuAJO_M2pxb1Q9zNjWeS6o | String(32) | sub_appid下,用户的唯一标识 |
签名 | sign | 是 | C380BEC2BFD727A4B6845133519F3AD6 | String(32) | 详见签名生成算法 |
变更类型 | change_type | 是 | ADD | String(32) | 有两个变更类型取值: |
操作时间 | operate_time | 是 | 2015-07-01 10:00:00 | String | 操作时间 |
委托代扣协议id | contract_id | 是 | Wx15463511252015071056489715 | String(32) | 签约成功后,微信返回的委托代扣协议id |
协议到期时间 | contract_expired_time | 否 | 2016-07-01 10:00:00 | String | 协议到期时间,当change_type为ADD时有返回 |
协议解约方式 | contract_termination_mode | 否 | 3 | int | 当change_type为DELETE时有返回 |
请求序列号 | request_serial | 是 | 1695 | int64 | 商户请求签约时的序列号,商户侧须唯一,纯数字。长度不超过12位 |
示例:
商户需返回参数
由于微信会多次通知商户服务器关于用户签约的结果和相关信息,为了避免给商户服务器造成过大的压力,请在得到微信签约结果通知之后,返回以下内容。(请求方式:post)
字段名 | 变量名 | 必填 | 示例值 | 类型 | 说明 |
---|---|---|---|---|---|
返回状态码 | return_code | 是 | SUCCESS | String(16) | SUCCESS/FAIL |
返回信息 | return_msg | 否 | OK | String(32) | 返回信息,如非空,为错误原因 |
商户返回示例:
微信支付签约,解约通知出口IP列表
如果商户侧配置了防火墙,需要对商户回调通知功能开通下面白名单网段:
101.226.233.128/25