商户接口列表


上一篇 : 报销业务场景说明 下一篇: 开票平台接口列表



1 获取授权页ticket

2 获取授权页链接

3 小程序打开授权页

4 ios客户端打开授权页

5 android客户端打开授权页

6 收取授权完成事件推送

7 查询授权完成状态

8 拒绝开票

9 设置授权页字段信息

10 查询授权页字段信息

11 关联商户号与开票平台

12 查询商户号与开票平台关联情况

13 指定单笔交易支持支付后开票

14 统一开票接口-开具蓝票

15 统一开票接口-发票冲红

16 统一开票接口-查询已开发票

17 错误码


1 获取授权页ticket

接口说明

商户在调用授权页前需要先获取一个7200s过期的授权页ticket,在获取授权页接口中,该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 临时票据,用于在获取授权链接时作为参数传入
expires_in Int ticket 的有效期,一般为 7200 秒

示例代码

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

2 获取授权页链接

接口说明

本接口供商户调用。商户通过本接口传入订单号、开票平台标识等参数,获取授权页的链接。在微信中向用户展示授权页,当用户点击了授权页上的“领取发票”/“申请开票”按钮后,即完成了订单号与该用户的授权关系绑定,后续开票平台可凭此订单号发起将发票卡券插入用户卡包的请求,微信也将据此授权关系校验是否放行插卡请求。

授权页包括三种样式,商户可以通过传入不同type的值进行调用。各样式授权页如下图所示:

0 (1).jpg

不同样式授权页作用如下:

type=0(申请开票类型):用于商户已从其它渠道获得用户抬头,拉起授权页发起开票,开票成功后保存到用户卡包;

type=1(填写抬头申请开票类型):调用该类型时,页面会显示微信存储的用户常用抬头。用于商户未收集用户抬头,希望为用户减少填写步骤。需要留意的是,当使用支付后开票业务时,只能调用type=1类型。

type=2(领取发票类型):用于商户发票已开具成功,拉起授权页后让用户将发票归集保存到卡包。

请求方式

请求URL:https://api.weixin.qq.com/card/invoice/getauthurl?access_token={access_token}

请求方法:POST

请求参数

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
s_pappid String 开票平台在微信的标识号,商户需要找开票平台提供
order_id String 订单id,在商户内单笔开票请求的唯一识别号,
money Int 订单金额,以分为单位
timestamp Int 时间戳
source String 开票来源,app:app开票,web:微信h5开票,wxa:小程序开发票
redirect_url String 授权成功后跳转页面。本字段只有在source为H5的时候需要填写,引导用户在微信中进行下一步流程。app开票因为从外部app拉起微信授权页,授权完成后自动回到原来的app,故无需填写。
ticket String 从上一环节中获取
type Int 授权类型,0:开票授权,1:填写字段开票授权,2:领票授权

返回结果

返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode Int 错误码
errmsg String 错误信息

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

参数 类型 是否必填 描述
auth_url String 授权链接
appid String source为wxa时才有

示例代码

请求:
{
   "s_pappid": "wxabcd",
   "order_id": "1234",
   "money": 11,
   "timestamp": 1474875876,
   "source": "web",
   "redirect_url": "https://mp.weixin.qq.com",
   "ticket": "tttt",
   "type": 1
}
返回:
{
   "errcode": 0,
   "errmsg": "ok",
   "auth_url": "http://auth_url"
}
如果是小程序,返回:
{
   "errcode": 0,
   "errmsg": "ok",
   "auth_url": "auth_url"
   "appid": "appid"
}

3 小程序打开授权页

接口说明

小程序需要先使用小程序账号调用获取授权页链接接口,获取到授权连接,才能打开授权页。

请求方式

在小程序中调用wx.navigateToMiniProgram方法。

请求参数

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
appid string 获取授权页链接返回的appid
path string 获取授权页链接返回的auth_url

返回结果

用户授权的结果,将通过小程序的callback通知商户。

示例代码

wx.navigateToMiniProgram({
   appId: '{appid}',
   path: '{auth_url}',
   success(res) {
       console.log('navigateToMiniProgram success:', res)
   },
   fail(error){
       console.log('navigateToMiniProgram fail:', error)
   },
   complete(res){
       console.log('navigateToMiniProgram complete:', res)
   }
})

4 ios客户端打开授权页

接口说明

ios客户端需要先使用open账号调用获取授权页链接接口,获取到授权连接,才能打开授权页。

请求方式

调用sendReq接口

请求参数

参数 类型 是否必填 描述
urlString string 获取授权页链接返回的auth_url

返回结果

客户端接收微信发票授权返回接口,需要实现onResp方法。返回结果字段如下:

参数 类型 是否必填 描述
errCode int 错误码
wxOrderId string 授权订单号

示例代码

发送请求
WXInvoiceAuthInsertReq *req = [[WXInvoiceAuthInsertReq alloc] init];
req.urlString = self.authUrl;
[WXApi sendReq:req];

接收返回
- (void) onResp:(BaseResp *)resp
{
   if ([resp isKindOfClass:[WXInvoiceAuthInsertResp class]]) {
       WXInvoiceAuthInsertResp *wxResp = (WXInvoiceAuthInsertResp *) resp;
       NSString *strTitle = @"微信回跳";
       NSString *strMsg = [NSString stringWithFormat:@"errcode: %d orderid:%@", wxResp.errCode, wxResp.wxOrderId];
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
       [alert show];
   }
}

备注

用户从商户客户端跳到微信客户端进行发票开票授权之后,有可能不返回商户客户端(比如用户直接杀死微信进程),所以商户不能依赖微信客户端的返回来判断用户是否有授权。微信电子发票平台提供了公众号callback机制,当用户进行发票开票授权时,微信电子发票平台会通过callback通知商户。另外,微信电子发票平台还提供了查询是否授权接口。

正确的使用方法:

1 商户使用open账号调用接口获取授权连接

2 用户在商户客户端进入开发票页面,通过微信sdk跳转到微信客户端,进行发票插卡授权

3 商户公众号接收callback,确定用户是否有授权

4 商户客户端接收到微信客户端发票插卡授权的回跳时,使用open账号调用接口查询用户是否有授权

5 用户在商户客户端再次进入开发票页面时,使用open账号调用接口查询用户是否有授权

6 如果用户有授权,就通知开票平台开发票

5 android客户端打开授权页

接口说明

android客户端需要先调用获取授权页链接接口,获取到授权连接,才能打开授权页。

请求方式

调用sendReq接口

请求参数

参数 类型 是否必填 描述
urlString string 获取授权页链接返回的auth_url

返回结果

客户端接收微信发票授权返回接口,需要实现onResp方法。返回结果字段如下:

参数 类型 是否必填 描述
errCode int 错误码
wxOrderId string 授权订单号

示例代码

发送请求
WXInvoiceAuthInsert.Req oReq = new WXInvoiceAuthInsert.Req();
oReq.url = sJumpUrl;
api.sendReq(oReq);

接收返回
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
   private static final String APP_ID = "wxxxxxxxxxxx";
   private IWXAPI api;

   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       api = WXAPIFactory.createWXAPI(this, APP_ID, true);
       api.handleIntent(getIntent(), this);
   }

   @Override
   public void onReq(BaseReq baseReq) {
   }

   @Override
   public void onResp(BaseResp baseResp) {
       Toast.makeText(getApplicationContext(), "onResp", Toast.LENGTH_LONG).show();
       if (baseResp.getClass().equals(WXInvoiceAuthInsert.Resp.class)) {
           WXInvoiceAuthInsert.Resp oResp = (WXInvoiceAuthInsert.Resp) baseResp;
           String sLog = "errcode:" + oResp.errCode + " wxorderid:" + oResp.wxOrderId;
           System.out.print(sLog);
       }
   }
}

备注

用户从商户客户端跳到微信客户端进行发票开票授权之后,有可能不返回商户客户端(比如用户直接杀死微信进程),所以商户不能依赖微信客户端的返回来判断用户是否有授权。微信电子发票平台提供了公众号callback机制,当用户进行发票开票授权时,微信电子发票平台会通过callback通知商户。另外,微信电子发票平台还提供了查询是否授权接口。

正确的使用方法:

1 商户使用open账号调用接口获取授权连接

2 用户在商户客户端进入开发票页面,通过微信sdk跳转到微信客户端,进行发票插卡授权

3 商户公众号接收callback,确定用户是否有授权

4 商户客户端接收到微信客户端发票插卡授权的回跳时,使用open账号调用接口查询用户是否有授权

5 用户在商户客户端再次进入开发票页面时,使用open账号调用接口查询用户是否有授权

6 如果用户有授权,就通知开票平台开发票

6 收取授权完成事件推送

接口说明

在用户授权同意发票存入自己微信账户后,商户可以收到授权完成的状态推送。收到推送后,可以将order_id连同开票信息一并发送给开票平台,以便开票平台在开票成功后将电子发票插入用户卡包。

该事件将发送至开发者填写的URL(登录公众平台进入【开发者中心设置】,如果是open账号,也得用公众号账号来接,参考下图)。

Xw_fRw0B4PZAFlPBbEaqjXFhgcGEHNwIsmUD8iFdWtdG_oX9lmKu0FTUeYHVY6Qx.png

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

返回结果

返回结果为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:公众号开票,app:app开票,wxa:小程序开票,wap:h5开票

示例代码

<?xml version="1.0" encoding="utf-8"?>
<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>

7 查询授权完成状态

接口说明

本接口的调用场景包括两个:

一、若商户在某次向用户展示授权页后经过较长时间仍未收到授权完成状态推送,可以使用本接口主动查询用户是否实际上已完成授权,只是由于网络等原因未收到授权完成事件;

二、若商户向用户展示的授权页为type=1类型,商户在收到授权完成事件推送后需要进一步获取用户的开票信息,也可以调用本接口。

请求方式

请求URL:https://api.weixin.qq.com/card/invoice/getauthdata?access_token={access_token}

请求方法:POST

请求参数

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
order_id string 发票order_id
s_pappid String 开票平台在微信的标识,由开票平台告知商户

返回结果

返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode Int 错误码
errmsg String 错误信息
invoice_status String 订单授权状态,当errcode为0时会出现
auth_time Int 授权时间,为十位时间戳(utc+8),当errcode为0时会出现
user_auth_info Object 用户授权信息结构体,仅在授权页为type=1时出现

示例代码

请求:
{
   "s_pappid": "{s_pappid}",
   "order_id": "{order_id}"
}
返回:
若用户填入的是个人抬头:
{
   "errcode": 0,
   "errmsg": "ok",
   "invoice_status": "auth success",
   "auth_time": 1480342498,
   "user_auth_info": {
       "user_field": {
           "title": "Dhxhhx ",
           "phone": "5554545",
           "email": "dhxhxhhx@qq.cind",
           "custom_field": [
               {
                   "key": "field1",
                   "value": "管理理论"
               }
           ]
       }
   }
}
若用户填入的是单位抬头:
{
   "errcode": 0,
   "errmsg": "ok",
   "invoice_status": "auth success",
   "auth_time": 1480342897,
   "user_auth_info": {
       "biz_field": {
           "title": "xx公司",
           "tax_no": "6464646766",
           "addr": "xx大厦",
           "phone": "1557548768",
           "bank_type": "xx银行",
           "bank_no": "545454646",
           "custom_field": [
               {
                   "key": "field2",
                   "value": "哈哈哈啊"
               }
           ]
       }
   }
}

8 拒绝开票

接口说明

用户完成授权后,商户若发现用户提交信息错误、或者发生了退款时,可以调用该接口拒绝开票并告知用户。拒绝开票后,该订单无法向用户再次开票。已经拒绝开票的订单,无法再次使用,如果要重新开票,需使用新的order_id,获取授权链接,让用户再次授权。
调用接口后用户侧收到的通知消息如下图所示:

0.jpg

请求方式

请求URL:https://api.weixin.qq.com/card/invoice/rejectinsert?access_token={access_token}

请求方法:POST

请求参数

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
s_pappid string 开票平台在微信上的标识,由开票平台告知商户
order_id string 订单 id
reason string 商家解释拒绝开票的原因,如重复开票,抬头无效、已退货无法开票等
url string 跳转链接,引导用户进行下一步处理,如重新发起开票、重新填写抬头、展示订单情况等

返回结果

返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode int 错误码
errmsg string 错误信息

示例代码

请求:
{
   "s_pappid": "d3JCEfhGLW+q0iGP+o9",
   "order_id": "111229",
   "reason": "1234",
   url": "http://xxx.com"
}
返回:
{
   "errcode": 0,
   "errmsg": "ok"
}

9 设置授权页字段信息

接口说明

当用户使用type=1的类型的授权页时,可以使用本接口设置授权页上需要用户填写的信息。若使用type=0或type=2类型的授权页,无需调用本接口。本接口为一次性设置,后续除非在需要调整页面字段时才需要再次调用。

注意,设置为显示状态的字段均为必填字段,用户若不填写将无法进入后续流程

请求方式

请求URL:https://api.weixin.qq.com/card/invoice/setbizattr?action=set_auth_field&access_token={access_token}

请求方法:POST

请求参数

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
auth_field Object 授权页字段

auth_field为Object,包含以下字段:

参数 类型 是否必填 描述
user_field Object 授权页个人发票字段
biz_field Object 授权页单位发票字段

user_field为Object,包含以下字段:

参数 类型 是否必填 描述
show_title Int 是否填写抬头,0为否,1为是
show_phone Int 是否填写电话号码,0为否,1为是
show_email Int 是否填写邮箱,0为否,1为是
require_phone Int 电话号码是否必填,0为否,1为是
require_email Int 邮箱是否必填,0位否,1为是
custom_field Object 自定义字段

biz_field为Object,包含以下字段:

参数 类型 是否必填 描述
show_title Int 是否填写抬头,0为否,1为是
show_tax_no Int 是否填写税号,0为否,1为是
show_addr Int 是否填写单位地址,0为否,1为是
show_phone Int 是否填写电话号码,0为否,1为是
show_bank_type Int 是否填写开户银行,0为否,1为是
show_bank_no Int 是否填写银行帐号,0为否,1为是
require_tax_no Int 税号是否必填,0为否,1为是
require_addr Int 单位地址是否必填,0为否,1为是
require_phone Int 电话号码是否必填,0为否,1为是
require_bank_type Int 开户类型是否必填,0为否,1为是
require_bank_no Int 税号是否必填,0为否,1为是
custom_field Object 自定义字段

custom_field为List,每个对象包含以下字段:

参数 类型 是否必填 描述
key String 字段名
is_require Int 0:否,1:是, 默认为0
notice String 提示文案

返回结果

返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode Int 错误码
errmsg String 错误信息

示例代码

请求:
{
   "auth_field" : {
       "user_field" : {
           "require_phone" : 1,
           "custom_field" : [
               {
                   "is_require" : 1,
                   "key" : "field1"
               }
           ],
           "show_email" : 1,
           "show_title" : 1,
           "show_phone" : 1,
           "require_email" : 1
       },
       "biz_field" : {
           "require_phone" : 0,
           "custom_field" : [
               {
                   "is_require" : 0,
                   "key" : "field2"
               }
           ],
           "require_bank_type" : 0,
           "require_tax_no" : 0,
           "show_addr" : 1,
           "require_addr" : 0,
           "show_title" : 1,
           "show_tax_no" : 1,
           "show_phone" : 1,
           "show_bank_type" : 1,
           "show_bank_no" : 1,
           "require_bank_no" : 0
       }
   }
}
返回:
{
   "errcode": 0,
   "errmsg": "ok"
}

10 查询授权页字段信息

接口说明

商户可以通过本接口查询到授权页的字段设置情况。

请求方式

请求URL:https://api.weixin.qq.com/card/invoice/setbizattr?action=get_auth_field&access_token={access_token}

请求方法:POST

请求参数

请求参数使用JSON格式,传入空值,即{}

返回结果

返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode Int 错误码
errmsg String 错误信息
auth_field Object 当错误码为0时非空,为查询所得的授权页字段设置情况

auth_field为Object,包含以下字段:

参数 类型 是否必填 描述
user_field Object 授权页个人发票字段
biz_field Object 授权页单位发票字段

user_filed为Object,包含以下字段:

参数 类型 是否必填 描述
show_title Int 是否填写抬头,0为否,1为是
show_phone Int 是否填写电话号码,0为否,1为是
show_email Int 是否填写邮箱,0为否,1为是
require_phone Int 电话是否必填,0为否,1为是
require_email Int 邮箱是否必填,0为
custom_field Object 自定义字段

biz_field为Object,包含以下字段:

参数 类型 是否必填 描述
show_title Int 是否填写抬头,0为否,1为是
show_tax_no Int 是否填写税号,0为否,1为是
show_addr Int 是否填写单位地址,0为否,1为是
show_phone Int 是否填写电话号码,0为否,1为是
show_bank_type Int 是否填写开户银行,0为否,1为是
show_bank_no Int 是否填写银行帐号,0为否,1为是
require_tax_no Int 税号是否必填,0为否,1为是
require_addr Int 单位地址是否必填,0为否,1为是
require_phone Int 电话号码是否必填,0为否,1为是
require_bank_type Int 开户类型是否必填,0为否,1为是
require_bank_no Int 税号是否必填,0为否,1为是
require_tax_no Int 税号是否必填,0为否,1为是
custom_field Object 自定义字段

custom_field为list每个对象包括以下字段:

参数 类型 是否必填 描述
key String 自定义字段名称,最长5个字
Is_require Int 自定义字段是否必填,0位否,1为是

示例代码

请求: {}
返回:
{
   "errcode": 0,
   "errmsg": "ok",
   "auth_field": {
       "user_field": {
           "show_title": 1,
           "show_phone": 1,
           "show_email": 1,
           "custom_field": [{"key": "field1"}]
       },
       "biz_field": {
           "show_title": 1,
           "show_tax_no": 1,
           "show_addr": 1,
           "show_phone": 1,
           "show_bank_type": 1,
           "show_bank_no": 1,
           "custom_field": [{"key": "field2"}]
       }
   }
}

11 关联商户号与开票平台

接口说明

商户使用支付后开票,需要先将自身的商户号和开票平台的识别号进行关联,开票平台识别号由开票平台根据微信规则生成后告知商户。本接口为一次性设置,后续一般在遇到开票平台识别号变更,或者商户更换开票平台时才需要调用本接口重设对应关系。

若商户已经实现电子发票的微信卡包送达方案,调用本接口前,建议在微信支付商户平台中确认商户号所绑定的公众号和拉起授权页的公众号是同一个。若不是同一个,仍需重新使用商户号所绑定公众号去调通拉取授权页的接口。

请求方式

请求URL:https://api.weixin.qq.com/card/invoice/setbizattr?action=set_pay_mch&access_token={access_token}

请求方法:POST

请求参数

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
paymch_info Object 微信商户号与开票平台关系信息

paymch_info是Object,里面包括以下字段:

参数 类型 是否必填 描述
mchid string 微信支付商户号
s_pappid string 为该商户提供开票服务的开票平台 id ,由开票平台提供给商户

返回结果

返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode int 错误码
errmsg string 错误信息

示例代码

请求:
{
   "paymch_info":
   {
       "mchid": "1234",
       "s_pappid": "wxabcd"
   }
}
返回:
{
    "errcode": 0,
   "errmsg": "ok"
}

12 查询商户号与开票平台关联情况

接口说明

商户可以通过本接口查询到与开票平台的绑定情况。

请求方式

请求URL:https://api.weixin.qq.com/card/invoice/setbizattr?action=get_pay_mch&access_token={access_token}

请求方法:POST

请求参数

请求参数使用JSON格式,传入空值{}

返回结果

返回结果数据使用JSON格式,结果字段清单如下:

参数 类型 是否必填 描述
errcode int 错误码
errmsg string 错误信息
paymch_info object 当 errcode 为 0 时出现,为商户号与开票平台的关联情况

当errcode为0时,返回数据中还有paymch_info对象,paymch_info包括以下字段:

参数 类型 是否必填 描述
mchid string 微信支付商户号
s_pappid string 绑定的开票平台识别码

示例代码

请求: {}
返回:
{
   "errcode": 0,
   "errmsg": "ok",
   "paymch_info":
   {
       "mchid": "1234",
       "s_pappid": "wxabcd"
   }
}

13 指定单笔交易支持支付后开票

接口说明

对于可以开具电子发票的商户,完成了微信商户号与开票平台的关联设置后,可以以单笔支付为单位,指定在支付成功消息上是否出现开发票的入口。让用户可以通过该入口发起开票。

请求方式

指定单笔交易支持支付后开票使用的接口协议、调用方式与线上
支付文档一致,本功能是在原支付接口上新增字段。

请求参数

用户确认下单后,商户在支付接口(统一下单/提交刷卡支付/委托代扣)中新增提交receipt字段作为标识需要开电子发票。字段参数说明如下:

参数 类型 是否必填 描述
receipt string Y ,传入 Y 时,支付成功消息和支付详情页将出现开票入口

返回结果

与原支付接口返回结果相一致。

示例代码

<xml>
   <appid>wx2421b1c4370ec43b </appid>
   <attach>支付测试</attach>
   <body>JSAPI支付测试</body>
   <mch_id>10000100</mch_id>
   <receipt>Y</receipt>
   <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
   <notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
   <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
   <out_trade_no>1415659990</out_trade_no>
   <spbill_create_ip>14.23.150.211</spbill_create_ip>
   <total_fee>1</total_fee>
   <trade_type>JSAPI</trade_type>
   <sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>

14 统一开票接口-开具蓝票

接口说明
对于使用微信电子发票开票接入能力的商户,在公众号后台选择任何一家开票平台的套餐,都可以使用本接口实现电子发票的开具。

请求方式
请求URL:https://api.weixin.qq.com/card/invoice/makeoutinvoice?access_token={access_token}

请求方法:POST

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
wxopenid String 用户的openid 用户知道是谁在开票
ddh String 订单号,企业自己内部的订单号码
fpqqlsh String 发票请求流水号,唯一查询发票的流水号
nsrsbh String 纳税人识别码
nsrmc String 纳税人名称
nsrdz String 纳税人地址
nsrdh String 纳税人电话
nsrbank String 纳税人开户行
nsrbankid String 纳税人银行账号
ghfmc Sring 购货方名称
ghfnsrsbh String 购货方识别号
ghfdz String 购货方地址
ghfdh String 购货方电话
ghfbank String 购货方开户行
ghfbankid String 购货方银行帐号
kpr String 开票人
skr String 收款人
fhr String 复核人
jshj String 价税合计
hjse String 合计金额
bz String 备注
hylx String 行业类型 0 商业 1其它
invoicedetail_list List 发票行项目数据

invoicedetail_list是一个JSON list,其中每一个对象的机构为

参数 类型 是否必填 描述
fphxz String 发票行性质 0 正常 1折扣 2 被折扣
spbm String 商品编码
xmmc String 项目名称
dw String 计量单位
ggxh String 规格型号
xmsl String 项目数量
xmdj String 项目单价
xmje String 项目金额 不含税,单位元 两位小数
sl String 税率 精确到两位小数 如0.01
se String 税额 单位元 两位小数

返回结果
返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode int 错误码,见错误码列表
errmsg string 错误信息

示例代码

请求
{
   "invoiceinfo" :
   {
       "wxopenid": "os92LxEDbiOw7kWZanRN_Bb3Q45I",
       "ddh" : "30000",
       "fpqqlsh": "test20160511000461",
       "nsrsbh": "110109500321654",
       "nsrmc": "百旺电子测试1",
       "nsrdz": "深圳市",
       "nsrdh": "0755228899988",
       "nsrbank": "中国银行广州支行",
       "nsrbankid": "12345678",
       "ghfnsrsbh": "110109500321654",
       "ghfmc": "周一",
       "ghfdz": "广州市",
       "ghfdh": "13717771888",
       "ghfbank": "工商银行",
       "ghfbankid": "12345678",
       "kpr": "小明",
       "skr": "李四",
       "fhr": "小王",
       "jshj": "159",
       "hjje": "135.9",
       "hjse": "23.1",
       "bz": "备注",
       "hylx": "0",
       "invoicedetail_list": [
           {
               "fphxz": "0",
               "spbm": "1090418010000000000",
               "xmmc": "洗衣机",
               "dw": "台",
               "ggxh": "60L",
               "xmsl": "1",
               "xmdj": "135.9",
               "xmje": "135.9",
               "sl": "0.17",
               "se": "23.1"
           }
       ],
   }
}
返回
{
 "errcode": 0,
 "errmsg": "sucesss"
}

15 统一开票接口-发票冲红

接口说明
对于使用微信电子发票开票接入能力的商户,在公众号后台选择任何一家开票平台的套餐,都可以使用本接口实现电子发票的冲红。

请求方式
请求URL:https://api.weixin.qq.com/card/invoice/clearoutinvoice?access_token={access_token}

请求方法:POST

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述
wxopenid String 用户的openid 用户知道是谁在开票
fpqqlsh String 发票请求流水号,唯一查询发票的流水号
nsrsbh String 纳税人识别码
nsrmc String 纳税人名称
yfpdm String 原发票代码,即要冲红的蓝票的发票代码
yfphm String 原发票代码,即要冲红的蓝票的发票号码

返回结果
返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode int 错误码,见错误码列表
errmsg string 错误信息,见错误码列表

示例代码

请求
{
   "invoiceinfo" :
   {
       "wxopenid": "os92LxEDbiOw7kWZanRN_Bb3Q45I",
       "fpqqlsh": "test20160511000400",
       "nsrsbh": "110109500321654",
       "nsrmc": "百旺电子测试1",
       "yfpdm" : "050003521100",
       "yfphm" : "30329969",

   }
}

返回
{
 "errcode": 0,
 "errmsg": "sucesss"
}

16 统一开票接口-查询已开发票

接口说明
对于使用微信电子发票开票接入能力的商户,在公众号后台选择任何一家开票平台的套餐,都可以使用本接口实现已开具电子发票的查询。

请求方式
请求URL:https://api.weixin.qq.com/card/invoice/queryinvoceinfo?access_token={access_token}

请求方法:POST

请求参数使用JSON格式,字段如下:

参数 类型 是否必填 描述




invoicedetail_list是一个JSON list,其中每一个对象的机构为

参数 类型 是否必填 描述
fpqqlsh String 发票请求流水号,唯一查询发票的流水号
nsrsbh String 纳税人识别码

返回结果
返回结果使用JSON格式,字段如下:

参数 类型 是否必填 描述
errcode int 错误码,见错误码列表
errmsg string 错误信息,见错误码列表
fpqqlsh String 是 发票请求流水号,唯一查询发票的流水号
jym String 校验码,位于电子发票右上方,开票日期下
kprq String 校验码
fpdm String 发票代码
fphm String 发票号码
pdfurl String 发票url

示例代码

请求
{
    "fpqqlsh": "test20160511000440",
    "nsrsbh": "110109500321654"
}

返回:

{
   "errcode": 0,
   "errmsg": "发票数据获取成功",
   "invoicedetail": {
       "fpqqlsh": "14574d75004451097845",
       "fpdm": "088978450417",
       "fphm": "21590001",
       "jym": "59004166725791147047",
       "kprq": "20171204172159",
       "pdfurl": "http://weixin.com"
   }
}

17 错误码

错误码 错误信息 备注
0 OK 成功
72015 unauthorized create invoice 没有开票平台的权限,请检查是否已开通相应权限。
72023 invoice has been lock 发票已被其他公众号锁定。一般为发票已进入后续报销流程,报销企业公众号/企业号/App锁定了发票。
72024 invoice status error 发票状态错误
72025 invoice token error wx_invoice_token 无效
72028 invoice never set pay mch info 未设置微信支付商户信息
72030 invalid mchid mchid 无效
72031 invalid params 参数错误。可能为请求中包括无效的参数名称或包含不通过后台校验的参数值
72035 biz reject insert 发票已经被拒绝开票。若order_id被用作参数调用过拒绝开票接口,再使用此order_id插卡机会报此错误
72036 invoice is busy 发票正在被修改状态,请稍后再试
72038 invoice order never auth 订单没有授权,可能是开票平台 appid 、商户 appid 、订单 order_id 不匹配
72039 invoice must be lock first 订单未被锁定,需要先锁定再核销
72040 invoice pdf error Pdf 无效,请提供真实有效的 pdf
72042 billing_code and billing_no repeated 发票号码和发票代码重复,该发票已经被其它用户领取
72043 billing_code or billing_no size error 发票号码和发票代码错误
72044 scan text out of time 发票抬头二维码超时
40078 invalid card status card_id未授权。 若开发者使用沙箱环境报此错误,主要因为未将调用接口的微信添加到测试把名单; 若开发者使用正式环境报此错误,主要原因可能为:调用接口公众号未开通卡券权限,或创建card_id与插卡时间间隔过短。


上一篇 : 报销业务场景说明 下一篇: 开票平台接口列表