1 通用接口 | 微信开放文档

_1.1 获取access_token
1.2 接收callback推送
2.1 获取ticket
2.2 获取授权页链接
2.3 接收授权完成事件
2.4 查询授权信息
2.5 拒绝领取票据接口
3.1 获取财政局s_pappid
3.2 接收授权完成事件

# 1 通用接口

# 1.1 获取access_token

接口说明
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务。关于 access_token 的更多介绍,请参考公众号开发文档。 请求方式
请求URL:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
请求方法:GET

请求参数

参数

类型

是否必填

描述

grant_type

String

获取access_token填写client_credential

appid

String

第三方用户唯一凭证

secret

String

第三方用户唯一凭证密钥,即appsecret

返回结果 数据格式:JSON

参数

类型

是否必填

描述

access_token

String

获取到的凭证

expires_in

Int

凭证有效时间。单位:秒

示例代码

返回:
{
    "access_token":"ACCESS_TOKEN",
    "expires_in":7200
}

# 1.2 接收callback推送

登录公众平台进入【开发者中心设置】,设置接收callback的URL。用户授权领取票、财政电子票据状态更新时,微信服务器会通过这个URL通知开发者。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

# 2 执收单位接口

# 2.1 获取ticket

接口说明
ticket用于加强安全性。ticket的有效期目前为2个小时,需定时刷新。建议公众号开发者使用中控服务器统一获取和刷新ticket。 请求方式
请求URL:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card
请求方法:GET
返回结果
数据格式:JSON

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

ticket

String

临时票据,用于url中signature的签名

expires_in

Int

有效时长,一般是7200s

示例代码

{   
    "errcode": 0,   
    "errmsg": "ok",   
    "ticket": "m7RQzjA_ljjEkt-JCoklRM5zrzYr-6PI09QydZmNXXz-opTqMv53aFj1ykRt_AOtvqidqZZsLhCDgwGC6nBDiA",   
    "expires_in": 7200 
}

注意事项
1 ticket有效期为7200s,7200s内重复请求ticket不变。
2 执收单位后台须对ticket进行缓存,保证正常调用。

# 2.2 获取授权页链接

接口说明
通过此接口,获取授权页链接,让用户跳转到授权页。 请求方式
请求URL:https://api.weixin.qq.com/nontax/getbillauthurl?access_token={access_token}
请求方法:POST 请求参数

参数

类型

是否必填

描述

s_pappid

String

财政局id,需要找财政局提供

order_id

String

订单id

money

Int

订单金额,以分为单位

timestamp

Int

时间戳

source

String

开票来源,web:公众号开票,app:app开票

redirect_url

String

授权成功后跳转页面

ticket

String

Api_ticket,参考获取api_ticket接口获取

返回结果 数据格式:JSON

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

当错误码为0时,有以下信息

参数

类型

是否必填

描述

auth_url

String

授权链接

expire_time

Int

过期时间,单位为秒,授权链接会在一段时间之后过期

示例代码

请求:
{
    "s_pappid": "wxabcd",
    "order_id": "1234",
    "money": 11,
    "timestamp": 1474875876,
    "source": "web",
    "redirect_url": "https://mp.weixin.qq.com",
    "ticket": "tttt"
}
返回:
{
    "errcode": 0, 
    "errmsg": "ok", 
    "auth_url": "http://auth_url",
    "expire_time": 7200
}

# 2.3 接收授权完成事件

接口说明
用户授权完成后,执收单位的公众号会收到授权完成的事件,关于事件推送请参考接受callback推送
返回结果
数据格式:xml

参数

类型

描述

ToUserName

String

公众号标识

FromUserName

String

用户 openID

CreateTime

Int

事件时间

MsgType

String

固定为event

Event

String

固定为user_authorize_invoice

SuccOrderId

String

授权成功的订单号

FailOrderId

String

授权失败的订单号

AuthorizeAppId

String

用于接收事件推送的公众号的AppId

Source

String

授权来源,web表示来自微信内H5

示例代码

<xml>
    <ToUserName><![CDATA[gh_fc0a06a20993]]></ToUserName>
    <FromUserName><![CDATA[oZI8Fj040-be6rlDohc6gkoPOQTQ]]></FromUserName>
    <CreateTime>1475134700</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[user_authorize_invoice]]></Event>
    <SuccOrderId><![CDATA[1202933957956]]></SuccOrderId>
    <FailOrderId><![CDATA[]]></FailOrderId>
    <AuthorizeAppId><![CDATA[]]></AuthorizeAppId>
    <Source><![CDATA[]]></Source>
</xml>

# 2.4 查询授权信息

接口说明
执收单位可以调用该接口查询订单是否有被用户授权。
请求方式
请求URL:https://api.weixin.qq.com/card/invoice/getauthdata?access_token={access_token}
请求方法:POST
请求参数

参数

类型

是否必填

描述

order_id

String

订单order_id

s_pappid

String

财政局id

返回结果 数据格式:JSON

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

示例代码

请求参数
{
    "s_pappid": "{s_pappid}",
    "order_id": "{order_id}"
}
返回数据:
{
  "errcode": 0,
  "errmsg": "ok",
  "invoice_status": "auth success",
  "auth_time": 1480342498
}

# 2.5 拒绝领取票据接口

接口说明
用户完成授权后,执收单位若发现用户提交信息错误、或者发生了退款时,可以调用该接口拒绝领取票并告知用户。
请求方式
请求URL:https://api.weixin.qq.com/card/invoice/rejectinsert?access_token={access_token}
请求方法:POST
请求参数

参数

类型

是否必填

描述

s_pappid

String

财政局id

order_id

String

订单id

reason

String

撤销原因

url

String

跳转链接

返回结果

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

示例代码

请求:
{
    "s_pappid": "d3JCEfhGLW+q0iGP+o9",
    "order_id": "111229",
    "reason": "1234",
    "url": "avb"
}
返回:
{
    "errcode": 0, 
    "errmsg": "ok"
}

# 3 财政局接口

# 3.1 获取财政局s_pappid

接口说明
可以通过此接口获取财政局的s_pappid,并透传给执收单位,执收单位可以通过该s_pappid参数指定提供开票服务的财政局。同一个财政局的s_pappid是一样的,所以只需要调用一次接口,并保存起来。
请求方式
请求URL:https://api.weixin.qq.com/card/invoice/seturl?access_token={access_token}
请求方法:POST

请求参数
请求参数格式为JSON,传入数据为空,即传入{}
返回结果

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

invoice_url

String

财政局须将url内的s_pappid给到服务的执收单位,执收单位在请求授权链接时会向微信传入该参数

示例代码

请求
{}
返回
{
  "errcode": 0,
  "errmsg": "ok",
 "invoice_url": "https://mp.weixin.qq.com/bizmall/authinvoice?action=list&s_pappid=d3xxxxxxxxxxxxxGLSS0wrL14No8c1"
}

# 3.2 创建财政电子票据接口

接口说明
财政局可以通过这个接口帮助执收单位创建一张财政电子票据模板。同一个财政局可以对应多个执收单位,同一个执收单位,使用同一个card_id,不同的执收单位,使用不同的card_id。
请求方式
请求URL:https://api.weixin.qq.com/nontax/createbillcard?access_token={access_token}
请求方法:POST
请求参数
数据格式:JSON
财政电子票据invoice_info字段

参数

类型

是否必填

描述

base_info

Object

财政电子票据信息

payee

string

收款方(开票方)全称,显示在财政电子票据详情内

base_info字段

参数

类型

是否必填

描述

logo_url

String

财政局LOGO,请参考上传图片接口

返回结果

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

当错误码为0是,有以下信息:

参数

类型

是否必填

描述

card_id

String

票据card_id

示例代码

请求:
{
    "invoice_info" : {
        "payee" : "测试非税票据",
        "base_info" : {
            "logo_url": : "http://mmbiz.qpic.cn/mmbiz/iaL1LJM1mF9aRKPZJkmG8xXhiaHqkKSVMMWeN3hLut7X7hicFNjakmxibMLGWpXrEXB33367o7zHN0CwngnQY7zb7g/0"
        }
    }
}
返回:
{
    "errcode": 0, 
    "errmsg": "ok", 
    "card_id": "pjZ8Yt9WoOePThU0NfUKz5-tBEWU"
}

# 3.3 上传pdf

接口说明
财政局可以将票据pdf上传到微信财政电子票据平台,用于开票使用。上传的pdf有三天的有效期限制,需要在过期之前调用插卡接口。
请求方式
请求URL:https://api.weixin.qq.com/card/invoice/platform/setpdf?access_token={access_token}
请求方法:POST
请求参数
数据格式:multipart/form-data

参数

是否必填

描述

pdf

form-data中媒体文件标识,有filename、filelength、content-type等信息

返回结果 数据格式:JSON

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

s_media_id

String

获取pdf和插卡使用,s_media_id有效期有3天

示例代码

请求:
------WebKitFormBoundary2exwM16BY25kVBgf
Content-Disposition: form-data; name="pdf"; filename="1133090578170938.pdf"
Content-Type: application/pdf
Pdf content
------WebKitFormBoundary2exwM16BY25kVBgf--
返回:
{
  "errcode": 0,
  "errmsg": "ok",
  "s_media_id": “3015806758683707”
}

# 3.4 获取pdf

接口说明
获取财政电子票据pdf。 请求方式
请求URL:https://api.weixin.qq.com/card/invoice/platform/getpdf?access_token={access_token}
请求方法:POST
请求参数
数据格式:JSON

参数

类型

是否必填

描述

s_media_id

string

财政电子票据s_media_id

actin

String

填“get_url”

返回结果
数据格式:JSON

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

pdf_url

String

pdf的url

pdf_url_expire_time

Int

pdf_url过期时间,7200秒

示例代码

请求:
{
         "action": "get_url",
         "s_media_id": "75195574948725301"
}
返回:
{
    "errcode": 0,
    "errmsg": "ok",
    "pdf_url": "https://mp.weixin.qq.com/intp/invoice/getpdf?action=media_pdf&media_key=dFRnTkV6WCswNjB1V1czZ0tVU3MhaX4yb2pxeEVSY0teSCtuflY6UXAifD5rL09kTjFpOFVWKyJGNCgxTCtkJER6VjFlRCtVU2JKcS5FZw",
    "pdf_url_expire_time": 7200
}

# 3.5 将财政电子票据添加到用户微信卡包

接口说明
执收单位完成用户插卡授权后,向财政局请求给某一个订单号进行领取财政电子票据,财政局须调用该接口对用户进行开票。
请求方式
请求URL:https://api.weixin.qq.com/nontax/insertbill?access_token={access_token}
请求方法:POST
请求参数
数据格式:JSON

参数

类型

是否必填

描述

order_id

string

财政电子票据order_id

card_id

String

财政电子票据card_id

appid

String

该订单号授权时使用的appid,一般为执收单位appid

card_ext

Object

财政电子票据具体内容

card_ext包含以下内容:

参数

类型

是否必填

描述

user_card

Object

用户信息结构体

user_card中包含一个invoice_user_data对象,invoice_user_data包含以下字段:

参数

类型

是否必填

描述

fee

Int

财政电子票据的金额,以分为单位

title

String

财政电子票据的缴费单位

billing_time

Int

财政电子票据的开票时间,为10位时间戳(utc+8)

billing_no

String

财政电子票据代码

billing_code

String

财政电子票据号码

s_pdf_media_id

String

财政电子票据pdf文件上传到微信财政电子票据平台后,会生成一个财政电子票据s_media_id,该s_media_id可以直接用于开财政电子票据,上传参考“5、上传pdf”

返回结果 数据格式:JSON

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

当错误码为0是,有以下信息:

参数

类型

是否必填

描述

code

String

财政电子票据code

openid

String

用户标识,即领取到财政电子票据的openid

示例代码

请求:
{
    "order_id" : "1511169724",
    "card_ext" : {
        "user_card" : {
            "invoice_user_data" : {
                "billing_time" : "1511169724",
                "billing_code" : "aabbccdd",
                "billing_no" : "1511169724",
                "s_pdf_media_id" : "s_pdf_media_id",
                "fee" : 123,
                "title" : "灌哥发票"
            }
        }
    },
    "card_id" : "pjZ8Yt7xiy3b9UfffRIA4Tm2xTnw",
    "appid" : "wxc0b84a53ed8e8d29"
}
返回:
{
    "errcode": 0, 
    "errmsg": "ok", 
    "code": "682xxxx661927", 
    "openid": "ojZ8Ytz4lESxxxx_R1TvB2Kds"
}

# 3.6 状态更新事件推送

接口说明
当报销方更新财政电子票据状态的时候,公众平台会推送一条消息公众号消息通知财政局设置的接收事件回调的url,关于事件推送参考接口6.1.2
返回结果
数据格式:XML

参数

类型

是否必填

描述

ToUserName

String

公众号标识

FromUserName

String

用户openid

CreateTime

Int

事件时间

MsgType

String

固定为"event"

Event

String

固定为"update_invoice_status"

Status

String

财政电子票据报销状态

CardId

String

财政电子票据id

Code

String

财政电子票据code

示例代码

<xml>
<ToUserName><![CDATA[gh_9e1765b5568e]]></ToUserName>
<FromUserName><![CDATA[ojZ8Ytz4lESgdWZ34L_R1TvB2Kds]]></FromUserName>
<CreateTime>1478068440</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[update_invoice_status]]></Event>
<Status><![CDATA[INVOICE_REIMBURSE_INIT]]></Status>
<CardId><![CDATA[pjZ8Yt7Um2jYxzneP8GomnxoVFWo]]></CardId>
<Code><![CDATA[186921658591]]></Code>
</xml>

# 3.7 更新电子票据状态

接口说明
如果财政局的财政电子票据状态发生改变,需要调用该接口,将状态同步给公众平台,确保双方财政电子票据的状态一致。
请求方式
请求URL:https://api.weixin.qq.com/card/invoice/platform/updatestatus?access_token={access_token}
请求方法:POST
请求参数
数据格式:JSON

参数

类型

是否必填

描述

card_id

String

财政电子票据id

code

String

财政电子票据code

reimburse_status

String

财政电子票据报销状态

返回结果

参数

类型

是否必填

描述

errcode

Int

错误码

errmsg

String

错误信息

示例代码

请求:
{
    "card_id": "pjZ8Yt7Um2jYxzneP8GomnxoVFWo",
    "code": "186921658591",
    "reimburse_status": "INVOICE_REIMBURSE_INIT"
}
返回:
{
    "errcode": 0, 
    "errmsg": "ok"
}

# 4 备注

# 4.1 订单授权状态

状态

描述

never auth

用户未授权

auth success

用户已授权

auth time out

用户授权后,领取票据超时

invoice send

用户授权后,领取票成功

reject insert

撤销领取票据

invoice sending

用户授权后,领取中

# 4.2 错误码

状态

描述

备注

0

OK

成功

72015

unauthorized create invoice

没有操作权限,请检查是否已开通相应权限。

72031

invalid params

参数错误。可能为请求中包括无效的参数名称或包含不通过后台校验的参数值

72035

biz reject insert

财政电子票据已经被拒绝领取。若 order_id 被用作参数调用过拒绝领取接口,再使用此 order_id 插卡机会报此错误

72036

invoice is busy

财政电子票据正在被修改状态,请稍后再试

72038

invoice order never auth

订单没有授权,可能是财政局的s_pappid 、执收单位 appid 、订单 order_id 不匹配

72040

invoice pdf error

Pdf 无效,请提供真实有效的 pdf

72042

billing_code and billing_no repeated

票据号码和票据代码重复

72043

billing_code or billing_no size error

票据号码和票据代码错误

40078

invalid card status

card_id 未授权。 若开发者使用沙箱环境报此错误,主要因为未将调用接口的微信添加到测试把名单; 若开发者使用正式环境报此错误,主要原因可能为:调用接口公众号未开通卡券权限,或创建 card_id 与插卡时间间隔过短。


Original url: Access
Created at: 2019-11-21 12:17:51
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论