技术集成指南.md 28 KB

技术集成指南

集成交互说明

集成交互流程

业务流程说明

  1. 旅行社通过"企业签约"接口完成企业码服务开通和入驻。
  2. 可以根据需要"创建部门"接口来管理旅行社不同门店。并通过"添加企业员工"接口来添加导游名单,员工离职后通过"删除企业员工"接口从企业码中删除该名员工。
  3. 员工名单添加后,通过二维码,或者链接跳转的方式,让员工通过自己的支付宝账户完成企业码协议确认,以完成员工与企业的激活和绑定。
  4. 先通过"创建费控制度"创建通用场景费控制度,通过"编辑费控制度成员"接口将旅行社的导游都添加到费控制度下。导游根据旅行社内部备用金审批流程完成备用金的申请,审批流程走完后,通过"创建手工发放额度"接口,为员工创建一个点券类型的额度,可消费时间范围、金额与备用金申请条件一致。
  5. 导游在带团过程中,需要使用备用金进行消费时,进入企业码小程序,出示企业码付款码,或者企业码的扫一扫,进行企业码因公消费。点券到期后,将不可使用企业因公资金进行消费,出示企业码,会使用个人账户资产完成消费支付。
  6. 导游消费后,消费记录会实时通过"账单变动通知"同步给到旅行社。

注意: 以上的应用只是个参考案例,我们是要做一个类似因公付款服务系统,但不是关于旅行社的。你只需要参考结构。


1. 集成工作流程说明

1.1 集成步骤

  1. 企业支付宝账号注册,点击查看指导手册
  2. 联系合作BD签约支付宝销售方案。
    • a. 甲方企业需要签署"企业报销码KA合作"销售方案。
    • b. 企业码合作的服务商,需要签署"企业码服务商合作"销售方案。
  3. 销售方案签约后会自动生成Appid用于接口调用。也可以创建自研服务的应用"小程序"或"网页&移动应用",并将应用的Appid提供给支付宝PD完成产品包挂载添加权限。
    • 所使用的自研服务应用则需要完成:"配置密钥" 和 "上线应用"。
    • 小程序应用:审核通过后自动上线。
    • 网页/移动应用:需要手动上线。提交审核后,预计 1 个工作日的审核时间,需请耐心等待,详细步骤可查看 上线应用
    • 订阅消息接入,待完成产品包挂载后即可订阅相关消息(说明:若未挂载相应产品包将无法订阅相关消息接口)。消息订阅路径:支付宝开放平台-控制台-开发设置-FROM平台。

消息接入

说明: 消息接入方式支持 websocket长连接 和 http(s) 两种接入任选其一即可,详情可点击查看From蚂蚁消息服务使用。

  1. 协议签署,通过"企业签约"接口完成入驻。
  2. 按下面技术方案内容进行接口开发。
  3. 在生产环境进行联调测试。
  4. 上线。

1.2 集成前准备

1.2.1 开发前准备

查看开放平台文档,完成以下两步准备工作:

  1. 集成并配置SDK
  2. 接口调用配置

1.2.2 企业码接口通用参数说明

  • charset(字符集):utf-8
  • 企业ID(企业入驻企业码生成的企业id)入参说明:
    • enterprise_id,2.0版本接口生成的企业id

2. 企业码接口

2.1 员企业关系管理

2.1.1 企业管理

企业需要开通企业码服务,需要通过下面的接口完成企业码服务的开通。支持服务商引入企业开通,也支持每个企业进行单独开通。

企业管理流程

2.1.1.1 邀请企业注册

接口名: alipay.commerce.ec.enterprise.registerinvite.create

功能说明: 获取企业码-企业注册/认证/签约三合一页面的链接地址,适用于邀请企业或代理企业开通企业码

  • 企业自研系统入驻,可以通过企业支付宝账号登录企业码PC端 完成企业签约开通。
  • 企业通过接口入驻或者服务商代入驻,可以使用接口创建企业
  • 如果是服务商代企业开通的情况,企业名称需要填写和企业营业执照一致的名字,企业才会成为认证状态使用更多能力,否则无法使用企业码。

企业注册流程

参数说明: https://opendocs.alipay.com/pre-open/59de3d66_alipay.commerce.ec.enterprise.registerinvite.create?pathHash=ad13ca47

参数说明

2.1.1.2 企业状态变更通知

接口名: alipay.commerce.ec.enterprise.change.notify

功能说明: 企业相关状态变化产生的通知信息,包括企业签约成功,企业注销等状态通知。

参数说明: https://opendocs.alipay.com/apis/0477mu

支付宝通知类消息接入说明: https://opendocs.alipay.com/open/10381/gh4emp

2.1.1.3 其他可选接口

1. 企业解约【可选】

  • 接口名: alipay.commerce.ec.enterprise.unsign
  • 功能说明: 企业解约,获取解约链接,点击链接跳转到解约页面,进行资金协议解约。
  • 参数说明: https://opendocs.alipay.com/apis/04j719

2. 企业注销【可选】

  • 接口名: alipay.commerce.ec.enterprise.delete
  • 功能说明: 企业注销,并清理企业数据,企业及员工不再能使用企业码服务。注销前,请先完成企业解约(alipay.commerce.ec.enterprise.unsign)。
  • 参数说明: https://opendocs.alipay.com/apis/04iyzd

3. 查询企业详情【可选】

4. 修改企业信息【可选】

2.1.2 员工管理

用来管理可申请备用金的导游支付宝账户。

2.1.2.1 添加企业员工

接口名: alipay.commerce.ec.employee.add

功能说明: 通过接口同步企业员工信息,并获取员工加入企业码链接。员工绑定开通后,即建立企业账号与员工账号的关联关系。并将结果通知给到企业。

参数说明: https://opendocs.alipay.com/apis/047c5n

重要参数说明:

  • department_ids为部门列表,目前只支持员工在一个部门里,不支持跨多个部门。
  • sign_url每个企业返回的链接都是固定的,且永久有效

手机号/邮箱邀请员工加入交互逻辑说明:

员工加入流程

手机号/邮箱邀请员工身份确认逻辑说明: 员工开通服务时,入参传入员工在企业预留的手机号/邮箱和员工姓名,支付宝会唤起短信校验码页面让员工进行校验,校验一致,则完成员企业关系绑定。

身份确认流程

员工加入企业的固定链接:

  • 员工同意加入需要员工访问支付宝页面进行签约操作。
  • 将企业签约完成后获取到的 accountId 企业账号拼接到 alipays://platformapi/startapp?appId=2021002128690179&page=pages%2Fopen%2Finvite%2Fsign%2Findex%3FaccountId%3D 地址后面,生成二维码让员工扫码加入企业。
  • : 该链接中appId=2021002128690179为固定值,不需要进行变更。
  • 该二维码是基于企业账号维度的,生成一次即可,员工加入可以重复使用。只有被邀请过的员工加入才会继续流程,没有被邀请过的扫码后无法加入企业。
  • 完整链接如下所示:

    alipays://platformapi/startapp?appId=2021002128690179&page=pages%2Fopen%2Finvite%2Fsign%2Findex%3FaccountId%3D2088000330796***.
    

小程序跳转企业码签约页面方案:

小程序按下面代码示例调用,跳转企业码员工签约授权页,只需要替换掉enterpriseId后面的值为自己企业的enterpriseId。不要改appId的值!不要改appId的值!不要改appId的值!

旅行社场景按如下表格圈选字段及示意枚举值传参即可:

字段说明

2.1.2.2 删除企业员工

接口名: alipay.commerce.ec.employee.delete

功能说明: 通过接口删除企业码已离职员工。

参数说明: https://opendocs.alipay.com/apis/04763u

2.1.2.3 员工变更通知

接口名: alipay.commerce.ec.employee.change.notify

功能说明: 员工变更通知,包括:员工新增、激活、信息修改、部门修改、角色修改和删除

参数说明: https://opendocs.alipay.com/apis/03s8k8

2.1.2.4 其他可选接口

1. 获取员工邀请链接【可选】

  • 接口名: alipay.commerce.ec.employee.invite.query
  • 功能说明: 获取员工邀请链接。返回的sign_url与员工邀请接口返回的sign_url一致,链接都是固定的,且永久有效。
  • 参数说明: https://opendocs.alipay.com/apis/04irne

2. 修改员工信息【可选】

3. 查询员工详情【可选】

4. 查询员工id列表【可选】

5. 企业升级高级认证【可选】

2.2 费用控制管理

旅行社备用金场景费用控制建议交互逻辑:

费用控制流程

2.2.1 费控制度管理

2.2.1.1 创建费控制度

接口名: alipay.ebpp.invoice.institution.create

功能说明: 创建费控制度。

  • 创建费控制度时的入参中至少同时要创建一条使用规则,发放规则不是必须同时创建。
  • 其中使用规则名称在企业码小程序端用户可见,费控制度名称不可见。
  • 创建制度后,再通过编辑费控制度成员接口进行制度下成员管理

参数说明: https://opendocs.alipay.com/apis/049l40

费用类型及子类:

  • 对于旅行社备用金来说,可以不限制可消费商户,费用类型和费用类型子类都用DEFAULT即可。
  • 旅行社使用 手工发放接口 进行额度管控即可,不要设置使用规则限额

旅行社场景按如下表格圈选字段及示意枚举值传参即可:

字段说明1

字段说明2

字段说明3

字段说明4

字段说明5

字段说明6

字段说明7

standard_condition_info_list字段传值参考:

使用时间 说明
【ALARM_CLOCK_TIME】 1、时间不限: {"all":true}

定向支付,指定商户:

字段 是否必填 枚举值
费用类型【expense_type】 餐饮【MEAL】
费用类型子类【expense_sub_type】 中餐【CHINESE_FOOD】
商户PID【merchant_pid】 商户PID,2088开头
2.2.1.2 编辑费控制度

接口名: alipay.ebpp.invoice.institution.modify

功能说明: 编辑费控制度完整信息。

参数说明: https://opendocs.alipay.com/apis/049zmk

2.2.1.3 查询费控制度适用成员范围

接口名: alipay.ebpp.invoice.institution.scopepageinfo.query

功能说明: 查询制度下成员列表,支持分页查询。

参数说明: https://opendocs.alipay.com/apis/04a389

2.2.1.4 其他可选接口

1. 查询费控制度列表【可选】

2. 查询单个费控制度详情【可选】

  • 接口名: alipay.ebpp.invoice.institution.detailinfo.query
  • 功能说明: 查询单个费控制度详细信息,包含制度下使用规则列表和发放规则列表。
  • 参数说明: https://opendocs.alipay.com/apis/049zml

3. 删除费控制度

  • 接口名: alipay.ebpp.invoice.institution.delete
  • 功能说明: 删除制度,删除制度下使用规则和发放规则以及制度下人员关系。制度关联的发放规则和已发放的券或者额度都会被清除,不可再使用。
  • 参数说明: https://opendocs.alipay.com/apis/049vo9

2.2.2 手工发放额度管理

2.2.2.1 创建手工发放额度

接口名: alipay.ebpp.invoice.expensecontrol.quota.create

功能说明: 创建用户可用额度。target_type用INSTITUTION(费控制度)来创建,target_id用前面创建的费控制度id(institution_id)。

  • 为每个员工单独创建。
  • outer_source_id用来控制幂等。

关键入参: https://opendocs.alipay.com/apis/02f6m7

2.2.2.2 查询员工可用额度

接口名: alipay.ebpp.invoice.expensecontrol.quota.query

功能说明: 查询员工可用额度值。

关键入参: https://opendocs.alipay.com/apis/02f6m8

2.2.2.3 修改手工发放额度

接口名: alipay.ebpp.invoice.expensecontrol.quota.modify

功能说明: 可对额度进行增加、扣减等操作。

关键入参: https://opendocs.alipay.com/apis/02f7v9

修改额度场景说明:

  • case1: 修改金额不修改有效期日期时间,需要用4.2.2.3修改手工发放额度,将额度进行变更
  • case2: 额度修改涉及有效期时间,需要先用4.2.2.3将额度调整成0,再用4.2.2.1重新发放额度
2.2.2.4 其他可选接口

1. 删除额度

2.2.3 使用规则管理

2.2.3.1 编辑使用规则

接口名: alipay.ebpp.invoice.institution.expenserule.modify

功能说明: 编辑使用规则属性。

参数说明: https://opendocs.alipay.com/apis/049n7a

2.2.3.1 其他可选接口

1. 创建使用规则

  • 接口名: alipay.ebpp.invoice.institution.expenserule.create

功能说明: 创建使用规则,场景和费用类型需要和制度一致,有效期起始、结束时间、关联人员与制度保持一致。

参数说明: https://opendocs.alipay.com/apis/049e73

2. 删除使用规则

  • 接口名: alipay.ebpp.invoice.institution.expenserule.delete

功能说明: 删除使用规则。如果是制度下唯一使用规则,则使用规则不能被删除。

参数说明: https://opendocs.alipay.com/apis/049m7m

2.4 账单&订单信息获取

image.png

2.4.1 支付账单信息获取

2.4.1.1 账单变动通知

接口名: alipay.commerce.ec.consume.change.notify

功能说明: 单笔交易信息账单关联凭证发生变化时通知。

参数说明: https://opendocs.alipay.com/apis/03t2yt

支付宝通知类消息接入说明: https://opendocs.alipay.com/open/10381/gh4emp

2.4.1.2 账单详情查询

接口名: alipay.commerce.ec.consume.detail.query

功能说明: 获取消费账单详情数据和相关凭证数据。

参数说明: https://opendocs.alipay.com/apis/03t1jw

  • voucher_content字段结构介绍: https://opendocs.alipay.com/pre-open/07d3dg
  • 账单需区分企业付金额,相关字段处理逻辑如下:
    • 企业付金额:直接用;
    • 个人付金额:账单金额—企业付金额=个人付金额;
    • 优惠:订单金额—账单金额=优惠金额

2.4.1.3 其他可选接口

1. 账单详情批量分页查询

注意: 入参中的start_dateend_date为前闭后开,例如需要查询2021-01-01当天的所有账单,则start_date取"2021-01-01 00:00:00",end_date取"2021-01-02 00:00:00"

2. 对账单文件下载

  • 接口名: alipay.commerce.ec.balance.downloadurl.query
  • 功能说明: 支持按日或者月获取账单文件下载链接,日期不能为当日或者当月。
  • 参数说明: https://opendocs.alipay.com/apis/03tmlu

2.4.2 账单关联凭证获取

2.4.2.1 凭证变动通知

接口名: alipay.commerce.ec.voucher.change.notify

功能说明: 单笔交易账单关联凭证发生变化时通知。

参数说明: https://opendocs.alipay.com/apis/04bl9s

支付宝通知类消息接入说明: https://opendocs.alipay.com/open/10381/gh4emp

2.4.2.2 账单及关联凭证详情查询

接口名: alipay.commerce.ec.consume.detail.query

功能说明: 获取消费账单详情数据和相关凭证数据。

参数说明: https://opendocs.alipay.com/apis/03t1jw



2.5 跳转扫一扫/付款码页面

2.5.1 跳转扫一扫

通过 openAlipayApp 拉起扫一扫,调用方式如下:

my.ap.openAlipayApp({
  appCode: 'alipayScan',
  appParams: {
    externalThrough: {params}
  }
})

参数说明:

其中标为黄色的区域,取值如下:

  • {params} 是需要携带的因公付拓展参数使用 Json 格式字符串

params参数说明:

  • pdSubBizScene: 支付决策子场景
    • 默认值: enterprisePay,适用: 收钱码,当面付,铁路线下支付
  • specifiedEnableChannelInfo
  • assignJointAccountId: 共同账户id(accountId,从企业签约状态变更消息通知里获取)
  • identityPayBizInfo: 企业码身份付业务字段
  • CHANNEL_INDEX: 渠道
    • 传入固定值: ENTERPRISEPAYASSET_DC_ENTERPRISEPAY_DEFAULT
  • sourcePlatformInfo: 企业码因公付大字段
    • ruleGroupId: 费控规则id(当需要指定费控规则id消费时可传入此字段,可从创建费控制度接口出参获取)
    • paymentId: 付款事由(paymentId为服务商付款事由ID,通过此字段服务商可做到精确对账)
    • isvAppId: 三方小程序appId(必传,涉及到后面服务商政策)

接入示例:

  1. 准备所需要的参数,将参数转换为 JSON 结构并压缩(注意 key-value 都是字符串):

    {
    "pdSubBizScene": "enterprisePay",
    "specifiedEnableChannelInfo": "{\"enableScene\":\"agreementpay\",\"assetInfo\":{\"instId\":\"INST_ALIPAY\",\"assetId\":\"2088610***68075\",\"assetTypeCode\":\"ENTERPRISEPAY\",\"assetType\":\"ENTERPRISEPAYASSET\"}}",
    "assignJointAccountId": "208861***868075",
    "identityPayBizInfo": "{\"identityPaySubBizScene\":\"ISV_PAY\",\"bizGroupId\":\"208861***868075\",\"groupId\":\"20886***68075\",\"identityPayBizScene\":\"ENTERPRISE_CODE\"}",
    "CHANNEL_INDEX": "[\"ENTERPRISEPAYASSET_DC_ENTERPRISEPAY_DEFAULT\"]",
    "enterprise_pay_info": "{\"paymentId\":\"test001\",\"ruleGroupId\":\"2023121200152608840000615146\"}",
    "sourcePlatformInfo": "{\"paymentId\":\"test001\",\"ruleGroupId\":\"2023121200152608840000615146\",\"isvAppId\":\"2021004130649307\"}"
    }
    
  2. 通过 openAlipayPage 拉起扫一扫

2.5.2 跳转付款码

集成前准备:

通过 开放平台控制台 > 对应小程序详情页 > 开发设置 > openURL配置 中添加地址自助申请,添加地址填写:

alipays://platformapi/startapp?appId=20000056

若openURL配置没有,需要更改小程序经营类目, 理财金融 、工具 之外的全部小程序经营类目才开放openURL配置。

schema 跳转付款码 2.0 的跳转链接,格式如下:

alipays://platformapi/startapp?appId=20000056&customBizCode={bizCode}&customBizParams=encode({params})

其中标为黄色的区域,取值如下:

  • bizCode 是付款码分配的固定业务身份,旅行社场景为 enterprisePayForThirdPart
  • encode({params}) 是将需要携带的拓展参数用 Json 格式字符串表示后,进行 URL-Encode 后得到的字符串(如果没有拓展参数需要传递,可以不传)

params参数说明:

  • pdSubBizScene: 支付决策子场景
    • 默认值: enterprisePay,适用: 收钱码,当面付,铁路线下支付
  • specifiedEnableChannelInfo
  • assignJointAccountId: 共同账户id(accountId,从企业签约状态变更消息通知里获取)
  • identityPayBizInfo: 企业码身份付业务字段
  • CHANNEL_INDEX: 渠道
    • 传入固定值: ENTERPRISEPAYASSET_DC_ENTERPRISEPAY_DEFAULT
  • CHANNEL_MODE: 渠道展示模式
    • 默认值: NONE_CHANNEL_MODE
  • enterprise_pay_info: 企业码因公付大字段
    • ruleGroupId: 费控规则id(当需要指定费控规则id消费时可传入此字段,可从创建费控制度接口出参获取)
    • paymentId: 付款事由(paymentId为服务商付款事由ID,通过此字段服务商可做到精确对账)
    • isvAppId: 三方小程序appId(必传,涉及到后面服务商政策)

接入示例:

  1. 准备所需要的参数,将参数转换为 JSON 结构并压缩(注意 key-value 都是字符串):

    {
    "pdSubBizScene": "enterprisePay",
    "CHANNEL_INDEX": "[\"ENTERPRISEPAYASSET_DC_ENTERPRISEPAY_DEFAULT\"]",
    "channelMode": "NONE_CHANNEL_MODE",
    "specifiedEnableChannelInfo": "{\"enableScene\":\"agreementpay\",\"assetInfo\":{\"instId\":\"INST_ALIPAY\",\"assetId\":\"20883107**473\",\"assetTypeCode\":\"ENTERPRISEPAY\",\"assetType\":\"ENTERPRISEPAYASSET\"}}",
    "assignJointAccountId": "208831****3473",
    "identityPayBizInfo": "{\"identityPaySubBizScene\":\"ISV_PAY\",\"bizGroupId\":\"2088310****213473\",\"groupId\":\"2088310****3473\",\"identityPayBizScene\":\"ENTERPRISE_CODE\"}",
    "enterprise_pay_info": "{\"paymentId\":\"test001\",\"ruleGroupId\":\"2023120400152608470000419071\",\"isvAppId\":\"2021004130649307\"}"
    }
    
  2. URL encode 后拼接可得到链接(红色部分是固定前缀):

    最终链接 = 链接主体 + &customBizParams= + encode(params)
    

完整示例:

alipays://platformapi/startapp?appId=20000056&customBizCode=enterprisePayForThirdPart&customBizParams=%7B%22pdSubBizScene%22%3A%22enterprisePay%22%2C%22CHANNEL_INDEX%22%3A%22%5B%5C%5C%5C%22ENTERPRISEPAYASSET_DC_ENTERPRISEPAY_DEFAULT%5C%5C%5C%22%5D%22%2C%22channelMode%22%3A%22NONE_CHANNEL_MODE%22%2C%22specifiedEnableChannelInfo%22%3A%22%7B%5C%5C%5C%22enableScene%5C%5C%5C%22%3A%5C%5C%5C%22agreementpay%5C%5C%5C%22%2C%5C%5C%5C%22assetInfo%5C%5C%5C%22%3A%7B%5C%5C%5C%22instId%5C%5C%5C%22%3A%5C%5C%5C%22INST_ALIPAY%5C%5C%5C%22%2C%5C%5C%5C%22assetId%5C%5C%5C%22%3A%5C%5C%5C%22208831***213473%5C%5C%5C%22%2C%5C%5C%5C%22assetTypeCode%5C%5C%5C%22%3A%5C%5C%5C%22ENTERPRISEPAY%5C%5C%5C%22%2C%5C%5C%5C%22assetType%5C%5C%5C%22%3A%5C%5C%5C%22ENTERPRISEPAYASSET%5C%5C%5C%22%7D%7D%22%2C%22assignJointAccountId%22%3A%22208831***61213473%22%2C%22identityPayBizInfo%22%3A%22%7B%5C%5C%5C%22identityPaySubBizScene%5C%5C%5C%22%3A%5C%5C%5C%22ISV_PAY%5C%5C%5C%22%2C%5C%5C%5C%22bizGroupId%5C%5C%5C%22%3A%5C%5C%5C%222088***1213473%5C%5C%5C%22%2C%5C%5C%5C%22groupId%5C%5C%5C%22%3A%5C%5C%5C%22208831***13473%5C%5C%5C%22%2C%5C%5C%5C%22identityPayBizScene%5C%5C%5C%22%3A%5C%5C%5C%22ENTERPRISE_CODE%5C%5C%5C%22%7D%22%2C%22enterprise_pay_info%22%3A%22%7B%5C%5C%5C%22paymentId%5C%5C%5C%22%3A%5C%5C%5C%22test001%5C%5C%5C%22%2C%5C%5C%5C%22ruleGroupId%5C%5C%5C%22%3A%5C%5C%5C%222023120400152608470000419071%5C%5C%5C%22%2C%5C%5C%5C%22isvAppId%5C%5C%5C%22%3A%5C%5C%5C%222021004130649307%5C%5C%5C%22%7D%22%7D
  1. 通过jsapi拉起付款码

2.5.3 跳转发票关联

通过 my.navigateToMiniProgram 拉起扫一扫(通过支付宝小程序跳转方式),调用方式如下:

// 代码示例

通过 scheme 拉起扫一扫(通过H5跳转方式),调用方式如下:

// scheme示例

参数说明:

参数名称 含义 值说明
enterpriseId 企业码企业ID(非因公账户ID) 208831***473
pageType 页面类型,发票关联使用固定值: invoice-folder invoice-folder
payNo 发票关联页面类型对应的查询参数,支付宝交易号 2024042522001453811441399756