1 业务说明

1.1 概念介绍

非税收入:除税收以外,由各级政府、事业单位提供公共服务取得的财政性资金。例如:出入境、身份证等办证费用,交警、工商、物价等罚没收入,市政公园、国家景区旅游门票等。以广州为例,去年有1000万笔,超过1000亿的收入。2016年全国地方非税收入达到6万亿,中央非税收入达到4000亿。 收款模式:实行“收支双线”,一个单位原则上只能开立一个收入专户,一个支出专户。收入专户除财政划解外,只能收,不能支;支出专户除财政核拨支出外,只能支,不能收。单位不允许存在收入过渡户,应缴非税收入直接缴入相应的政府非税收入财政专户,在指定的代理银行开设财政专户,实行非税收入“单位开票、银行代收、实时入库(或专户)”。

1.2 现状难题

收款模式:现场办理完业务,要到另一个窗户去缴费,而且只接受刷卡,或者去银行缴费。线上绝大多数公共服务只能查询,无法缴费。或者即使实现办理,也要在办理完成后,去往其他公众号或者线下缴费。 信息交互:除了收款方式特殊外,由于需要业务信息交互,因此需要业务部门与银行对接,对于银行和业务部门而言成本非常高。 由于以上原因严重制约了公共服务领域服务办结能力的提升。

1.3 解决问题

我们将搭建一个非税平台,建立并简化各业务部门与财政、银行间非税支付的连接。将银行的非税账户接入微信支付后,建立灵活收入账户选择机制,建设标准化的信息传输API接口,便捷各业务部门的接入,解决限制公众平台服务闭环发展的核心问题。

2 角色说明

2.1 银行

银行,主要是作为缴费渠道。用户缴费后,费用会划到银行的商户号下,同时非税平台会调用银行提供的接口通知订单的缴费状态。微信支付会定期(T+1)将费用结算到对应的银行账户。

2.2 财政

财政角色的主要任务是记录缴费单的状态。用户缴费后,非税平台会调用财政提供的接口通知缴费单的支付状态。所有缴费单的状态,以财政记录的状态为准。

某些地区可能由银行代为实现财政角色的功能,如广东的部分地方财政,则是由建行代为收费和记录缴费单的状态。具体可以参考接入模式说明中的银行直连模式。

2.3 委办局

委办局,其实就是业务方,可以调用非税平台提供的下单接口给用户下单。

3 接入模式说明

这一节简单介绍微信非税支付的三种接入模式,后面会对下面三种模式的信息流、接口内容做详细介绍(业务流程说明,其它场景特例说明,接口详细说明)。

3.1 银行直连模式

非税支付由银行过桥连接财政,打通信息流的模式。适用于当地财政不安排统筹接入,或当地财政开发资源不足的情况。 银行直连模式非税支付前后台流程时序图

3.2 财政直连模式

非税支付与财政系统直连,打通信息流的模式。适用于当地财政统筹接入,且当地财政开发能力较强的情况。 财政直连模式非税支付前后台流程时序图

3.3 业务直连模式

非税支付以业务单位的应收信息为准,过桥至财政系统,打通信息流。适用于本地业务单位与财政系统无直连的情况。 业务直连模式非税支付前后台流程时序图

4 帐号及相关配置

4.1 接入方需准备的信息

4.1.1 公众号的 APPID和 APPSECRET

  1. 公众号的 APPID 和APPSECRET主要用于获取 access_token。请开发者自行到公众平台查看,具体查看方法请参考此网页。
  2. 开发者需要提供公众号的APPID给微信非税支付的对接人配置接口权限。如果有测试环境和正式环境两个公众号,请分别提供。

access_token 简介

获取方式:
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务。

关于 access_token 的更多介绍,请参考公众号开发文档。
如何查看公众号的 APPID 和 APPSECRET,请参考此网页。
如何设置“获取access_token”的 IP白名单,请参考此网页。

4.1.2 微信网页授权

通过微信网页授权,公众号可以获取用户的openid。openid 是公众号下的用户唯一标识。

** 1.设置网页授权回调域名 **

1)在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

2)授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权。

** 2.网页授权的流程 **

1)引导用户进入授权页面同意授权,获取code 2)通过code换取网页授权access_token(与基础支持中的access_token不同) 3)如果需要,开发者可以刷新网页授权access_token,避免过期 4)通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

关于微信网页授权的更多介绍,请见微信网页授权。

4.1.3 支付结果通知接口

支付结果通知接口用来接收缴费单的缴费状态。详细介绍请见,支付结果通知一节。

请开发者将测试环境和正式环境的支付通知接口分别提供给微信非税支付的对接人进行配置。

4.1.4 查询应收信息接口

承担银行/财政角色的开发需要提供一个应收信息的查询接口。详细介绍请见,查询应收信息一节。

请开发者将测试环境和正式环境的支付通知接口分别提供给微信非税支付的对接人进行配置。

4.1.5 调用退款接口的 IP 地址

微信非税支付提供的退款接口有IP限制,调用方需要提供自己的IP列表。

请开发者将测试环境和正式环境的退款IP分别提供给微信非税支付的对接人进行配置。

4.2 公共测试账号资源

4.2.1 测试商户号

微信非税支付公共的测试商户号是1900016021。

测试的订单都是支付给这个商户号,可以通过此商户号下载对应的对账单。

4.2.2 测试银行ID

test_bank_id是微信非税支付的一个特殊测试银行ID。

可以通过这个银行ID测试下单支付的流程,而不受支付结果通知接口和应收信息查询接口的影响。

4.3 微信非税支付的出口IP

微信非税支付调用支付接口通知接口和应收信息查询接口的出口 IP为:

101.227.131.239
101.227.169.13
182.254.90.117
121.51.76.135
101.89.14.152
180.97.118.178
223.167.253.106
58.246.221.98
117.184.239.113
183.192.201.151

请将以上IP加入防火墙白名单。

5 业务流程说明

目前,微信非税支付支持多种业务场景,具体可以参考支付下单接口的说明。下面主要以最常用的支付场景进行说明。

5.1 整体模块架构


业务方的前端页面向业务方的后台发起缴费请求。 业务方后台从自己搭建的access_token中控服务获取 access_token。 业务方后台按照要求拼装请求参数,并使用 access_token 调用微信非税支付的 api。 access_token 中控服务定时刷新 access_token(如:1小时刷新一次)。 ### 5.2 下单支付时序图 微信非税支付目前支持多种支付方式以满足不同的支付场景需求。下面以最常用的JSAPI支付为例,对下单支付的时序进行介绍。其它支付场景的交互时序总体相差不大,主要在下单请求参数和下单返回参数有细微差别。 下单支付时序图 用户在业务方的页面或缴费单上确认订单(点击按钮或扫描二维码),业务方获取用户open_id,并发起下单请求, 微信非税支付查询缴费单信息后,执行下单操作,返回订单号和支付链接。 业务方将支付链接返回给前端(或直接HTTP302),打开支付链接。 用户在支付页面发起支付。 用户支付后,微信非税支付调用财政、银行、委办局的支付通知接口通知缴费单的支付结果。 在支付页面刷新支付结果(以财政的记录为准)。 ### 5.3 其它特例场景说明 #### 5.3.1 小程序非税支付 小程序场景下,需要通过调用方小程序的appId下单,接口会返回拉起非税支付小程序所需的参数(appId和path)。具体见支付下单接口的返回结果说明。

小程序中调用wx.navigateToMiniProgram可以唤起非税支付小程序,具体文档可参见小程序API,其中appId和path为必传(支付下单接口会返回参数)

wx.navigateToMiniProgram({
    appId: '',
    path: 'pages/index/index?id=123',
    success(res) {
        // 打开成功
    }
})

用户支付或其他操作返回到调用方小程序,调用方可以通过orderId(下单接口会返回)调用查询订单接口确认订单的支付情况

5.3.2 非微信浏览器上的 H5非税支付

在非微信浏览器上打开的 H5 无法获取用户 openid,下单时openid 不用传,trade_type 传 MWEB。

关于 H5 支付的几点问题:

用户IP:必须保证下单传入的用户IP和最终发起微信支付的用户IP是一致的,建议在用户页面上调用此接口获取用户IP。否则会报错(如下图所示)。部分浏览器,如华为浏览器、UC浏览器会通过代理服务器访问互联网,每次请求IP可能会改变。 Referer:发起微信支付的时候,会检查 Referer 参数,以确保请求是在合法的域名上发起的。正常浏览器一般会自动带上 Referer,如果出现这种错误,请自行抓包确认。

Referer的作用是,检查请求的来源。H5支付调用微信客户端时,会检查请求是否是从 https://mp.weixin.qq.com 这个域名发起的。所以,如果要在APP上使用H5支付,请针对域名为 https://mp.weixin.qq.com 的页面发起的请求设置 referer 为 https://mp.weixin.qq.com,同时设置一个可以标识 APP 的 User-Agent(用于支付完APP 回跳,下面会说明)。

iOS Webview 设置 Referer,请参考本文。 Android Webview 设置 Referer,请参考本文。

APP 的跳转:如果是从 APP 上发起 H5 支付,微信支付成功后,默认情况下可能不会跳回到原来的APP,而是回到默认浏览器。如果希望支付结束回到 APP,请在打开 Webview 设置一个能标识 APP 的 User-Agent,同时将 User-Agent 上能标识APP的关键字和 Url Scheme 提供给我们进行配置。支付结束后会根据 User-Agent 使用不同的 Url Scheme 进行跳转。

如果不清楚 Url Scheme,可以参考这篇文章。 Android Webview 设置 User-Agent,可以参考这篇文章。 iOS Webview 设置 User-Agent,可以参考这篇文章。 webview加载网页出现("找不到网页net:err_unknown_url_scheme"),解决方法请参考这篇文章。

5.3.3 APP 发起非税支付

APP发起非税支付与6.2的下单支付时序图的差别在于,需要调用微信的SDK来拉起微信并在微信内打开支付链接。

iOS 调用微信非税支付 SDK 示例:

WXNontaxPayReq *req = [[WXNontaxPayReq alloc] init];
req.urlString = "https://mp.weixin.qq.com/intp/nontax/pay?action=page&order_id=AQCApa-n9q8vjeoKDJ7fvb4X7d8W#wechat_redirect";
[WXApi sendReq:req];

Android 调用微信非税支付 SDK 示例:

WXNontaxPay.Req req = new WXNontaxPay.Req();
req.url = "https://mp.weixin.qq.com/intp/nontax/pay?action=page&order_id=AQCApa-n9q8vjeoKDJ7fvb4X7d8W#wechat_redirect";
api.sendReq(req);

更多关于微信 SDK 的信息,请参考:

微信 SDK 接入指南。 微信 SDK 开发工具包下载。 微信 SDK 示例代码,Android 版,iOS 版,重点关注XXXX(TODO)

6 接口详细说明

6.1 微信非税平台提供的接口

6.1.1 查询应收信息(提供给委办局)

https://api.weixin.qq.com/nontax/queryfee?access_token=$AccessToken

(所有接口的请求参数、返回结果都是json格式)

请求参数

字段名 类型 必填 说明
appid string appid
service_id int 服务id
bank_id string 银行id(由微信非税平台分配的全局唯一id),不指定时在已配置的银行列表中随机选择
payment_notice_no string 缴费通知书编号
department_code string 执收单位编码
payment_notice_type int 通知书类型
1:普通通知书类型
2:处罚通知书类型
region_code string 行政区划代码

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述
user_name string 用户姓名
fee int 总金额(单位是分)
items json 缴费子项目详情
payment_notice_no string 缴费通知书编号
department_code string 执收单位编码
department_name string 执收单位名称
payment_notice_type int 通知书类型
region_code string 行政区划代码
payment_notice_create_time int 缴费通知书创建时间(时间戳,单位是秒)
payment_expire_date string 限缴日期,格式YYYYMMDD

其中items内部字段如下:

字段名 类型 必填 说明
no int 项目号,如1,2,3
item_id string 项目编码
item_name string 项目名称
overdue int 滞纳金(单位是分)
penalty int 加罚金额(单位是分)
fee int 金额(包含滞纳金和加罚金额,单位是分)

示例

请求参数
{
"appid":"wx5f6e43071809a9dd",
"service_id": 123,
"bank_id":"470690268",
"payment_notice_no":"440204190185356",
"department_code":"143605002004",
"payment_notice_type":1,
"region_code":"440000"
}

返回结果

{
"department_code":"143605002004",
"department_name":"韶关市公安局交警支队市区一大队",
"errcode":0,
"errmsg":"通知书未缴款",
"fee":20000,
"items":[
{
"fee":20000,
"item_id":"103050101200",
"item_name":"交通违法罚款",
"no":1,
"overdue":0
}
],
"payment_notice_create_time":1508806661,
"payment_notice_no":"440204190185356",
"payment_notice_type":1,
"region_code":"440000",
"user_name":"叶*梅"
}

6.1.2 支付下单(提供给委办局)

https://api.weixin.qq.com/nontax/unifiedorder?access_token=$AccessToken

请求参数

字段名 类型 必填 说明
appid string appid
service_id int 服务id
bank_id string 银行id(由微信非税平台分配的全局唯一id),不指定时在已配置的银行列表中随机选择;不填时默认生产环境,测试环境需填上
bank_account string 清分银行帐号(不使用清分机制的不用填)
mch_id string 指定资金结算到mch_id。只能结算到 bank_id 下绑定的mch_id。不填时自动从 bank_id 下绑定的 mch_id 选择一个。
openid string 用户标识。当 trade_type 为 MWEB 时,不需要填;其它情况,必填。
desc string 描述(服务名称)
fee int 总金额(单位是分)
return_url string 支付中间页支付完成后跳转的页面(小程序下单非必填,其他必填)
ip string 用户端ip
order_no string 订单号。(缴费通知书编号和订单号必须二选一。如果没有缴费通知书编号,则填订单号)
payment_notice_no string 缴费通知书编号(缴费通知书编号和订单号必须二选一。如果没有缴费通知书编号,则填订单号)
department_code string 执收单位编码
department_name string 执收单位名称
payment_notice_type int 通知书类型
region_code string 行政区划代码
user_name string 用户姓名
items json 缴费子项目详情
payment_notice_create_time int 缴款通知书创建时间(时间戳,单位是秒)
payment_expire_date string 限缴日期,格式YYYYMMDD
scene string 场景。
"biz":微信公众号
"ctiyservice":城市服务
"miniprogram":小程序
app_appid string app的appid,app下单时必填
trade_type string 默认是JSAPI类型,非微信浏览器的H5下单请填MWEB。
auto_call_pay bool 支付中间页/小程序是否自动调起支付

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述
order_id string 订单号
pay_url string 支付链接,公众号或app下单返回
miniprogram string 小程序唤起参数,小程序下单返回

其中miniprogram内部字段为

字段名 类型 必填 说明
appid string 支付小程序appid
pagepath string 支付小程序页面路径
business_type string 支付小程序业务类型
query_string string 支付小程序参数

示例

请求参数
{
    "appid":"wx5f6e43071809a9dd",
    "bank_account":"",
    "bank_id":"test_bank_id",
    "department_code":"1",
    "department_name":"test",
    "desc":"测试缴费",
    "fee": 2,
    "ip":"113.68.115.241",
    "items":[
        {   
        "fee":2,
        "item_id":"103050101200",
        "item_name":"测试缴费2",
        "no":1,
        "overdue":0
        }   
    ],  
    "openid": "ont-9vjAcIdSU-LgB7ubALAVJO9U",
    "payment_expire_date":"",
    "payment_notice_no":"08111639088",
    "payment_notice_type": 1,
    "region_code":"440000",
    "return_url":"http://cockpouncher.55555.io/nontax-wxpay/pay_demand_result.html?type=showPayResult&region_code=44000&unitNo=1&payNoticeNo=1",
    "service_id":0,
    "user_name":"张*丰"
}

返回结果
{
    "errcode": 0,
    "errmsg": "ok",
    "order_id": "AQCAzieFp6-dC8EKDJ7fvb6x3dZt",
    
"pay_url": "https://mp.weixin.qq.com/intp/nontax/pay?action=page&order_id=AQCAzieFp6-dC8EKDJ7fvb6x3dZt#wechat_redirect"
}

6.1.3 查询订单(提供给委办局、银行、财政)

https://api.weixin.qq.com/nontax/getorder?access_token=$AccessToken

请求参数

字段名 必填 说明
appid string
service_id int
order_id string

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述
appid string appid
openid string 用户标识
order_id string 订单号
create_time int 订单创建时间(时间戳,单位是秒)
pay_finish_time int 订单支付成功时间(时间戳,单位是秒)
desc string 描述(服务名称)
fee int 总金额(单位是分)
fee_type int 币种
1:人民币
2:美元
trans_id string 支付交易单号
status int 订单总状态
1:还没支付
3或4:支付成功
5:已退款
6:退款中
12:超时未支付订单自动关闭
(若部分退款只退了一部分金额,订单总状态不会变,只有全部退完总状态才会变成已退款)
bank_id string 银行id(由微信非税平台分配的全局唯一id)
bank_name string 银行名称
bank_account string 银行帐号
refund_finish_time int 退款完成时间(时间戳,单位是秒)
refund_reason string 退款原因
refund_order_id string 退款订单号
refund_out_id string 退款时传入的外部单号
payment_notice_no string 缴费通知书编号(根据下单请求的参数返回)
order_no string 订单号。(根据下单请求的参数返回)
department_code string 执收单位编码
department_name string 执收单位名称
payment_notice_type int 通知书类型
region_code string 行政区划代码
items json 缴费子项目详情
bill_type_code string 票据类型编码
bill_no string 票据号码
payment_info_source int 应收款信息来源,
1:财政
2:委办局
partial_refund_info json 部分退款信息
notify_history json 通知历史
scene string 场景。
"biz":微信公众号
"ctiyservice":城市服务
"miniprogram":小程序
"offline":线下二维码
"pc":pc机
"app":手机app
"other":其它

其中partial_refund_info的内部字段如下

字段名 类型 必填 说明
refund_order_id string 退款订单号
refund_reason string 退款原因
refund_fee int 退款金额(单位是分)
refund_finish_time int 退款完成时间(时间戳,单位是秒)
refund_out_id string 退款时传入的外部单号
refund_status int 退款状态
5:已退款
6:退款中

其中notify_history的内部字段如下

字段名 类型 必填 说明
appid string 第三方appid
name string 第三方名字
notify_detail json 通知详情(第一次和最后一次通知)
notify_cnt int 通知次数

其中notify_detail的内部字段如下

字段名 类型 必填 说明
notify_time int 通知时间(时间戳,单位是秒)
ret int 微信后台通知总返回码
ret_errmsg string 微信后台通知总返回信息
cost_time int 耗时(单位是毫秒)
wxnontaxstr string 带在url参数上的一次请求的随机字符串
status int 订单状态
3或4:支付成功
5:已退款
url string 第三方接收通知的url
errcode int 第三方返回码
0– 成功
210 – 数据格式错误
232 – 缴款通知书已缴费
236 – 不允许在该银行缴费
298 – 解密失败
299 – 系统错误
300 – 签名错误
errmsg string 第三方返回信息,如非空,为错误原因
third_resp string 第三方的返回
third_resp_data string 第三方的返回解密出的data

示例

请求参数
{
  "appid": "wx5f6e43071809a9dd",
  "order_id": "AQCAGxwqp6-aBeIKDJ7fvb6x3dZt",
}

返回结果
{
    "errcode": 0,
    "errmsg": "ok",
    "appid": "wx5f6e43071809a9dd",
    "openid": "ont-9vjAcIdSU-LgB7ubALAVJO9U",
    "order_id": "AQCAGxwqp6-aBeIKDJ7fvb6x3dZt",
    "create_time": 1508847678,
    "pay_finish_time": 0,
    "desc": "测试办证缴费",
    "fee": 1,
    "fee_type": 1,
    "trans_id": "",
    "status": 12,
    "bank_id": "test_bank_id",
    "bank_name": "测试_银行",
    "bank_account": "6215385809487657",
    "refund_finish_time": 0,
    "items": [
        {
            "no": 1,
            "item_id": "000001",
            "item_name": "测试办证缴费1",
            "overdue": 0,
            "fee": 1
        },
        {
            "no": 2,
            "item_id": "000002",
            "item_name": "测试办证缴费2",
            "overdue": 0,
            "fee": 0
        }
    ],
    "bill_type_code": "",
    "bill_no": "",
    "payment_info_source": 2,
    "payment_notice_no": "08111639088",
    "department_code": "118610002",
    "department_name": "测试执收单位",
    "payment_notice_type": 1,
    "region_code": "440000",
    "notify_history": [
            {
                "appid": "wx5f6e43071809a9dd",
                "name": "测试财政",
                "notify_detail": [
                    {
                        "notify_time": 1524023367,
                        "ret": 0,
                        "cost_time": 39,
                        "wxnontaxstr": "2ba37f90d155d390",
                        "status": 3,
                        "errcode": 0,
                        "errmsg": ""
                    }
                ],
                "notify_cnt": 1
            },
            {
                "appid": "wxefd0818f53b9b82f",
                "name": "测试委办局",
                "notify_detail": [
                    {
                        "notify_time": 1524023367,
                        "ret": 0,
                        "cost_time": 20,
                        "wxnontaxstr": "f7ad824e08ac4bc5",
                        "status": 3,
                        "errcode": 0,
                        "errmsg": ""
                    }
                ],
                "notify_cnt": 1
            },
            {
                "appid": "wxf1bfa94c33668abf",
                "name": "测试银行",
                "notify_detail": [
                    {
                        "notify_time": 1524023367,
                        "ret": 0,
                        "cost_time": 18,
                        "wxnontaxstr": "2e628b6f1e3e9bf3",
                        "status": 3,
                        "errcode": 0,
                        "errmsg": ""
                    }
                ],
                "notify_cnt": 1
            }
        ]
}

6.1.4 申请退款(提供给银行) https://api.weixin.qq.com/nontax/refund?access_token=$AccessToken

请求参数

字段名 类型 必填 说明
appid string appid
order_id string 订单号
reason string 退款原因
refund_fee int 退款金额(单位是分),部分退款时必填
refund_out_id string 退款单号(每笔部分退款唯一),部分退款时必填

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述
refund_order_id string 退款订单号

示例

请求参数
{
    "appid":"wx6cc9648de104270d",
    "order_id":"AQCAGxwqp6-aBeIKDJ7fvb6x3dZt",
"reason":"线上线下重复缴费,解档票据号为DA01651861"
}

返回结果
{
    "errcode": 0,
    "errmsg": "ok"
}

6.1.5 下载对帐单(提供给银行) https://api.weixin.qq.com/nontax/downloadbill?access_token=$AccessToken

说明:请每天早上6点后拉取。

请求参数

字段名 类型 必填 说明
appid string appid
mch_id string 商户号(若填商户号则返回单个对帐单,若不填商户号则返回所有商户号对帐单打包成的zip文件)
bill_date string 对账单日期,格式:20170903
bill_type string ALL,返回当日所有订单信息,默认值
SUCCESS,返回当日成功支付的订单
REFUND,返回当日退款订单

失败时,返回以下字段

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述

成功时,数据以csv文本表格的方式返回,第一行为表头,后面各行为对应的字段内容 (具体字段可能有增删,以实际返回的为准)

第一行为表头,根据请求下载的对账单类型不同而不同(由bill_type决定),目前有:
当日所有订单
交易时间,公众账号ID,商户号,子商户号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,手续费,费率,行政区划代码,缴费通知书编号(或平台订单号),执收单位编码,通知书类型,银行ID
当日成功支付的订单
交易时间,公众账号ID,商户号,子商户号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,手续费,费率,行政区划代码,缴费通知书编号(或平台订单号),执收单位编码,通知书类型,银行ID
当日退款的订单
交易时间,公众账号ID,商户号,子商户号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,手续费,费率,行政区划代码,缴费通知书编号(或平台订单号),执收单位编码,通知书类型,银行ID
从第二行起,为数据记录,各参数以逗号分隔,参数前增加`符号,为标准键盘1左边键的字符,字段顺序与表头一致。
倒数第二行为订单统计标题,最后一行为统计数据
总交易单数,总交易额,总退款金额,总企业红包退款金额,手续费总金额
举例如下:
交易时间,公众账号ID,商户号,子商户号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,手续费,费率,行政区划代码,缴费通知书编号(或平台订单号),执收单位编码,通知书类型,银行ID
`2017-06-01 15:33:10,`wxc971985892358997,`1800004561,`1900016021,`4004332001201706013698057350,`AQCA6cNHMa5QlD4KDJ7fvb6x3dZt,`oFkLxtyJswfbex9crZWHGDYG5NIw,`JSAPI,`SUCCESS,`CMB_CREDIT,`CNY,`0.01,`0.00,`0,`0,`0.00,`0.00,`,`,`办证缴费,`0.00000,`0.00%,`440100,`17001122412,`000000,`1
`2017-06-01 15:44:30,`wxc971985892358997,`1800004561,`1900016021,`4004332001201706013704498976,`AQCAlxpOMa5QlD4KDJ7fvb6x3dZt,`oFkLxtyJswfbex9crZWHGDYG5NIw,`JSAPI,`SUCCESS,`CMB_CREDIT,`CNY,`0.01,`0.00,`0,`0,`0.00,`0.00,`,`,`办证缴费,`0.00000,`0.00%,`440100,`17001122413,`000000,`1
总交易单数,总交易额,总退款金额,手续费总金额
`2,`0.02,`0.0,`0

示例

请求参数:
{
  "appid": "wx6cc9648de104270d",
  "mch_id": "1900016021",
  "bill_date": "20170925",
  "bill_type": "ALL",
}

返回结果:
交易时间,公众账号ID,商户号,子商户号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,手续费,费率,行政区划代码,缴费通知书编号(或平台订单号),执收单位编码,通知书类型,银行ID
`2017-09-25 09:39:03,`wxc971985892358997,`1800004561,`1900016021,`4200000022201709254109017673,`AQAAc_FXW6_CCUtkDNP0Z7csEgVD,`,`JSAPI,`SUCCESS,`CFT,`CNY,`0.02,`0.00,`0,`0,`0.00,`0.00,`,`,`广东省非税微信缴费,`0.00000,`0.00%,`440000,`1713372142,`118610002,`1,`test_470690267
`2017-09-25 10:05:01,`wxc971985892358997,`1800004561,`1900016021,`4200000022201709254114686941,`AQCA7tdjW6-aAFhkDNP0Z7csEgVD,`,`JSAPI,`SUCCESS,`CFT,`CNY,`0.02,`0.00,`0,`0,`0.00,`0.00,`,`,`广东省非税微信缴费,`0.00000,`0.00%,`440000,`1713372144,`118610002,`1,`test_470690267
`2017-09-25 10:08:37,`wxc971985892358997,`1800004561,`1900016021,`4200000023201709254110290403,`AQCARHplW6-PTDcKDNP0Z7c4qUGm,`,`JSAPI,`SUCCESS,`CFT,`CNY,`0.02,`0.00,`0,`0,`0.00,`0.00,`,`,`广东省非税微信缴费,`0.00000,`0.00%,`440000,`1713372146,`118610002,`1,`test_470690267
`2017-09-25 10:22:18,`wxc971985892358997,`1800004561,`1900016021,`4200000010201709254114144003,`AQCAD8BrW68VlT4KDNP0Z7c4qUGm,`,`JSAPI,`SUCCESS,`CFT,`CNY,`0.02,`0.00,`0,`0,`0.00,`0.00,`,`,`广东省非税微信缴费,`0.00000,`0.00%,`440000,`1713372150,`118610002,`1,`test_470690267
`2017-09-25 11:58:35,`wxc971985892358997,`1800004561,`1900016021,`4200000012201709254136555152,`AQCAkL-XW69fTTcKDNP0Z7dYl29t,`,`JSAPI,`SUCCESS,`CFT,`CNY,`0.02,`0.00,`0,`0,`0.00,`0.00,`,`,`广东省非税微信缴费,`0.00000,`0.00%,`440000,`1713372148,`118610002,`1,`test_470690266
`2017-09-25 14:33:16,`wxc971985892358997,`1800004561,`1900016021,`4200000023201709254163519598,`AQCA9J_eW68VlT4KDNP0Z7c4qUGm,`,`JSAPI,`SUCCESS,`CFT,`CNY,`0.02,`0.00,`0,`0,`0.00,`0.00,`,`,`广东省非税微信缴费,`0.00000,`0.00%,`440000,`1713372154,`118610002,`1,`test_470690267
总交易单数,总交易额,总退款金额,总企业红包退款金额,手续费总金额
`6,`0.12,`0.00,`0.00,`0.00000

6.1.6 通知不一致订单(提供给财政) https://api.weixin.qq.com/nontax/notifyinconsistentorder?access_token=$AccessToken

说明:调用这个接口会触发微信后台调用支付通知接口(如果之前没有通知成功的话)。

一般使用场景:对账的时候,如果发现微信的对账单有某个订单,而你们那边没有记录到这个订单,就调用这个接口触发微信这边重新通知你们。

请求参数

字段名 类型 必填 说明
appid string appid
order_id string 订单号

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述

示例

请求参数
{
    "appid":"wx6cc9648de104270d",
    "order_id":"AQCAGxwqp6-aBeIKDJ7fvb6x3dZt"
}

返回结果
{
    "errcode": 0,
    "errmsg": "ok"
}

6.1.7 测试支付结果通知 https://api.weixin.qq.com/nontax/mocknotification?access_token=$AccessToken

说明:此接口提供给接入方在联调前自己调试支付通知接口的加解密和其它基本逻辑。 若version为1,会通知两次,分别测试加解密是否正确和是否有验签。 调用此接口会触发微信后台向 url 发送支付结果通知的测试数据。

请求参数

字段名 类型 必填 说明
appid string appid
url string 接收通知的url
version int 协议版本号,默认为1

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述

6.1.8 测试查询应收信息 https://api.weixin.qq.com/nontax/mockqueryfee?access_token=$AccessToken

说明:此接口提供给接入方在联调前自己调试查询应收信息接口的加解密和其它基本逻辑。 若version为1,会通知两次,分别测试加解密是否正确和是否有验签。 调用此接口会触发微信后台向 url 发送查询应收信息的测试数据。

请求参数

字段名 类型 必填 说明
appid string appid
url string 接收通知的url
version int 协议版本号,默认为1

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述

6.1.9 提交刷卡支付 提交支付请求后微信会同步返回支付结果。 接口返回系统失败时,等待5秒重新调用看返回码。 当结果返回用户支付中需要输入密码时,可每间隔一段时间(建议10秒)重新调用该接口,直到有明确成功、失败,或者超时(建议30秒)

https://api.weixin.qq.com/nontax/micropay?access_token=$AccessToken

请求参数

字段名 类型 必填 说明
appid string appid
bank_id string 银行id(由微信非税平台分配的全局唯一id),不指定时在已配置的银行列表中随机选择;不填时默认生产环境,测试环境需填上
bank_account string 清分银行帐号(不使用清分机制的不用填)
mch_id string 指定资金结算到mch_id。只能结算到 bank_id 下绑定的mch_id。不填时自动从 bank_id 下绑定的 mch_id 选择一个。
desc string 描述(服务名称)
fee int 总金额(单位是分)
user_name string 用户姓名
items json 缴费子项目详情
payment_notice_create_time int 缴款通知书创建时间(时间戳,单位是秒)
payment_expire_date string 限缴日期,格式YYYYMMDD
payment_notice_no string 缴费通知书编号(缴费通知书编号和订单号必须二选一。如果没有缴费通知书编号,则填订单号)
order_no string 订单号。(缴费通知书编号和订单号必须二选一。如果没有缴费通知书编号,则填订单号)
department_code string 执收单位编码
department_name string 执收单位名称
payment_notice_type int 通知书类型
region_code string 行政区划代码
auth_code string 扫码支付授权码,设备读取用户微信中的条码或者二维码信息(注:用户刷卡条形码规则:18位纯数字,以10、11、12、13、14、15开头)
order_id string 订单号(之前请求有返回订单号则填上)

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述
order_id string 订单号

示例

请求参数
{
    "appid": "wx5f6e43071809a9dd",
    "bank_id": "test_bank_id",
    "bank_account": "",
    "desc": "测试办证缴费",
    "fee": 1,
    "user_name": "*三强",
    "items": [
        {
            "no": 1,
            "item_id": "000001",
            "item_name": "测试办证缴费1",
            "overdue": 0,
            "fee": 1
        },
        {
            "no": 2,
            "item_id": "000002",
            "item_name": "测试办证缴费2",
            "overdue": 0,
            "fee": 0
        }
	],
    "payment_notice_create_time": 1500967298,
    "payment_expire_date": "20190102",
    "payment_notice_no": " 08111639088",
    "department_code": "118610002",
    "department_name": "测试执收单位",
    "region_code": "440000",
    "auth_code": " 134971951305811268"
}
 
返回结果
{
    "errcode": 0,
    "errmsg": "ok",
    "order_id": "AQAA_UjjdbLiUjMKDJ7fvb4AAAAA"
}

返回码说明

返回码 说明
-1 系统失败
9201033 授权码为空
9207003 支付失败,需要重新下单支付
9207004 二维码已过期,请在微信上刷新后再试
9207005 用户余额不足.需要换卡支付
9207006 该卡不支持当前支付,需要换卡支付或绑新卡支付
9207007 当前订单状态为“订单已撤销”,请重新支付
9207008 用户支付中,需要输入密码
9207009 授权码参数错误,每个二维码仅限使用一次,请刷新再试
9207010 授权码检验错误,收银员扫描的不是微信支付的条码

6.1.10 查询订单列表

https://api.weixin.qq.com/nontax/getorderlist?access_token=$AccessToken

请求参数

|字段名|类型|必填|说明| | --- | --- || --- | --- | |appid|string|是|appid| |region_code|string|是|行政区划代码| |department_code|string|是|执收单位编码| |payment_notice_no|string|否|缴费通知书编号(缴费通知书编号和订单号必须二选一。如果没有缴费通知书编号,则填订单号)| |order_no|string|否|订单号。(缴费通知书编号和订单号必须二选一。如果没有缴费通知书编号,则填订单号)|

返回结果

字段名 类型 必填 说明
errcode int 返回码
errmsg string 返回码描述

成功时返回以下字段

字段名 类型 必填 说明
order_id_list json 已下单的订单id列表
paid_order_id string 已支付的订单id

示例

请求参数
{
    "appid": "wx5f6e43071809a9dd",
    "payment_notice_no": "34000019081115065040",
    "department_code": "065080906",
    "region_code": "340000"
}
 
返回结果
{
    "errcode": 0,
    "errmsg": "ok",
    "order_id_list": [
        "AQCAxFJwcrQqI2BkDAqRH-UhDq2D",
        "AQAAgrVxcrRuhXBkDAqRH-UhDq2D",
        "AQCAFxFzcrQqI2BkDAqRH-UhDq2D",
        "AQCA5_3kcrSQCxMJDAGMadMAAAAA",
        "AQCA6ADlcrQqI2BkDAGMadMAAAAA",
        "AQCA62hwdbQqI2BkDAqRH-U4tE4p"
	],
    "paid_order_id": "AQCA62hwdbQqI2BkDAqRH-U4tE4p"
}

6.2 财政/银行提供接口

6.2.1 查询应收信息

请求参数

字段名 类型 必填 说明
appid string appid
region_code string 行政区划代码
payment_notice_no string 缴费通知书编号
department_code string 执收单位编码
payment_notice_type int 通知书类型
bank_id string 银行id(由微信非税平台分配的全局唯一id)

返回结果

字段名 类型 必填 说明
errcode int 0– 通知书未缴款
210 – 数据格式错误
211 – 不允许缴费(单位或项目被禁用)
231 – 缴款通知书不存在
232 – 缴款通知书已缴费
233 – 缴款通知书已取消
235 – 不允许逾期缴费
236 – 不允许在该银行缴费
296 – 缴款通知书异常
297 – 当前时间暂停缴费
298 – 解密失败
299 – 系统错误
300 – 签名错误
errmsg string 返回信息

若errcode为0时返回以下字段

字段名 类型 必填 说明
region_code string 行政区划代码
payment_notice_no string 缴费通知书编号
department_code string 执收单位编码
department_name string 执收单位名称
payment_notice_type int 通知书类型
user_name string 缴款人名称
payment_notice_create_time int 缴款通知书创建时间(时间戳,单位是秒)
payment_expire_date string 限缴日期,格式YYYYMMDD
fee int 金额,单位是分
items json 缴费子项目详情

若errcode为232 – 缴款通知书已缴费时返回以下字段

字段名 类型 必填 说明
pay_channel string 缴费渠道,微信非税平台为"wx_nontax"
order_id string 缴费渠道为微信非税平台时返回之前已缴费的订单号

示例

请求参数
{
“appid”: “wx_appid”,
"bank_id":"470690268",
"payment_notice_no":"440204190185356",
"department_code":"143605002004",
"payment_notice_type":1,
"region_code":"440000"
}

返回结果
{
"department_code":"143605002004",
"department_name":"韶关市公安局交警支队市区一大队",
"errcode":0,
"errmsg":"通知书未缴款",
"fee":20000,
"items":[
{
"fee":20000,
"item_id":"103050101200",
"item_name":"交通违法罚款",
"no":1,
"overdue":0
}
],
"payment_notice_create_time":1508806661,
"payment_notice_no":"440204190185356",
"payment_notice_type":1,
"region_code":"440000",
"user_name":"叶*梅"
}

6.2.2 结果通知 请求参数

字段名 类型 必填 说明
order_id string 微信非税平台的订单号
status int 状态:
3或4:已支付
. 5:已退款
pay_channel string 缴费渠道,微信非税平台为"wx_nontax"
pay_finish_time int 订单支付成功时间(时间戳,单位是秒)

返回结果(微信非税平台直连财政情况下财政返回,非直连财政情况下银行返回)

字段名 类型 必填 说明
errcode int 0– 成功
210 – 数据格式错误
211 – 不允许缴费(单位或项目被禁用)
(会触发自动退款)
231 – 缴款通知书不存在
(会触发自动退款)
232 – 缴款通知书已缴费
(若返回的order_id和通知的order_id不一样会触发自动退款)
233 – 缴款通知书已取消
(会触发自动退款)
235 – 不允许逾期缴费
(会触发自动退款)
236 – 不允许在该银行缴费
(会触发自动退款)
296 – 缴款通知书异常
(会触发自动退款)
297 – 当前时间暂停缴费
298 – 解密失败
299 – 系统错误
300 – 签名错误
errmsg string 返回信息,如非空,为错误原因

返回结果(微信非税平台直连财政情况下银行返回)

字段名 类型 必填 说明
errcode int 0– 成功
299 – 系统错误
errmsg string 返回信息,如非空,为错误原因

示例

请求参数
{
"order_id":"AQCADTPupa-aBeIKDD96k7MbdosN",
"status":3,
"pay_channel":"wx_nontax",
"pay_finish_time":1508806264
}

返回结果
{
"bill_no":"AB00002027",
"bill_type_code":"333333",
"errcode":0,
"errmsg":"成功",
}

6.3 委办局提供的接口 6.3.1 结果通知 请求参数

字段名 类型 必填 说明
order_id string 微信非税平台的订单号
status int 状态:
3或4:已支付
5:已退款
pay_channel string 缴费渠道,微信非税平台为"wx_nontax"
pay_finish_time int 订单支付成功时间,status为已支付时才有此字段(时间戳,单位是秒)
refund_finish_time int 发起退款指令时间,status为已退款时才有此字段(时间戳,单位是秒)
refund_fee int 退款金额,部分退款时必填
refund_order_id string 退款单号,部分退款时必填

返回结果

字段名 类型 必填 说明
errcode int 0– 成功
210 – 数据格式错误
298 – 解密失败
299 – 系统错误
300 – 签名错误
errmsg string 返回信息,如非空,为错误原因

示例

请求参数
{
"order_id":"AQCAXCfypa-dC8EKDD96k7NeiEFb",
"status":3,
"pay_channel":"wx_nontax",
"pay_finish_time":1508806792
}

返回结果
{
"errcode":0,
"errmsg":"成功"
}

7 数据加解密说明

为加强安全性,微信非税支付调用支付结果通知接口和应收信息查询接口时,会在应用层对数据进行加密传输。

7.1 密钥的管理

1.对称加密使用的静态密钥由第三方事先设置到非税支付后台,密钥长度为256位。(暂时人工配置,后面会在微信公众平台上提供配置密钥功能) 2.非对称加密的密钥对(公钥和私钥)由微信非税支付这边生成和分配。公钥分配给接入方,私钥由微信非税支付后台保管。 3. 具体加解密的方法和流程,请见下面的介绍。

7.2 加解密的方式和说明

请求参数

字段名 类型 必填 说明
data string 使用对称加密算法加密后的数据,最后做base64编码。原文为json字符串。
base64( iv + AES(plaintext, key, iv) )
(base64 decode后的头16个字节就是iv)
data_encrypt_type string data的对称加密算法:AES/CBC/PKCS7Padding
sign string 签名(使用私钥加密的原始数据的摘要)
sign_type string 签名类型"SHA256withRSA"
version int 协议版本号
appid string 通知的公众号appid

返回结果

字段名 类型 必填 说明
data string 使用对称加密算法加密后的数据,最后做base64编码。原文为json字符串。
base64( iv + AES(plaintext, key, iv) )
data_encrypt_type string data的对称加密算法(和请求中的一样)

示例

测试公钥
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu6gQV44C65NrdmeqJVAw
GPPd7+8JyE6brZlHsNtsbE+P9yJOaz68KbLcygmf67abtASEHWAGre1ju32t2+NY
rkaMu5DUyJ7ROJJpmUkv1D1y7GhuIfANvnTr8/a29AFwx2HZZvuoOi9mGq6iNi/H
+PoFTGbmTyatl+D10rFCCM2oHiS/8mC+2xfCGm6pmKaVocekVUOOQYHHGNO3OpeU
s+Cn0cukhuNt03iWsZ5KOx9qy7QbletNoriymi3NI9Gb/6mfx7k+d0sJMg8aLz/F
GSBOp0JSyAmjjSdO85Jhe1PCiOMwMBJgMi1711RFz09LrOZZxdEoyCVddWg/ynzP
mQIDAQAB
-----END PUBLIC KEY-----
 
测试对称密钥
UBmCt8sJzEXBJKpt0F5C0POrMMrbaCQx
请求参数:
{
"data":"apckvM3mqLEeFF9qGhXHR/1MPpI8gi58aZA+KpumHPRIAYSBaSuIGM6iWCagZSoPRi39aEFUPOoEI5WdQXmPSJ2KdiO8+h47CNn3n++fQrPYephr/pucl2PARtiOcDeoqHaolgzgwMCjnPYCSIGVlfE3yrSz8CNwMv0JuO4OmTvCwROlCH2LiDn9D6R2GFEovgapyzwLqp/za4SyF84Ulun0hkN8wSAJuZnpdkGcekQ=",
"data_encrypt_type":"AES/CBC/PKCS7Padding",
"appid":"wx5f6e43071809a9dd",
"sign":"kzh/xptOlrRlF5bkxt322JtQzeeTn3rHElyLf3IWCzUsa6m2Y7iBAGbuev+P/g6UJw7GUoZm1hiAoItRLlZMKUFB5sHIP9Th90fnX9scZMKZLjwwKNRMa3R/Q9OcuK623put30leW6KSF10m+9u00JNjpN/yKyABT6nGIQCK1qUmJHK5r4wenF3wo+ELvWsIhZytpfFs9ALt9JKFXYsrOgggN4lLt/omNB60H71OuR+6itMYqk8KTUNYrFA7dOvvhJouG6maHr9ShGZQegQN6fpQouDdz+hnD8WCqSPmS3gtrxGBfQ2+OpOvl4mwFMHmEkUVSplmPnP4lBJrcdDxXg==",
"sign_type":"SHA256withRSA",
"version":1
}

解密流程:

  1.   用AES对称密钥解密data字段的内容,解密算法为AES/CBC/PKCS7Padding,获得明文通知数据。这里的明文数据这是对应查询应收接口或支付结果通知接口的请求参数。
    
  2.   用data字段的解密结果和公钥校验sign。(微信非税平台会定期进行验签拨测)
    
  3.   联调前,请用上面列出的公钥、对称密钥和请求参数测试你们解密代码是否正确。
    
返回结果:
{
"data":"OX88ov0nRiEgjkV580XoE5V+lhXzb+8CAEu9jRIfQzat1NK6um+t6+NxL86DLMPH",
"data_encrypt_type":"AES/CBC/PKCS7Padding"
}

加密流程:

  1. 用AES对称密钥加密返回数据,加密算法为AES/CBC/PKCS7Padding,密文对应data字段。

支付通知结果接口和查询应收信息接口的处理逻辑如下:

8 获取用户IP

https://mp.weixin.qq.com/intp/getuserclientip

使用方法:直接在用户页面上调用此接口获取用户 IP,请求方式 GET。

返回结果:
{
	"base_resp": {
		"ret": 0,
		"err_msg": "OK"
	},
	"client_ip": "14.17.22.37"
}

9 获取用户实名信息

说明:有一些业务可能需要知道缴费者的真实姓名,可通过这里提供的接口和流程获取(需要用户授权)。

9.1 业务流程

其中1/2使用到了两个API:

第一个 API 获取实名授权链接,在用户手机上打开,用户进行授权(需要用户输入微信支付密码进行授权)。

通过用户授权后获得的 token,调用第二个 API 获取用户的实名信息。

具体见下面的说明。

9.2 获取授权链接

POST https://api.weixin.qq.com/intp/realname/getauthurl?access_token=ACCESS_TOKEN

请求:

字段名 字段类型 是否必填 说明
redirect_url string 用户授权完成后回跳的url。授权完成后微信在redirect_url中增加wx_realname_token参数,用于获取实名信息API的调用。

返回:

字段名 字段类型 是否必填 说明
errcode int32 0为成功,其他失败
errmsg string 错误信息
auth_url string 给用户打开的授权链接
expires_in uint32 有效时间,单位秒
auth_appid string 如果委办局是小程序,会返回用于授权跳转的小程序

示例:

请求参数
{
"redirect_url":"https://mp.weixin.qq.com"
}
返回结果
{
    "errcode": 0,
    "errmsg": "ok",
     "expires_in":7200,
"auth_url": "https://mp.weixin.qq.com/insurance/card/getpwdconfig?auth_param=5c9f05#wechat_redirect"
}

9.3 获取实名信息

POST https://api.weixin.qq.com/nontax/getrealname?access_token=ACCESS_TOKEN

说明:此接口返回的数据是加密,具体的加解密方法请参考数据加解密说明一节。 请求:

字段名 字段类型 是否必填 描述
wx_realname_token string 用户授权完成后回跳的url中附带的wx_realname_token参数

返回:

字段名 字段类型 是否必填 描述
errcode int32 0为成功,其他失败
errmsg string 错误信息
key_encrypt_type string key的非对称加密算法
key string 动态密钥使用非对称加密算法加密后的结果(用私钥),最后做base64编码。
data_encrypt_type string data的对称加密算法
data string data的对称加密算法:AES/ECB/PKCS5Padding

示例:

请求参数:
{
	"wx_realname_token": "8e1e219ec15953101515058721",
}

返回参数:
{
"errcode": 0,
"errmsg": "ok",
"key_encrypt_type": "RSA"
"data_encrypt_type": "AES_ECB"
"data": "f06i5EaQQiBV5uXoKcfjYFkT/UKGGuU77sVlMjpC0kKea/wz9Ow1WPlD19w3g1vXFgBqHykP1s+Iy3LjfiqYNQ=="
"key": "V60tpxnZPsBfFQhEnCWVeetm07OUk3PyH4PYozNlK1WxaYqbLAnKld/sMN+pjo8Td6mhAImcOq7Sue8h0SxGzTA4o3Wf32ff2IoUbTHPO0AgkpZJy36eECkY/TklgaVqPtqE9iJ66Qt+0/GM3pdQ3f8FYMVmkvK6m53aHn1u6cX6mL0nbYBfVOpyGOh3iIuHnBCW3IeXXa41D6DbHrzmeKbBi6T56wxHLYnmMB7P20+EzSdCQZzeY1MtdT0TT1KrlkZsL2fYKcjg/ytvGiEewH/jY4zf83AVJW3KjSDJaLZGXYsPvNHopAQTP9jz/hUtIa2fDgSAi3mGdxDsJcesmQ=="
}

10 微信非税平台接口返回码说明

返回码 说明
9200002 该订单属于其它appid
9200211 缴费通知书已禁用
9200231 缴费通知书不存在
9200232 缴费通知书已缴费
9200233 缴款通知书已取消
9200235 不允许逾期缴费
9200236 不允许在该银行缴费
9200297 当前时间暂停缴费
9201000 desc参数为空
9201001 总金额不等于各子项金额之和
9201003 总金额为0
9201004 payment_expire_date参数错误
9201005 appid参数错误
9201007 useruin参数错误
9201008 return_url参数错误
9201009 ip参数错误
9201010 order_id参数错误
9201011 refund_reason参数错误
9201012 mch_id参数错误
9201013 bill_date参数错误
9201014 bill_type参数错误
9201015 trade_type参数错误
9201016 bank_id参数错误
9201017 bank_account参数错误
9201018 payment_notice_no参数错误
9201019 department_code参数错误
9201020 payment_notice_type参数错误
9201021 region_code参数错误
9201022 department_name参数错误
9201023 总金额和从财政查询到的不一致
9201024 refund_out_id参数错误
9202001 支付流程尚未结束不允许退款
9202002 该appid没有该订单退款权限
9202003 ip限制
9202004 调用太频繁
9202005 退款失败,用户微信帐号异常
9202006 退款失败,帐户余额不足
9202011 已退款
9202012 退款失败,待退款金额加已退款金额超过总金额
9202013 refund_busi_id重复但refund_fee不一样
9202016 没有校验签名
9203000 通知不一致订单失败,通知财政失败
9203001 测试结果通知失败,请求发送失败
9203002 测试结果通知失败,返回数据错误
9203004 测试结果通知失败,返回数据解密失败
9204000 获取实名信息失败,参数错误
9204002 获取实名信息失败,参数属于其它appid
9205000 财政信息没有配置
9205001 银行信息没有配置
9205002 委办局信息没有配置
9205010 密钥没有配置
9205201 对帐单不存在
9210000 查询财政失败
9291000 openid参数错误
9291001 openid和appid不匹配
9291002 app_appid不存在
9291003 app_appid不是app类型
9291004 appid为空
9291005 appid和access_token不匹配

其它全局返回码见:全局返回码说明

11 常见问题

11.1 支付中间页支付后显示状态为处理中
回答:原因是支付结果通知财政还没有成功。 具体通知情况可以通过查询订单api查看(详见6.1.3)。

11.2 下单时出现以下情况:
回答:原因可能是下单openid与支付openid不一致。

11.3 非税支付下单返回的订单多少时间内有效? 回答:订单号10分钟有效期。

11.4 调用AccessToken时,如何添加IP白名单? 回答:登录微信公众平台,在页面的设置->安全中心->IP白名单 中添加。

11.5 在调用非税文档中的API时,出现access_token无效等问题? 回答:1、检查调用的access_token和获取时的access_token的appid是否一致。 2、检查调用的access_token是否过期,可参照缓存access_token的方法: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

11.6 下载对账单数据以什么文件格式返回? 回答:以csv格式的文本返回。

11.7 如何判断是否重复缴费? 回答:判断是否重复缴费:缴费通知书编号+执收单位编码+行政区划代码唯一。

11.8 退款周期多少日以内的交易可以退? 回答:目前最长一年。

11.9 pc场景调用支付接口的时候,openid应该怎么获取? 回答:业务方可以出示二维码,用户扫码之后,打开业务方的网页,在网页里做微信网页授权,然后就可以拿到了openid。

11.10 小程序场景下,支付成功为什么不通过前端API 返回订单状态? 回答:很多触发返回调用方小程序的操作,不会触发API wx.navigateBackMiniProgram,所以使用该接口传递参数不可靠。