支付宝支付接入整理

这是我参与更文挑战的第1天,活动详情查看: 更文挑战


背景

​ 一般公司都会有接入支付宝以及微信支付的相关需求,在此处记录文档相关内容,以及个人记录

支付宝支付

特别注意:支付宝是由两个版本的接口的,历史系统可能走的是旧接口

旧版本(mapi)

新版本(openapi)

​ 支付宝支持的支付用途如下,因为只用过 网页&移动应用,因此主要针对这个展开。

image.png

​ 以 网页&移动应用为例,大体的流程是如下图的

image.png

图片来源于支付宝

文档查看说明

​ 支付宝文档中的分类,以我个人的观看经验,可以分为三步,如下图

image.png

  1. 第一步,注册账号,了解应用
  2. 查看使用场景,以及开放能力,以支付为例,业务场景符合哪个支付能力,并查看接入示例(也有支付宝的sdk&demo)
  3. 针对2中接入步骤,需要接入的详细api的开发文档

开发前

创建应用

​ 使用支付宝账号登录开放平台控制台后,可以选择创建应用,主要分为 自研型应用第三方应用(适用于服务商),两种应用的主要区别在于用户不是开发者本身。

​ 创建可以根据文档中的流程来一步一步进行。其中需要注意的是应用环境中的开发信息

image.png

图片来源于支付宝

段名称 描述
接口加签方式(步骤1) 必填。开发者可根据接入产品需求选择 公钥证书模式公钥模式,并保证接口中使用的私钥与此处设置公钥成对匹配,否则无法调用接口,且接口参数 sign_type=RSA2。详情请参见 生成密钥并上传
IP 白名单(步骤2) 可选。为提高商户访问开放平台的安全性,避免商户因应用私钥泄露等原因导致业务受损,开放平台提供 IP 白名单机制,详情可参考 IP 白名单接入指南。IP 白名单旨在保证开发者的资金安全,开发者视实际情况选用。
应用网关(步骤3) 可选。用于接收支付宝异步通知,开发者视实际需要填写。例如:现金红包转账到支付宝账户 中单据状态变更后触发的 alipay.fund.trans.order.changed (转账单据状态变更通知)。[C2C 现金红包](opendocs.alipay.com/open/201901… 现金红包) 退款成功时触发的 alipay.fund.trans.refund.success(资金退回成功通知) 。**注意:**支付结果异步通知支付宝会根据支付 API 中传入的异步通知地址 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统。
接口内容加密方式(步骤4) 可选。即 AES 密钥可用于加解密数据信息。接入 获取会员手机号运动数据 等需解密数据功能必须配置。详情请参考 内容加密指引
授权回调地址(步骤5) 可选。第三方应用授权 或 [用户信息授权](opendocs.alipay.com/open/284/we… redirect_uri 的说明) 后回调地址。授权链接中配置的 redirect_uri 的值必须与此值保持一致 (如:www.alipay.com) ,用户成功授权后将在该 url 后携带授权码等信息并跳转至该页。**注意:**当填入该地址时,系统会自动进行安全检测,详情请参考 安全检测

绑定应用

​ 绑定应用分为类似创建应用,也分为两种,普通商户绑定服务商待商家绑定操作,主要区别在于应用是不是你的。

​ 同一主体账号绑定应用不会通知商户,且不同主体账号不支持绑定应用

密钥

​ 对于系统交互的接口来说,密钥的重要性毋庸置疑。支付宝提供了三种生成密钥工具:

  • Web 在线加密(免下载,新上线)推荐
  • WINDOWS(windows 版本工具请不要安装在含有空格的目录路径下,否则会导致公私钥乱码的问题)
  • MAC_OSX

​ 更多相关内容请查看 开发助手简介

开放能力

​ 支付宝为满足开发者的业务诉求,将支付宝业务能力以接口的形式开放出来,开发者通过这些开放的接口与支付宝服务端进行交互,实现业务逻辑。

​ 这个对应支付宝的文档的右上角第二个文档目录,我们这里着重看支付能力,会提到不同的能力对应的应用场景

image.png

支付能力

​ 为解决网页、移动、平台商户及线下支付等场景支持用户使用支付宝付款需求,支付宝提供了如下支付能力供商家快速集成。

​ 包含当面付、App支付、手机网站支付、电脑网站支付等,用下面这个表格来简单介绍

能力名称 应用场景 支持账户类型
当面付 超市、餐馆线下交易场景,商家可生成订单二维码供用户扫码支付;也可扫描用户二维码完成收款。 企业支付宝账户个体工商户
App 支付 支付宝为商家提供了客户端&服务端 SDK,帮助商家快速在自有 App 中集成支付宝支付功能。 企业支付宝账户个体工商户
手机网站支付 为商家移动端网页应用提供集成支付宝支付功能接口。 企业支付宝账户个体工商户
电脑网站支付 为商家 PC 端网页应用提供集成支付宝支付功能接口。 企业支付宝账户个体工商户
刷脸付 商场、无人售货等线下自助支付场景,用户可通过刷脸操作使用支付宝付款。 企业支付宝账户个体工商户
互联网平台直付通 集支付、结算、分账等功能为一体的直付通能力,可帮助电商、互娱平台解决可能存在的合规问题。 企业支付宝账户

当面付

接入准备

​ 主要对应线下场景,主要的是用方式应该大家平时也在用: 条码支付扫码支付,最直观理解可以理解为 你扫商家还是商家扫你,注意,扫码支付需要调用一个预支付

​ 当面付的特点有:

  1. 线下快捷的支付
  2. 对用户手机没有网络要求,可以离线支付
  3. 商家收款资金实时到账,无现金流压力

常见问题

条码支付

​ 买家出示支付宝钱包中的条码、二维码,商家扫描用户条码即可完成 条码支付 收款,所有收款流程由商家端完成。

​ 条码支付比较适合于需要对接各类商家系统对账强需求的商家,比如商场超市等。其中分为两类接入方式: 门店直连方式商户/系统商后台转发

​ 流程如下:

  1. 创建交易并支付( alipay.trade.pay(统一收单交易支付接口))

  2. 根据返回的结果,确定支付状态,从而进行相应处理(包括必要时关闭交易), 如图 opt 区块中所示,第 2 步表示支付成功, 返回支付成功页;

  3. 第 3 步表示返回的参数为待用户付款(code=10003)或者系统异常(code=20000)、网络超时等场景下处理方式;

  4. 第 4 步表示轮询结束仍未处理成功,需要撤销订单;

  5. 第 5 步表示返回支付失败(code=40004) 时, 需要重新检查参数,重新发起支付。

    详情请参见 异常处理

image.png

条码支付方式流程图

image.png

条码支付-门店直连方式

image.png

条码支付-后台转发方式

​ 涉及api:

接口英文名 接口中文名 描述
alipay.trade.pay 统一收单交易支付接口(条码支付) 通过调用该接口创建支付宝交易订单
alipay.trade.query 统一收单线下交易查询 通过调用该接口查询订单的状态
alipay.trade.cancel 统一收单交易撤销接口 通过调用该接口撤销订单
alipay.trade.create 统一收单交易创建接口 创建支付宝交易订单
alipay.trade.refund 统一收单交易退款接口 支持部分和全部退款
alipay.trade.close 统一收单交易关闭接口 交易关闭接口
alipay.trade.fastpay.refund.query 统一收单交易退款查询接口 通过调用该接口查询通过 alipay.trade.refund 提交的退款请求是否执行成功
alipay.data.dataservice.bill.downloadurl.query 查询对账单下载地址接口 查询并下载对账单
monitor.heartbeat.syn 交易保障接口 交易保障接口
alipay.trade.refund.depositback.completed 收单退款冲退完成通知 退款到银行卡通知
扫码支付

​ 买家通过使用支付宝 扫一扫 功能,扫描商家收款二维码即可完成 扫码支付 付款

​ 扫码支付比较适合单独定价、无人值守、自助售货机等商家(不需要强对账),比如线下小型便利店,自助售货机等,用户在自助终端通过扫码完成支付。

​ 流程如下:

  1. 商户系统调用 alipay.trade.precreate(统一收单线下交易预创建)接口,获得该订单的二维码串 qr_code,开发者需要利用二维码生成工具获得最终的订单二维码图片;

  2. 发起轮询获得支付结果:等待 5 秒后调用 alipay.trade.query(统一收单线下交易查询)接口,通过支付时传入的商户订单号(out_trade_no)查询支付结果(返回参数 TRADE_STATUS),如果仍然返回等待用户付款(WAIT_BUYER_PAY),则再次等待 5 秒后继续查询,直到返回确切的支付结果(成功 TRADE_SUCCESS 或 已撤销关闭 TRADE_CLOSED),或是超出轮询时间。在最后一次查询仍然返回等待用户付款的情况下,必须立即调用 alipay.trade.cancel(统一收单交易撤销接口)将这笔交易撤销,避免用户继续支付;

  3. 除了主动轮询,当订单支付成功时,商户也可以通过设置异步通知(notify_url)来获得支付宝服务端返回的支付结果,详见 扫码异步通知,注意一定要对异步通知验签,确保通知是支付宝发出的。

    注意:如商户由于客观原因(如无公网服务器接受支付宝请求等)无法接受异步支付通知,则忽略上图中的步骤 3.4 和 3.4.1。更多注意事项请参考 异常处理

image.png

​ 涉及api

接口英文名 接口中文名 描述
alipay.trade.query 统一收单线下交易查询 通过调用该接口查询订单的状态
alipay.trade.cancel 统一收单交易撤销接口 通过调用该接口撤销订单
alipay.trade.create 统一收单交易创建接口 创建支付宝交易订单
alipay.trade.refund 统一收单交易退款接口 支持部分和全部退款
alipay.trade.precreate 统一收单线下交易预创建(扫码支付) 创建支付宝交易订单(扫码)
alipay.trade.close 统一收单交易关闭接口 交易关闭接口
alipay.trade.fastpay.refund.query 统一收单交易退款查询接口 通过调用该接口查询通过 alipay.trade.refund 提交的退款请求是否执行成功
alipay.data.dataservice.bill.downloadurl.query 查询对账单下载地址接口 查询并下载对账单
monitor.heartbeat.syn 交易保障接口 交易保障接口
alipay.trade.refund.depositback.completed 收单退款冲退完成通知 退款到银行卡通知

APP支付

接入准备

​ App支付主要指在商家的App中需要拉起支付宝支付的情况。商家APP调用支付宝提供的 SDK,SDK 再调用支付宝APP内的支付模块。

​ 如果用户已经安装支付宝App,跳转支付宝支付

​ 如果用户没有安装支付宝App,拉起支付宝网页支付收银台支付

​ [常见问题](App 支付常见问题)

客户端 iOS 集成流程

opendocs.alipay.com/open/204/10…

客户端Android 集成流程

opendocs.alipay.com/open/204/10…

服务端接入流程

​ 服务端接入需要先通过沙箱环境,一笔订单的系统交互流程如下

image.png

​ 交易的签名,必须在服务端进行,创建下单的接口为alipay.trade.app.pay (app支付接口2.0)

​ 涉及api

API英文名 API中文名字 文档
alipay.trade.app.pay app 支付接口 2.0 查看文档
alipay.trade.query 交易查询接口 查看文档
alipay.trade.close 交易关闭接口 查看文档
alipay.trade.refund 交易退款接口 查看文档
alipay.trade.fastpay.refund.query 交易退款查询接口 查看文档
alipay.data.dataservice.bill.downloadurl.query 查询账单下载地址接口 查看文档
alipay.trade.refund.depositback.completed 收单退款冲退完成通知 查看文档

手机网站支付

接入准备

​ 手机网站支付提供的是在商家的移动端网页中集成支付宝支付功能。在页面下单,返回支付宝链接,拉起支付宝客户端(h5的支付页面只有旧商家支持)。

​ 如果是在web-view 中打开的话,可以考虑转用 手机网站转APP支付

由于手机网站产品为了商家以及用户更好的支付安全保障,进行了产品优化升级。 在用户安装了支付宝客户端的前提下,产品支付流程基本不变,按原流程直接唤起钱包进行支付。 在未安装支付宝客户端的前提下,支付流程有所变化,升级后不再唤起 h5 网页支付,会引导用户下载支付宝客户端进行支付。

  • 2019 年 8 月份开始签约的手机网站支付产品会走新的支付流程,历史签约产品商家仍然支持唤起 h5 页面支付。
  • 对于部分历史签约商户,若您的 h5 支付成功率极低的,为了提升支付体验和安全性,也会升级为新产品流程。
服务端接入流程

image.png

手机网站支付流程图

  1. 用户 在商户的H5网站下单支付后,商户系统 调用 alipay.trade.wap.pay(手机网站支付接口2.0)接口参数规范生成订单数据;然后在前端页面通过 Form 表单的形式向 支付宝系统 发送支付请求。此时支付宝会自动将页面跳转至支付宝 H5 收银台页面,如果用户手机上安装了支付宝 App,则自动唤起支付宝 App,否则提示下载支付宝 App。
  2. 用户在支付宝 App 或 H5 收银台完成支付后,会根据商户在手机网站支付 API 中传入的前台回跳地址 return_url 自动跳转回商户页面,同时在 URL 请求中以 Query String 的形式附带上支付结果参数,详细回跳参数详见文末 附录一:前台回跳参数说明
  3. 除了正向支付流程外,支付宝也提供交易查询、关闭、退款、退款查询以及对账等配套API。

说明

  • 开发者需要关注安装了支付宝和未安装支付宝的两种测试场景,对于在手机浏览器唤起 H5 页面的模式下,如果安装了支付宝却没有唤起,大部分原因是当前浏览器不在支付宝配置的白名单内。
  • 对于商户 App 内嵌 web-view 中的支付场景,建议集成支付宝 App支付 产品。或者您可以使用 手机网站支付转Native支付 的方案,不建议在您的 App 中直接接入手机网站支付。
  • 在 IOS 系统中,唤起支付宝 App 支付完成后,不会自动回到浏览器或商户 App。用户可手工切回到浏览器或商户 App;支付宝 H5 收银台会自动跳转回商户 return_url 指定的页面。
  • 支付宝还会根据原始支付 API 中传入的异步通知地址 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统,详情见 支付结果异步通知

涉及api

API 英文名 API 中文名
alipay.trade.wap.pay 手机网站支付接口2.0
alipay.trade.query 交易查询接口
alipay.trade.close 交易关闭接口
alipay.trade.refund 交易退款接口
alipay.trade.fastpay.refund.query 交易退款查询接口
alipay.data.dataservice.bill.downloadurl.query 查询账单下载地址接口

电脑网站支付

接入准备

​ 可以商家的PC端网站中直接跳到支付宝PC网站收银台完成收款,流程如下

  1. 用户在商户网站选择需购买的商品及商品款式后,点击立即购买(可以在PC淘宝网址下随便找一个商品尝试 or 优酷网页版购买会员)

  2. 网页跳转到支付宝收银台页面,此时有两种付款方式供用户选择

    1. 用户可以使用支付宝 APP 扫一扫屏幕二维码,待手机提示付款后选择支付工具输入密码即可完成支付

      image.png

    2. 如果不使用手机支付,也可以点击图 1 页面右侧的 登录账户付款,输入支付宝账号和支付密码登录 PC 收银台

      image.png

  3. 用户选择付款方式后,输入支付密码并点击 确认付款,付款成功则页面跳转到付款成功页。

    image.png

接入流程
  1. 商户系统调用 alipay.trade.page.pay(统一收单下单并支付页面接口向支付宝发起支付请求,支付宝对商户请求参数进行校验,而后重新定向至用户登录页面。

  2. 用户确认支付后,支付宝通过 get 请求 returnUrl(商户入参传入),返回同步返回参数。

  3. 交易成功后,支付宝通过 post 请求 notifyUrl(商户入参传入),返回异步通知参数。

  4. 若由于网络等原因,导致商户系统没有收到异步通知,商户可自行调用 alipay.trade.query(统一收单线下交易查询接口查询交易以及支付信息(商户也可以直接调用该查询接口,不需要依赖异步通知)。

image.png

涉及api

接口英文名 接口中文名
alipay.trade.page.pay 统一收单下单并支付页面接口
alipay.trade.refund 统一收单交易退款接口
alipay.trade.fastpay.refund.query 统一收单交易退款查询接口
alipay.trade.query 统一收单线下交易查询接口
alipay.trade.close 统一收单交易关闭接口
alipay.data.dataservice.bill.downloadurl.query 查询对账单下载地址
alipay.trade.refund.depositback.completed 收单退款冲退完成通知

API

支付API的文档 类似微信,主要区别在于下单,其余都通用,主要用于讲述详细的接口参数内容。

​ 建议主要从支付文档的开放能力处,了解 具体业务需要的接口 以及 需要开通什么内容,再回到支付文档中查看接口明细

image.png

图片还来源于支付宝

下单接口api 接口场景 接口方法
统一收单交易支付接口 商家扫你的付款码码(扫码枪) alipay.trade.pay
统一收单线下交易预创建 你扫商家的收款码,收款码是商家通过收银台或者商户后台调用支付宝接口生成 alipay.trade.precreate
app支付接口2.0 外部的APP通过调用支付宝的sdk拉起支付宝 alipay.trade.app.pay
手机网站支付接口2.0 在手机上网站上请求支付宝 alipay.trade.wap.pay
统一收单下单并支付页面接口 在PC网址上请求支付宝拉起页面 alipay.trade.page.pay

image.png

总结

​ 对于支付宝支付接入来说,创建完应用,最主要的应该是 【开放能力】这一栏,这里详细说了每个能力需要的 准备 、业务场景,以及示例和相关代码的下载,可以让开发者又明确的方向。

​ api的接入,可以先在【开放能力】对应业务的api列表中查看。再详细对接各个接口(文章中也有列出)

​ 在接入过程中,也有对应的小工具或沙箱环境,帮助更好的接入,如产品介绍中的 XXX接入助手image.png

​ 在【开放能力】中,每个具体的场景也会有对应的常见问题提供,有疑惑一般也可以在这里找到解答。如果真的在文档中找不到答案,也可以选择需要在线解答,点击页面右边的咨询提问即可。

image.pngimage.png

问题

1. 新增网关配置密钥会不会影响旧的密钥以及接口

​ 支付宝是存在新旧两个汪公馆接口的,其中是各自不影响的。

相关文档

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享