目录
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 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
4 商户获取授权页ticket。调用方法见商户接口列表
5 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表
6 将授权页url添加到开票按钮上,供点击跳转;
7 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表
8 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)

# 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 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
5 商户获取授权页ticket。调用方法见商户接口列表; 6 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表
7 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表
8 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)

# 3. App开票

# 3.1 场景描述

App开票的场景主要用于通过App开展业务的商户,如电商、线上服务平台等。商户App界面上设置开票按钮,用户点击开票按钮后拉起微信跳转到授权页,完成授权后用户可返回原App。发票开好后会同步到用户的微信卡包,整个开票过程是异步过程,用户无需在微信中等待,确保了用户在商户App中体验的连贯和流畅性。

# 3.2 交互介绍

App开票交互图如下
App开票

# 3.3 接口调用流程

App开票的时序图如下
App开票时序图
App开具电子发票的步骤如下:
1 确认App中已经安装最新版的微信SDK
2 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。不同接入模式获取s_pappid的方法略有不同:

如果商户接入模式为“商户+开票平台模式”:s_pappid由开票平台通过邮件线下方式提供

3 商户使用开放平台(open账号)的appid,获取获取access_token。调用方法见获取Access token
4 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
5 商户获取授权页ticket。调用方法见商户接口列表
6 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表
7 使用第5步获得的授权页url(auth_url)作为传入参数,拉起微信客户端打开授权页。iOS端拉起方法见iOS客户端打开授权页、Android拉起方法见Android客户端打开授权页
8 商户在后台等待接收用户的授权完成事件。注意:此阶段用的是公众号的 appid来接收,请不要与开放平台账号的appid混淆。获取授权事件方法见商户接口列表
9 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
10 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)

# 4. 小程序开票

# 4.1 场景描述

小程序开票的场景主要见于小程序内发起购买行为后进行开票。商户小程序页面上设置开票按钮,用户点击开票按钮后跳转到小程序开票授权页,完成授权后用户可返回原页面,或者重定向到商户的其它页面(如订单页)。发票开好后会同步到用户的微信卡包,整个开票过程是异步过程,用户无需在页面等待,开票时间不稳定的问题,真正做到“用完即走”。

# 4.2 交互介绍

小程序开票交互图如下
小程序开票

# 4.3 接口调用流程

小程序开票的时序图如下 小程序开票时序图

小程序开具电子发票的步骤如下:
1 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。不同接入模式获取s_pappid的方法略有不同:

如果商户接入模式为“商户+开票平台模式”:s_pappid由开票平台通过邮件线下方式提供

2 商户获取获取access_token。调用方法见获取Access token
3 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
4 商户获取授权页ticket。调用方法见商户接口列表
5 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表
6 在小程序开票按钮的点击事件上部署跳转到小程序授权页的逻辑。上一步获得的auth_url和开票小程序appid要作为参数传入。调用方法见商户接口列表
7 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表
8 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)

# 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 查询关联状态,确认商户号已经和开票平台关联成功。调用方法见商户接口列表
6 在发起支付请求的时候指定每一笔交易的支付后开票。在步骤3关联了商户号和开票平台后不代表每一笔支付都会出现开票入口,需要通过本步接口进一步制定才能让支付凭证上出现开票入口。调用方法见商户接口列表
7 商户在后台等待接收用户的授权完成事件,接收授权完成事件所用的appid为商户号关联的appid。获取授权事件方法见商户接口列表
8 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,在第6步时收到的的SuccOrderId需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
9 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)