目录
1. 公众号开票
2. 扫码开票
3. App开票
4. 小程序开票
5. 支付后开票
# 导读
本节文档介绍了在“公众号接入”模式下,商户向用户开具电子发票的不同业务场景。包括了场景的描述,基本的交互体验介绍和分步商户可根据自身应用实际,选择对应的业务场景,根据文档进行分步骤开发。文档中的每一个步骤需要调用的接口都添加了接口文档链接,商户及开发者可以直接跳转查看对应的接口文档。
# 1. 公众号开票
# 1.1 场景描述
公众号开票的场景主要见于公众号内发起的购买行为和微信内H5页面购买行为后进行开票。商户H5页面上设置开票按钮,用户点击开票按钮后跳转到微信授权页,完成授权后用户可返回原页面,或者重定向到商户的其它页面(如订单页)。发票开好后会同步到用户的微信卡包,整个开票过程是异步过程,用户无需在页面等待,既保证了用户能收到发票,也解决了开票时间不稳定的问题。
# 1.2 交互介绍
公众号开票交互图如下
# 1.3 接口调用流程
公众号开票的时序图如下
公众号场景下开具电子发票的步骤如下:
1 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。不同接入模式获取s_pappid的方法略有不同:
如果商户接入模式为“使用公众平台账号接入电子发票”:s_pappid可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
2 商户获取获取access_token。调用方法见获取Access token;
3 商户获取授权页ticket。调用方法见商户接口列表;
4 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
5 将授权页url添加到开票按钮上,供点击跳转;
6 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
7 查看商户识别号,用于拼接发票请求流水号(fpqqlsh)。商户识别号可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
8 发起开票请求,之前在第4步时传入的order_id需作为其中一个参数传入,调用方法见商户接口列表;
上一步获取的商户识别号在调用需要在调用商户接口列表被放置在发票请求流水号(fpqqlsh)的头六位,如果没有传入正确的值,将导致接口报错。
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发);
10 若开票时间较久,开票平台无法在规定时间内返回开票结果,微信接口会返回状态“开票中”(错误码为73105),待获知开票结果后通过异步回调机制通知商户。配置方法见商户接口列表
11 若微信返回明确的开票失败状态(错误码非0、非73105、73107),则根据具体的错误原因,调整开票信息后使用新的发票请求流水号重新请求开票;
12 若持续未收到返回信息,商户可主动调用查询发票接口查询开票状态,并根据返回结果获取发票信息或开票错误信息,调用方法见商户接口列表
# 2. 扫码开票
# 2.1 场景描述
扫码开票的场景主要见于向用户提供小票的线下行业,如零售、餐饮、便利店、加油站等。商户将订单信息转换成开票二维码,打印到小票上,随小票提供给用户。用户扫描二维码后跳转到微信授权页,使用保存在微信中的抬头信息进行快速填写,点击开票后可以关闭页面或者重定向到商户的其它页面(如订单页)。发票开好后会同步到用户的微信卡包,通过用户自助进行开票,无需安排额外的人手负责开票,能有效提升柜台效率。整个开票过程是异步过程,用户无需在页面等待,既保证了用户能收到发票,也解决了开票时间不稳定的问题。
# 2.2 交互介绍
扫码开票交互图如下
# 2.3 接口调用流程
扫码开票的时序图如下
扫码开票场景下开具电子发票的步骤如下:
1 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。不同接入模式获取s_pappid的方法略有不同:
如果商户接入模式为“使用公众平台账号接入电子发票”:s_pappid可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
2 商家将订单信息按照自身业务逻辑生成二维码,印制到小票上供用户扫描,本步骤根据商户自身业务逻辑生成,不涉及调用微信接口
3 商户获取获取access_token。调用方法见获取Access token;
4 商户获取授权页ticket。调用方法见商户接口列表;
5 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
6 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
7 查看商户识别号,用于拼接发票请求流水号(fpqqlsh)。商户识别号可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
8 发起开票请求,之前在第4步时传入的order_id需作为其中一个参数传入,调用方法见商户接口列表;
上一步获取的商户识别号在调用需要在调用商户接口列表被放置在发票请求流水号(fpqqlsh)的头六位,如果没有传入正确的值,将导致接口报错。
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发);
10 若开票时间较久,开票平台无法在规定时间内返回开票结果,微信接口会返回状态“开票中”(错误码为73105),待获知开票结果后通过异步回调机制通知商户。配置方法见商户接口列表
11 若微信返回明确的开票失败状态(错误码非0、非73105、73107),则根据具体的错误原因,调整开票信息后使用新的发票请求流水号重新请求开票;
12 若持续未收到返回信息,商户可主动调用查询发票接口查询开票状态,并根据返回结果获取发票信息或开票错误信息,调用方法见商户接口列表
# 3. App开票
# 3.1 场景描述
App开票的场景主要用于通过App开展业务的商户,如电商、线上服务平台等。商户App界面上设置开票按钮,用户点击开票按钮后拉起微信跳转到授权页,完成授权后用户可返回原App。发票开好后会同步到用户的微信卡包,整个开票过程是异步过程,用户无需在微信中等待,确保了用户在商户App中体验的连贯和流畅性。
# 3.2 交互介绍
App开票交互图如下
# 3.3 接口调用流程
App开票的时序图如下
App开具电子发票的步骤如下:
1 确认App中已经安装最新版的微信SDK
2 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。不同接入模式获取s_pappid的方法略有不同:
如果商户接入模式为“使用公众平台账号接入电子发票”:s_pappid可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
3 商户使用开放平台(open账号)的appid,获取获取access_token。调用方法见获取Access token;
4 商户获取授权页ticket。调用方法见商户接口列表;
5 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
6 使用第5步获得的授权页url(auth_url)作为传入参数,拉起微信客户端打开授权页。iOS端拉起方法见iOS客户端打开授权页、Android拉起方法见Android客户端打开授权页
7 商户在后台等待接收用户的授权完成事件。注意:此阶段用的是公众号的 appid来接收,请不要与开放平台账号的appid混淆。获取授权事件方法见商户接口列表;
8 查看商户识别号,用于拼接发票请求流水号(fpqqlsh)。商户识别号可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
9 发起开票请求,之前在第4步时传入的order_id需作为其中一个参数传入,调用方法见商户接口列表
上一步获取的商户识别号在调用需要在调用商户接口列表被放置在发票请求流水号(fpqqlsh)的头六位,如果没有传入正确的值,将导致接口报错;
10 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发);
11 若开票时间较久,开票平台无法在规定时间内返回开票结果,微信接口会返回状态“开票中”(错误码为73105),待获知开票结果后通过异步回调机制通知商户。配置方法见商户接口列表
12 若微信返回明确的开票失败状态(错误码非0、非73105、73107),则根据具体的错误原因,调整开票信息后使用新的发票请求流水号重新请求开票;
13 若持续未收到返回信息,商户可主动调用查询发票接口查询开票状态,并根据返回结果获取发票信息或开票错误信息,调用方法见商户接口列表
# 4. 小程序开票
# 4.1 场景描述
小程序开票的场景主要见于小程序内发起购买行为后进行开票。商户小程序页面上设置开票按钮,用户点击开票按钮后跳转到小程序开票授权页,完成授权后用户可返回原页面,或者重定向到商户的其它页面(如订单页)。发票开好后会同步到用户的微信卡包,整个开票过程是异步过程,用户无需在页面等待,开票时间不稳定的问题,真正做到“用完即走”。
# 4.2 交互介绍
小程序开票交互图如下
# 4.3 接口调用流程
小程序开票的时序图如下
小程序开具电子发票的步骤如下:
1 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。不同接入模式获取s_pappid的方法略有不同:
如果商户接入模式为“使用公众平台账号接入电子发票”:s_pappid可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
2 商户获取获取access_token。调用方法见获取Access token;
3 商户获取授权页ticket。调用方法见商户接口列表;
4 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
5 在小程序开票按钮的点击事件上部署跳转到小程序授权页的逻辑。上一步获得的auth_url和开票小程序appid要作为参数传入。调用方法见商户接口列表;
6 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
7 查看商户识别号,用于拼接发票请求流水号(fpqqlsh)。商户识别号可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
8 发起开票请求,之前在第4步时传入的order_id需作为其中一个参数传入,调用方法见商户接口列表
上一步获取的商户识别号在调用需要在调用商户接口列表被放置在发票请求流水号(fpqqlsh)的头六位,如果没有传入正确的值,将导致接口报错;
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发);
10 若开票时间较久,开票平台无法在规定时间内返回开票结果,微信接口会返回状态“开票中”(错误码为73105),待获知开票结果后通过异步回调机制通知商户。配置方法见商户接口列表
11 若微信返回明确的开票失败状态(错误码非0、非73105、73107),则根据具体的错误原因,调整开票信息后使用新的发票请求流水号重新请求开票;
12 若持续未收到返回信息,商户可主动调用查询发票接口查询开票状态,并根据返回结果获取发票信息或开票错误信息,调用方法见商户接口列表
# 5. 支付后开票
# 5.1 场景描述
支付后开票通过和微信支付相结合,提供了一种新的发起开票的途径。用户可以在微信支付凭证中看到开具电子发票的入口,这能为某些打印小票存在一定困难的线下场景(如停车场闸机)是一个良好的开票路径,其它需要打印小票的场景,考虑到小票存在丢失的可能,也可以使用支付后开票作为补充。用户使用微信支付完成消费后,付款凭证上会出现开票入口,用户点击开票按钮后提交抬头信息并完成开票授权。发票开好后会同步到用户的微信卡包,整个开票过程是异步过程,既保证了用户能收到发票,也解决了开票时间不稳定的问题。
# 5.2 交互介绍
支付后开票交互图如下
# 5.3 接口调用流程
支付后开票的时序图如下
支付后开票的步骤如下:
1 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。不同接入模式获取s_pappid的方法略有不同:
如果商户接入模式为“使用公众平台账号接入电子发票”:s_pappid可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
2 商户获取获取access_token。调用方法见获取Access token;
3 关联商户号和开票平台。本步骤为一次性设置,后续一般在遇到开票平台识别号变更,或者商户更换开票平台时才需要调用本接口重设对应关系。调用方法见商户接口列表;
4 查询关联状态,确认商户号已经和开票平台关联成功。调用方法见商户接口列表;
5 在发起支付请求的时候指定每一笔交易的支付后开票。在步骤3关联了商户号和开票平台后不代表每一笔支付都会出现开票入口,需要通过本步接口进一步制定才能让支付凭证上出现开票入口。调用方法见商户接口列表;
6 商户在后台等待接收用户的授权完成事件,接收授权完成事件所用的appid为商户号关联的appid。获取授权事件方法见商户接口列表;
7 查看商户识别号,用于拼接发票请求流水号(fpqqlsh)。商户识别号可以在进入“已完成”状态的订单详情页面找到。具体位置见下图
8 发起开票请求,之前在第4步时传入的order_id需作为其中一个参数传入,调用方法见商户接口列表
上一步获取的商户识别号在调用需要在调用商户接口列表被放置在发票请求流水号(fpqqlsh)的头六位,如果没有传入正确的值,将导致接口报错;
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发);
10 若开票时间较久,开票平台无法在规定时间内返回开票结果,微信接口会返回状态“开票中”(错误码为73105),待获知开票结果后通过异步回调机制通知商户。配置方法见商户接口列表
11 若微信返回明确的开票失败状态(错误码非0、非73105、73107),则根据具体的错误原因,调整开票信息后使用新的发票请求流水号重新请求开票;
12 若持续未收到返回信息,商户可主动调用查询发票接口查询开票状态,并根据返回结果获取发票信息或开票错误信息,调用方法见商户接口列表