支付宝的安卓签名机制制是怎样的

当前访客身份:游客 [
当前位置:
错误代码 说明 EXPARTNER_INFO_UNCORRECT
传入外部商户接口信息不正确
TRADE_BUYER_NOT_MATCH
买家账户与...
@支付宝技术 你好,想跟你请教个问题:我的网站签约了支付宝
但是客户购买出现了 错误代码 ILLEGAL_PARTNER_EXTERFACE这个问题
需要开发一款android的应用程序,要有使用支付宝的支付功能,相关的接口文档和使用demo在哪里下载,着急等待中。。。。。。
因为网站是做比特币的所以想搞一个api应用端口来支付,之前打算一直用双乾支付的,他们现在正在开发api端口,没办法只好用支付宝了,不知道api怎么搞
公司让我写一个付费的模块,需要调用支付宝,可是登录支付宝验证的模块,我不知道怎么验证,用接口么?
我想做一个android app集成支付宝支付功能的demo。 把官方demo下载下来导入到eclipse,然后修改PartnerConfig里的配置信息...
电子商务网站使用第三方支付平台的网银直连功能到底有啥用? 即使不使用网银直连,进入第三方支付平台,也可以直接用网银支付啊? 好像只是选择的顺序不同罢了
支付宝 (sign)参数的生成方式,看了下接口协议没看懂,麻烦各位是否能给讲解下 9.1 生成待签名的字符串 9.1.1 需要参与签名的参数 在请求参数列...
有哪位大侠能不能开发一个支付宝插件
能支持opencart版本1.5.1.3的,这里有一个1.4.9的支付宝插件 /...
共有 3 个服务,而且还挺活跃,浏览器都已经关闭,没有使用什么支付服务!!!
写了个支付的中间层,负责应用与第三方支付平台的交互 支付层与第三方交互完成后,有类似的一个类似支付宝异步通知的东西,负责通知应用这笔订单已经支付成功。 现...
调用的是java的支付宝接口 使用的是UTF-8的那个工程 但是付款成功款也收到了 回调到return_url的时候 显示错误。 调试后发现是签名验证错误...
下面是支付宝的文件,return_url.php 接口可以获得了用户的姓名,邮箱。要实现快速注册,并登录该如何实现,求教。 &?php
asp个人网站集成即时到帐支付宝,如何集成。按官方给的视频教程,照着做,没有成功。支付宝集成方面本人还是菜鸟,请研究过这方面的老鸟们指导一下,不胜感谢~ ...
OTP的算法如下: // 生成的密码是多少位
$length = 6;
// 密码有效期
$expire = 30;
// 口令密钥
咨询个问题,我是一个支付宝第三方开发者,我需要将我申请的商家支付宝中的钱转账到任意一个支付宝账户中,我看了支付宝开发的产品没看到有这个功能,问下支付宝真...
支付宝生产线上用的是什么服务器?jetty ? jboss ? 还是 WebSphere ?
网站如何和支付宝对接。让支付直接到账呢?拜谢
有人给出了1.4.2版本的模块,但是现在是1.6.1,请问要如何修改 或者根据支付宝给的集成文档,要如何集成到magento 我对php只懂一点点,接近小...
求解这个退款详细数据 该填啥?号就是支付宝即时到帐的交易号了
找不到我想要的答案?本开发文档的阅读对象为:
具有一定开发能力,了解PHP、JAVA、.NET等开发语言的开发、维护或管理人员。
优化支付渠道及返回参数
完善接入规范,方便商户接入
优化文档结构,整合结果码
整合 2.0 接口内容、交易流程、接入规范等内容
支付宝针对线下商户所推出的组合支付产品,包含条码支付、扫码支付、声波支付。
商户通过扫码枪扫描用户支付宝钱包客户端的“付款码”,并完成支付的过程。
商户生成二维码,用户通过支付宝钱包客户端扫码,并完成支付的过程。
通过麦克风识别用户支付宝钱包客户端所发出的声波讯息,并完成支付的过程。
商户后台和支付宝后台根据相同算法各自生成一个相同的结果,该结果用以校
验双方身份的合法性。
支付宝分配给开发者的应用ID号,用于标识一个应用,通常为16位数字。
用于标识一个用户在商户端的身份,商户可通过Open ID判断是否为同一名用户。
红外扫码枪
红外扫码枪,用于扫描用户支付宝钱包客户端的“付款码”。
图3.1 红外扫码枪
智能终端设备
已装有支付宝钱包客户端的智能移动设备,包括支持 ios、android、Windows Phone 系统的手机、PAD等。
图 3.2 智能终端设备(手机)
图 3.3 智能终端设备(PAD)
条码支付,是商户收银人员通过扫码终端设备(智能手机或扫码枪等),扫描客户端“付款码”并完成支付的模式。该模式适用于线下实体店支付、面对面支付等场景。
步骤1:用户打开支付宝钱包(建议 8.0 以上版本),点击右上角进入“付款码” 界面(图 3.4);
步骤2:商户收银员在收银系统中创建支付订单;
步骤3:收银员使用扫码设备扫描用户的条型码/二维码(图 3.5),商户收银系统向支付宝提交支付信息;
图 3.4 支付宝钱包首页
图 3.5 商户扫码终端扫描付款码
步骤4:支付宝系统收到支付请求,判断是否需验证支付密码。
步骤5:若不需验证支付密码,将直接发起扣款并完成支付(图 3.8);否则,将弹出交易信息界面(图 3.6),用户点“确认付款”后转入输入密码界面(图 3.7),密码验证成功后提示支付成功,否则,将弹出错误提示。
图 3.6 交易信息界面
图 3.7 密码输入框界面
图 3.8 支付成功界面
商户侧接入流程
商户收银台与商户收银系统通信,商户后台系统向支付宝后台发送交易请求和接收返回结果(图 3.9)。
图 3.9 商户与支付宝接入流程
完整交易流程
条码支付分为免密支付和验密支付,其完整交易流程分别如下:
条码支付(免密)流程见图 3.10;
条码支付(验密)流程见图 3.11;
图 3.10 条码支付(免密)流程
图 3.11 条码支付(验密)流程
异常流程(撤销订单)
因网络或系统异常导致支付状态不明时撤销订单的流程(图 3.12)。
图 3.12 异常处理流程(撤销订单)
若撤销订单时提示重试,建议每次重试间隔时间应不低于 5秒,若连续重试次数超过 5 次,就不建议再次尝试,这时请检查网络或系统原因;
退款处理流程(图 3.13);
图 3.13 退款处理流程
商户接入支付宝条码支付时,调用 API 须遵循以下规则:
传输方式为保证交易安全性,采用 HTTPS 传输
提交方式采用 POST 方法提交
数据格式返回参数均为 JSON 格式
字符编码支持 GBK、GB2312、UTF-8 字符编码
签名算法商户生成签名字符串,现支持的签名算法类型为 RSA
签名要求请求和接收数据均需要校验签名
支付宝开放平台采用了 RSA 安全签名机制,开发者可以通过支付宝公钥验证消息来源,同时可使用自己的私钥对信息进行加密。
RSA 算法及数字签名机制是支付宝开放平台与开发者网关安全通信的基础,若开发者不熟悉RSA及数字签名,请先查阅相关资料。
RSA 私钥及公钥生成
1. 生成 RSA 私钥及公钥,请详见“”
商户上传公钥
签约条码支付产品的开发者,将自动获得一个系统生成的服务窗应用,该应用可配置密钥并对接各种接口,而不需重新创建应用。
原服务窗开发者可以使用在服务窗后台(/)已登记的公钥,无需重新上传公钥。
开发者登录“应用管理”功能后,在服务窗应用对应的操作栏中点击“配置密钥”,转入如下界面:
图 4.1 配置密钥(未上传公钥时)
在出现的弹框中填入OpenSSL工具生成的公钥。
公钥文件需去除头尾、换行和空格,仅需填入字符串。
图 4.2 上传公钥
转换前pem文件格式:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/Q
pkddCVXnZ4bAUaQjXQIDAQAB
-----END PUBLIC KEY-----
转换后的字符串:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/
QpkddCVXnZ4bAUaQjXQIDAQAB
下载支付宝公钥
在支付宝开放平台创建应用后,在服务窗应用中进入“配置密钥”,转入如下页面。
图 4.3 配置密钥(已上传公钥时)
点击“查看支付宝公钥”,可查看支付宝 RSA 公钥。
图 4.4 获取支付宝公钥
支付宝公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB
PEM格式化后的支付宝公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkr
IvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsra
prwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUr
CmZYI/FCEa3/cNMW0QIDAQAB
-----END PUBLIC KEY-----
建议开发者使用支付宝提供的 SDK 进行应用开发,使用 SDK 进行开发有以下优点:
SDK会随着新接口的发布而同步更新
SDK会随着老接口的更新而同步更新
SDK让底层逻辑变得透明和简单,开发者只需关注于自身的业务逻辑
SDK集成了编码、签名等常用方法,开发者无需额外耗费时间
提供了基于SDK开发的Demo,开发者上手更容易
SDK下载地址详见:
集成SDK后,会由SDK自动完成加签验签逻辑,故无需阅读下述加签验签内容,只需要下载支付宝公钥。
支付宝网关与开发者的通信主要由开发者主动调用支付宝网关接口(下文简称OpenAPI)实现。其中支付宝网关地址:
支付宝开放平台的OpenAPI调用采取POST方式(application/x-www-form-urlencoded),内容通过键值对(Key-Value)的形式作为参数传入,在接口调用时,需要对传入的数据进行签名,签名方法如下:
1. 以下是条码支付请求API的参数列表,如:
method=alipay.trade.pay,
app_id=7148,
charset=utf-8,
sign_type=RSA,
timestamp= 03:07:50,
biz_content={
"out_trade_no": "",
"scene": "bar_code",
"auth_code": "868877",
"total_amount": "88.88",
"discountable_amount":"8.88",
"undiscountable_amount ": "80",
"subject": "条码支付",
"goods_detail": [
"goods_id": "apple-01",
"goods_name": "ipad",
"goods_category": "7788230",
"price": "88.88",
"quantity": "1"
"operator_id": "op001",
"store_id": "pudong001",
"terminal_id": "t_001",
"time_expire": " 03:07:50"
2. 将所有POST参数(sign除外)进行字典排序,组成字符串,如:
app_id=7148&biz_content={"out_trade_no": "","scene": "bar_code","auth_code": "868877","total_amount": "88.88","discountable_amount":"8.88","undiscountable_amount ": "80","subject": "条码支付","goods_detail": [{"goods_id": "apple-01","goods_name": "ipad","goods_category": "7788230","price": "88.88","quantity": "1"}],"operator_id": "op001","store_id": "pudong001","terminal_id": "t_001","time_expire": " 03:07:50"}&charset=utf-8&method=alipay.trade.pay&sign_type=RSA&timestamp= 03:07:50
3. 进行RSA签名后获得sign,再经过Base64编码,其最终的请求报文样式参考如下:
REQUEST URL: /gateway.do?charset=utf-8
(注:根据选择的charset设值)
REQUEST METHOD: POST
method=alipay.trade.pay
sign=EG7vAe13LppMu1h7YFden307Hs6TrDX8Uo0g9h29xgqsX/6j9A1lyxAQ5Hj3t4HGHpiOjx3LZ4hLJqER20GjVY1ay+4E/8nCdrD6XvVhd2pPtPTxoVFNxw6dPZ3J9LXWFB05I8qNcQCUhWf2HROBTjCDXTm9NmVeIGBai/4KGLY=
charset=utf-8
sign_type=RSA
app_id=7148
timestamp= 03:07:50
biz_content={
"out_trade_no": "",
"scene": "bar_code",
"auth_code": "83883",
"total_amount": "88.88",
"discountable_amount":"8.88",
"undiscountable_amount ": "80",
"subject": "条码支付",
"goods_detail": [
"goods_id": "apple-01",
"goods_name": "ipad",
"goods_category": "7788230",
"price": "88.88",
"quantity": "1"
"operator_id": "op001",
"store_id": "pudong001",
"terminal_id": "t_001",
"time_expire": " 03:07:50"
没有值的参数无需传递,也无需包含进待签名数据;
将字符转化成字节流时指定的字符集应与charset一致;
charset参数需拼接在post请求的REQUEST URL之后,详见上文参考,同时 charset 参数也放在表单里面,并参与签名;
根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@等),那么该值需要做URL Encoding,这样请求接收方才能接收到正确的参数。此时,待签名数据应该是原始值而不是encoding之后的值
同步返回结果的验签
调用支付宝开放平台接口后,支付宝会向开发者登记网关发送回传信息。为保证信息安全,会经支付宝私钥进行RSA加密,开发者收到消息后可通过支付宝RSA公钥进行解密。
1. 以调用支付宝支付API为例,返回JSON格式,需要对返回结果进行验签。
"alipay_trade_pay_response": {
"code": "10000",
"msg": "订单支付成功",
"trade_no": "1536",
"out_trade_no": "8248",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88",
"receipt_amount": "8.88",
"gmt_payment": " 15:45:57",
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM\n+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhug\nuAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU=\n"
2. 取出alipay_trade_pay_response部分,即为待签名字符串
"code": "10000",
"msg": "订单支付成功",
"trade_no": "1536",
"out_trade_no": "8248",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88",
"receipt_amount": "8.88",
"gmt_payment": " 15:45:57",
3. 将签名参数(sign)使用base64解码为字节码串
4. 使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及支付宝公钥验证签名。
网关返回错误码汇总
code(错误代码)
msg(错误代码描述)
sub_code(明细错误码)
sub_msg(明细错误码描述)
Service Currently Unavailable
aop.unsupport-operation
不支持的操作
Service Currently Unavailable
aop.unknow-error
Service Currently Unavailable
isp.unknow-error
Insufficient Token Permissions
aop.invalid-auth-token
无效的访问令牌
Insufficient Token Permissions
aop.auth-token-time-out
访问令牌已过期
Missing Required Arguments
isv.missing-method
缺少方法名参数
Missing Required Arguments
isv.missing-platform
缺少平台来源名参数
Missing Required Arguments
isv.missing-signature
缺少签名参数
Missing Required Arguments
isv.missing-app-access-token
缺少应用访问令牌
Missing Required Arguments
isv.missing-signature-type
缺少签名类型参数
Missing Required Arguments
isv.missing-signature-key
缺少签名配置
Missing Required Arguments
isv.missing-session
缺少SessionKey参数
Missing Required Arguments
isv.missing-app-id
缺少AppID参数
Missing Required Arguments
isv.missing-timestamp
缺少时间戳参数
Missing Required Arguments
isv.missing-version
缺少版本参数
Missing Required Arguments
isv.missing-app-uid
商户类应用需传入app_uid参数
Invalid Arguments
isv.invalid-parameter
参数无效,格式不对、非法值、越界等
Invalid Arguments
isv.upload-fail
文件上传失败
Invalid Arguments
isv.invalid-file-extension
文件扩展名无效
Invalid Arguments
isv.invalid-file-size
文件大小无效
Invalid Arguments
isv.invalid-platform
无效的平台来源
Invalid Arguments
isv.invalid-method
不存在的方法名
Invalid Arguments
isv.invalid-format
无效数据格式
Invalid Arguments
isv.invalid-signature-type
无效签名类型
Invalid Arguments
isv.invalid-signature
Invalid Arguments
isv.invalid-app-id
无效的AppID参数
Invalid Arguments
isv.invalid-timestamp
非法的时间戳参数
Invalid Arguments
isv.invalid-version
非法的版本参数
Invalid Arguments
isv.unsupported-version
不支持的版本号
Invalid Arguments
isv.invalid-encoding
Invalid Arguments
isv.invalid-charset
字符集错误
Invalid Arguments
isv.invalid-digest-type
摘要类型错误
Invalid Arguments
isv.invalid-digest
摘要类型错误
Invalid Arguments
isv.openid-error
openId转换错误
Invalid Arguments
isv.invalid-app-method
应用不包含此方法名
Invalid Arguments
isv.illegal-json
不正确的JSON格式
Invalid Arguments
isv.illegal-card-no
不正确的卡号
Invalid Arguments
isv.invalid-partnerid
userid不能对应到合法的parnter
Insufficient Conditions
isv.invalid-app-state
应用状态不满足条件
Insufficient Conditions
isv.invalid-subscribe-relations
无效的订购关系
Insufficient Conditions
isv.access-data-time-out
访问的内容已过期
Call Limited
isv.app-call-limited
应用调用次数超限,包含调用频率超限
Call Limited
isv.method-call-limited
API调用次数超限,包含调用频率超限
Insufficient Permissions
isv.insufficient-isv-permissions
ISV权限不足
Insufficient Permissions
isv.insufficient-user-permissions
用户权限不足
开发者的AppId
String(32)
支付宝分配给开发者的应用Id
String(128)
alipay.trade.pay
参数字符编码
String(10)
请求使用的编码格式,如utf-8,gbk,gb2312等
String(10)
商户生成签名字符串所使用的签名算法类型,目前支持RSA,DSA
String(256)
商户请求参数的签名串,详见安全规范中的签名生成算法
发送请求的时间,格式“yyyy-MM-dd HH:mm:ss”
接口版本号
调用的接口版本,固定为:1.0
biz_content
JSON 格式,具体包含的内容参见各个接口的业务参数描述
详见各业务接口
请参照安全规范中的签名部分
fc209d86b57b2adbebaa7d9
String(32)
业务处理结果。参照“结果码”
结果码描述
String(256)
业务处理结果描述
订单支付成功
错误子代码
String(64)
对结果码进行原因说明,当业务结果为 10000 时,不返回该参数。详细可参考:“错误码”
ACQ.INVALID_PARAMETER
错误子代码描述
String(256)
错误子代码描述信息。当业务结果为10000 时,不返回该参数。
应用场景实例
收银员使用扫码设备读取用户支付宝钱包“付款码”后,将二维码或条码信息通过本接口上送至支付宝发起支付。
API调用说明
alipay.trade.pay
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数 biz_content 中,详见
out_trade_no
商户订单号
String(64)
商户订单号,64个字符以内、只能包含字母、数字、下划线;需保证在商户端不重复。
String(32)
条码支付,取值:bar_code
支付授权码
String(32)
用户支付宝钱包中的“付款码”信息
卖家支付宝用户
String(28)
如果该值为空,则默认为商户签约账号对应的支付宝用户 ID
total_amount
订单总金额
订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,],如果同时传入了【打折金额】,【不可打折金额】,【订单总 金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
discountable_amount
可打折金额
参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,]如果该值未传入,但传入了【订单总金额】,【不可打折金额】则该值默认为【订单总金额】- 【不可打折金额】
undiscountable_amount
不可打折金额
不参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,]如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】- 【打折金额】
String(256)
Iphone6 16G
String(128)
对交易或商品的描述
Iphone6 16G
goods_detail
商品明细列表
订单包含的商品列表信息, Json 格式,其它说明详见:“商品明细说明”
[{"goods_id": "apple-01","goods_name":"ipad","goods_category":"","price":" 2000.00","quantity":"1"}]
operator_id
商户操作员编号
String(28)
商户的操作员编号
商户门店编号
String(32)
商户门店编号
terminal_id
机具终端编号
String(32)
商户机具终端编号
extend_params
String(512)
业务扩展参数
{“sys_service _provider_id”: ” 7846”}
time_expire
支付超时时间
该笔订单允许的最晚付款时间,逾期将关闭交易。格式为: yyyy-MM-dd HH:mm:ss 线下条码支付,建议传入当前时间往后 30 分钟的时间点
timeout_express
支付超时时间表达式
该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c- 当天(无论交易何时创建, 都在 0 点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。该值优先级低于time_expire。
royalty_info
String(2000)
描述分账信息,Json格式,其它说明详见:“分账说明”
{"royalty_type":"ROYALTY","royalty_detail_infos":[{"serial_no":"1","trans_out":"5726","trans_in":"8402","amount":"0.10","desc":"分账测试1"},{"serial_no":"2","trans_out":"5726","trans_in":"7869","amount":"0.10","desc":"分账测试2"}]}
若机具商接入,terminal_id(机具终端编号)必填,store_id(商户门店编号)和 seller_id(卖家 支付宝用户 ID)为选填内容。
若系统商接入,store_id(商户的门店编号)必填,terminal_id(机具终端编号)和 seller_id(卖 家支付宝用户 ID)为选填内容。
如果传入的store_id(商户的门店编号)与门店录入的store_id不匹配,则不能核销该门店发布的优惠活动。
method=alipay.trade.pay,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign=MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrTr84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJGwSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yxDgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZhHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmocjE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9PbVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJAVco+9qQzZ7JZzFzk0KTWhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw==",
timestamp= 03:07:50",
biz_content={
"out_trade_no": "",
"scene": "bar_code",
"auth_code": "64394",
"total_amount": "88.88",
"discountable_amount":"8.88",
"undiscountable_amount ": "80",
"subject": "当面付条码支付",
"goods_detail": [
"goods_id": "apple-01",
"goods_name": "ipad",
"goods_category": "7788230",
"price": "88.88",
"quantity": "1"
"operator_id": "op001",
"store_id": "pudong001",
"terminal_id": "t_001",
"time_expire": " 03:07:50"
当结果码(code)为 40004 时,只返回公共返回参数中的信息。
当结果码(code)为 10003 时,除公共返回参数外,还将以 JSON 格式返回如下列表中的值:
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
买家支付宝用户号
String(32)
买家支付宝用户号
buyer_logon_id
买家支付宝账号
String(100)
买家支付宝账号,将用*号屏蔽部分内容
159****5620
total_amount
Number(9,2)
订单总金额。
当结果码(code)为 10000 时,除公共返回参数外,还将以 JSON 格式返回如下列表中的值:
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
买家支付宝用户号
String(32)
买家支付宝用户号
buyer_logon_id
买家支付宝账号
String(100)
买家支付宝账号,将用*号屏蔽部分内容
159****5620
total_amount
Number(9,2)
订单总金额。
receipt_amount
Number(9,2)
商家在交易中实际收到的款项
invoice_amount
Number(9,2)
用户在交易中支付的可开具发票的金额
buyer_pay_amount
Number(9,2)
用户在交易中支付的金额
point_amount
积分宝金额
Number(9,2)
使用积分宝支付的金额
gmt_payment
买家付款时间。 格式为
yyyy-MM-dd HH:mm:ss
fund_bill_list
交易资金明细信息集合
本次交易使用的资金明细信息列表,包含多个渠道信息子节点,json 格式。该节点包含的 参数请参见“资金明细信息说明”
参见资金明细信息说明
store_name
交易发生所在门店的门店名称
证大五道口店
成功请求示例:
"alipay_trade_pay_response": {
"code": "10000",
"msg": "订单支付成功",
"trade_no": "1536",
"out_trade_no": "8248",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88",
"receipt_amount": "8.88",
"gmt_payment": " 15:45:57",
"fund_bill _list": [
"fund_channel": "ALIPAYACCOUNT",
"amount": "80.00"
"fund_channel": "DISCOUNT",
"amount": "8.88"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM\n+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhug\nuAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU=\n"
失败请求示例:
"alipay_trade_pay_response": {
"code": "40004",
"msg": "交易创建失败",
"sub_code":"ACQ.EXIST_FORBIDDEN_WORD",
"sub_msg":"订单信息中包含了违禁词"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM\n+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhug\nuAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU=\n"
返回支付处理中示例:
"alipay_trade_pay_response": {
"code": "10003",
"msg": "订单创建成功支付处理中",
"trade_no": "1536",
"out_trade_no": "8248",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM\n+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhug\nuAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU=\n"
ACQ.SYSTEM_ERROR
接口返回错误
请立即调用查询订单 API,查询当前订单的状态,并根据订单状态决定下一步的操作
ACQ.INVALID_PARAMETER
请求参数未按指引进行
检查请求参数,修改后重新发起请求
ACQ.ACCESS_FORBIDDEN
无权限使用接口
未签约条码支付或者合
联系支付宝小二签约条码支
ACQ.EXIST_FORBIDDEN_ WORD
订单信息中包含违禁词
订单信息中(标题,商品名称,描述等)包含了违禁词
修改订单信息后,重新发起请求
ACQ.PARTNER_ERROR
应用 APP_ID 填写错误
应用 APP_ID 填写错误或者对应的 APP_ID 状态无效
联系支付宝小二,确认 APP_ID 的状态
ACQ.TOTAL_FEE_EXCEED
订单总金额超过限额
输入的订单总金额超过
修改订单金额再发起请求
ACQ.PAYMENT_AUTH_CODE_INVALID
支付授权码无效
当前使用的支付授权码无效,可能已被使用过或者输入错误
用户刷新条码后,重新扫码发起请求
ACQ.CONTEXT_INCONSISTENT
交易信息被篡改
该笔交易已存在,但是
交易信息匹配不上
更换商家订单号后,重新发起请求
ACQ.TRADE_HAS_SUCCESS
交易已被支付
该笔交易已存在,并且
已经支付成功
确认该笔交易信息是否为当前买家的,如果是则认为交易付款成功,如果不是则更换商家订单号后,重新发起请求
ACQ.TRADE_HAS_CLOSE
交易已经关闭
该笔交易已存在,并且
该交易已经关闭
更换商家订单号后,重新发起请求
ACQ.BUYER_BALANCE_NOT_ENOUGH
买家余额不足
买家余额不足
买家绑定新的银行卡或者支付宝余额有钱后再发起支付
ACQ.BUYER_BANKCARD_ BALANCE_NOT_ENOUGH
用户银行卡余额不足
用户指定扣款的银行卡中没有钱
建议买家更换支付宝进行支
付或者更换其它付款方式
ACQ.ERROR_BALANCE_PAYMENT_DISABLE
余额支付功能关闭
用户关闭了余额支付功能
用户打开余额支付开关后,再重新进行支付
ACQ.BUYER_SELLER_EQUAL
买卖家不能相同
交易的买卖家为同一个人
更换买家重新付款
ACQ.TRADE_BUYER_NOT_MATCH
交易买家不匹配
该笔交易已存在,但是交易不属于当前付款的买家
更换商家订单号后,重新发起请求
ACQ.BUYER_ENABLE_STATUS_FORBID
买家状态非法
买家的状态不合法,不能进行交易
用户联系支付宝小二,确认买 家状态为什么非法
ACQ.PULL_MOBILE_CASHIER_FAIL
唤起移动收银台失败
需要唤起用户手机上的收银台进行付款确认,但是唤起时失败
用户刷新条码后,重新扫码发起请求
ACQ.MOBILE_PAYMENT_SWITCH_OFF
用户的无线支付开关关闭
用户关闭了无线支付开关
用户在PC上打开无线支付开关后,再重新发起支付
ACQ.PAYMENT_FAIL
支付系统支付过程中失败
用户刷新条码后,重新发起请 求,如果重试一次后仍未成功,更换其它方式付款
ACQ.BUYER_PAYMENT_AMOUNT_DAY_LIMIT_ERROR
买家付款日限额超限
当前买家(用户)当日支付宝付款额度已用完
更换买家进行支付
ACQ.BEYOND_PAY_RESTRICTION
商户收款额度超限
商户收款额度超限
联系支付宝小二提高限额
ACQ.BEYOND_PER_RECEIPT_RESTRICTION
商户收款金额超过月限额
商户收款金额超过月限额
联系支付宝小二提高限额
ACQ.BUYER_PAYMENT_AMOUNT_MONTH_LIMIT_ERROR
买家付款月额度超限
买家本月付款额度已超限
让买家更换账号后,重新付款或者更换其它付款方式
ACQ.SELLER_BEEN_BLOCKED
商家账号被冻结
商家账号被冻结
联系支付宝小二,解冻账号
ACQ.ERROR_BUYER_CERTIFY_LEVEL_LIMIT
买家未通过人行认证
当前买家(用户)未通
过人行认证
让用户联系支付宝小二并更
换其它付款方式
ACQ.PAYMENT_REQUEST_HAS_RISK
支付有风险
当前支付行为,支付宝认为有风险
更换其它付款方式
ACQ.NO_PAYMENT_INSTUMENTS_AVAILABLE
没用可用的支付具
用户当前没有任何可以
用于付款的渠道
更换其它付款方式
USER_FACE_PAYMENT_SWITCH_OFF
用户当面付付款开关关闭
用户当面付付款开关关闭
让用户在手机上打开当面付付款开关
商品明细说明
商品的编号
alipay_goods_id
支付宝统一的商品编号
支付宝定义的统一商品编号
goods_name
商品单价,单位为元。
goods_category
商品描述信息
扩展信息说明
sys_service_provider_id
系统商编号
系统商的编号。
资金明细信息说明
fund_channel
支付渠道,参见“支付渠道说明”
使用指定支付渠道支付的金额,单位为元
支付渠道说明
支付渠道代码
支付宝红包
ALIPAYACCOUNT
支付宝余额
商户店铺卡
商户优惠券
应用场景实例
本接口提供查询支付宝支付订单的功能,商户可以通过本接口主动查询订单状态,完成下一步的业务逻辑。
需要调用查询接口的情况:
当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
调用条码支付支付接口后,返回系统错误或未知交易状态情况;
调用条码支付请求后,返回处理中的状态(返回结果中的code等于10003);
调用撤销接口API之前,需确认该笔交易目前支付状态;
API调用说明
alipay.trade.query
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数 biz_content 中,详见
支付宝交易号
String(64)
支付宝交易号,和商户订单号不能同时为空
out_trade_no
商户订单号
String(64)
订单支付时传入的商户订单号。trade_no,out_trade_no 如果同时存在优先取 trade_no
method=alipay.trade.query,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign= MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrTr84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJGwSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yxDgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZhHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmocjE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9PbVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJAVco+9qQzZ7JZzFzk0KTWhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw== ",
timestamp= 03:07:50,
biz_content={
"out_trade_no": ""
当结果码(code)为40004时,只返回公共返回参数中的信息。
当结果码(code)为10000时,除公共返回参数外,还将以JSON格式返
回如下列表中的值:
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
买家支付宝用户号
String(32)
买家支付宝用户号
buyer_logon_id
买家支付宝账号
String(100)
买家支付宝账号,将用*号屏蔽部分内容
159****5620
trade_status
String(32)
交易目前所处的状态
TRADE_CLOSED
total_amount
本次交易支付的订单金额,单位为人民币(元)。
receipt_amount
Number(9,2)
商家在交易中实际收到的款项,单位为元。
invoice_amount
Number(9,2)
用户在交易中支付的可开具发票的金额
buyer_pay_amount
Number(9,2)
用户在交易中支付的金额
point_amount
积分宝金额
Number(9,2)
使用积分宝支付的金额
send_pay_date
本次交易打款给
卖家的时间
本次交易打款到卖家账户的时间,格式为yyyy-MM-dd HH:mm:ss。
terminal_id
商户机具终端编号
String(32)
商户机具终端编号
alipay_store_id
支付宝店铺编号
String(32)
支付宝商家店铺编号
商户门店编号
String(32)
商户门店编号
store_name
交易发生所在门店的门店名称
证大五道口店
fund_bill_list
资金单据信息的集合
本次交易使用的资金明细信息列表,包含多个渠道信息子节点,json 格式。该节点包含的参数请参见“资金明细信息说明”
详见资金明细信息说明
请求成功示例:
"alipay_trade_query_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"trade_status": "TRADE_SUCCESS",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88",
"receipt_amount": "8.88",
"send_pay_date": " 15:45:57",
"store_id":"NJ_S_001",
"terminal_id":"NJ_T_001",
"fund_bill_list": [
"fund_channel": "ALIPAYACCOUNT",
"amount": "80.00"
"fund_channel": "DISCOUNT",
"amount": "8.88"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="}
请求成功,但查询的交易未付款的示例:
"alipay_trade_query_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"trade_status": "WAIT_BUYER_PAY",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88",
"store_id":"NJ_S_001",
"terminal_id":"NJ_T_001",
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="}
请求失败示例:
"alipay_trade_query_response": {
"code": "40004",
"msg": "处理失败",
"sub_code": "ACQ.TRADE_NOT_EXIST",
"sub_msg": "交易不存在"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
ACQ.SYSTEM_ERROR
重新发起请求
ACQ.INVALID_PARAMETER
请求参数未按指引进行编写
检查请求参数,修改后重新发起请求
ACQ.TRADE_NOT_EXIST
交易不存在
传入的条件未查询到交易号
检查请求参数,修改后重新发起请求
资金明细信息说明
是否可为空
fund_channel
支付渠道,参见“支付渠道说明”。
使用指定支付渠道支付的金额,单位为元。
交易状态说明
WAIT_BUYER_PAY
交易创建,等待买家付款
TRADE_CLOSED
未付款交易超时关闭
支付完成后全额退款
TRADE_SUCCESS
交易支付成功
TRADE_FINISHED
交易结束,不可退款
支付渠道说明
支付渠道代码
支付宝红包
ALIPAYACCOUNT
支付宝余额
商户店铺卡
商户优惠券
应用场景实例
调用支付宝支付接口时未返回明确的返回结果(如由于系统错误或网络异常导致无返回结果),可使用本接口将交易进行撤销。
如果用户支付失败,支付宝会将此订单关闭;如果用户支付成功,支付宝会将支付的资金退还给用户。
只有发生支付系统超时或者支付结果未知时可调用撤销,其他正常支付 的单如需实现相同功能请调用申请退款 API。提交支付交易后调用【查询订单 API】, 没有明确的支付结果再调用【撤销订单 API】。
API调用说明
alipay.trade.cancel
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数 biz_content 中,详见
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
method=alipay.trade.cancel,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign= MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrTr84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJGwSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yxDgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZhHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmocjE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9PbVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJAVco+9qQzZ7JZzFzk0KTWhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw== ,
timestamp= 03:07:50,
biz_content={
"out_trade_no": ""
当结果码(code)为40004时,除公共返回参数外还将以JSON格式返回如下列表中的值:
retry_flag
是否可重试标志
对撤销失败的情况下,是否可以继续发起撤销请求的建议。
Y:可继续发起撤销请求;
N:不可继续发起撤销请求,即后续的撤销请求也不会成功。
当结果码(code)为10000时除公共返回参数外还将以JSON格式返回如下列表中的值。
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
retry_flag
是否可重试标志
撤销已成功无需重试
撤销执行的动作
String(10)
撤销执行的动作。
close:关闭交易,无退款;
refund:有退款。
请求成功示例:
"alipay_trade_cancel_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"retry_flag": "N",
"action": "close"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
请求失败示例:
"alipay_trade_cancel_response": {
"code": "40004",
"msg": "处理失败",
"sub_code": "ACQ.INVALID_PARAMETER",
"sub_msg": "参数无效",
"retry_flag": "N"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
AQC.SYSTEM_ERROR
请使用相同的参数再次调用
ACQ.INVALID_PARAMETER
请求参数未按指引填写
请求参数有错,重新检查请求后,再调用撤销
ACQ.SELLER_BALANCE_NOT_ENOUGH
卖家余额不足
商户的支付宝账户中无足够的资金进行撤销
商户支付宝账户充值后重新发起撤销即可
ACQ.REASON_TRADE_BEEN_FREEZEN
交易被冻结
当前交易被冻结,不允许进行撤销
联系支付宝小二,确认该笔交易的具体情况
应用场景实例
当交易发生之后一段时间内,由于买家或者卖家的原因需退款,卖家可通过退款接口将支付款退还给买家,支付宝将在收到退款请求并验证成功后,按退款规则将支付款按原路退到买家帐号上。
交易超过可退款时间(签约时设置的可退款时间)的订单无法进行退款
支付宝退款支持单笔交易分多次退款,多次退款需要提交支付宝交易号并设置不同的退款单号;总退款金额不能超过用户实际支付金额。
分多笔退款时,若一笔退款失败需重新提交,要采用原来的退款单号;
API调用说明
alipay.trade.refund
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数 biz_content 中,详见
支付宝交易号
String(64)
支付宝交易凭证号
refund_amount
需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
out_request_no
商户退款请求号
String(64)
标识一次退款请求,同一笔交易多次退款需要保证唯一
refund_reason
String(128)
退款的原因说明
商户的门店编号
String(32)
商户的门店编号
terminal_id
商户的终端编号
String(32)
商户的终端编号
method=alipay.trade.refund,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign=85bf83f78d5cefb804bd8e,
timestamp= 03:07:50,
biz_content={
"trade_no": "6707",
"refund_amount": "77.77",
"out_request_no": "HZ01RF001",
"refund_reason": "O2O当面付退款",
"store_id": "ST_001",
"terminal_id": "T_001"
当结果码(code)为40004时,只返回公共返回参数中的信息。
当结果码(code)为10000时,除公共返回参数外,还将以JSON格式返回如下列表中的值:
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
买家支付宝用户号
String(32)
买家支付宝用户号
buyer_logon_id
买家支付宝账号
String(100)
买家支付宝账号,将用*号屏蔽部分内容
159****5620
fund_change
本次退款请求是
否发生资金变动
对同一笔退款请求(商户退款请求单号相同),如果已退款成功,将直接返回上一次的退款结果,本字段标识本次退款请求是否发生了资金变动:
Y:发生资金变动;N:未发送资金变动。
refund_fee
累计退款金额
实际退款金额,单位为元,两位小数。
gmt_refund_pay
退款时间,格式为 yyyy-MM-dd HH:mm:ss。
refund_detail_item_list
退款资金明细信息集合
本次交易退款的资金明细信息列表,包含多个渠道信息子节点 ,json格式。该节点包含 的参数请参见“资金明细信息说明”
参见资金明细信息说明
store_name
交易发生所在门店的门店名称
证大五道口店
请求成功示例:
"alipay_trade_refund_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"fund_change": "Y",
"refund_fee": "77.77",
"gmt_refund_pay": " 15:45:57"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
请求失败示例:
"alipay_trade_refund_response": {
"code": "40004",
"msg": "处理失败",
"sub_code": "ACQ.REASON_TRADE_BEEN_FREEZEN",
"sub_msg": "请求退款的交易被冻结"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
ACQ.SYSTEM_ERROR
请使用相同的参数再次调用
ACQ.INVALID_PARAMETER
请求参数未按指引填写
请求参数有错,重新检查请求后,再调用退款
ACQ.SELLER_BALANCE_NOT_ENOUGH
卖家余额不足
商户的支付宝账户中无足够的资金进行退款
商户支付宝账户充值后重新发起退款即可
ACQ.REFUND_AMT_NOT_EQUAL_TOTAL
退款金额超限
全额退款时输入的退款金额与订单金额不一致
检查退款金额是否正确,重新修改请求后,重新发起退款
ACQ.REASON_TRADE_BEEN_FREEZEN
请求退款的交易被冻结
当前交易被冻结,不允许进行退款
联系支付宝小二,确认该笔交易的具体情况
ACQ.TRADE_NOT_EXIST
交易不存在
当前要退款的交易不存在
检查请求中的交易号和商户订单号是否正确,确认后重新发起
ACQ.TRADE_HAS_FINISHED
交易已完结
当前交易已完结,不允许退款
该交易已完结,不允许进行退款,确认请求的退款的交易信息是否正确
ACQ.TRADE_STATUS_ERROR
交易状态非法
当前交易状态不允许退款
查询交易,确认交易是否已经付款
ACQ.DISCORDANT_REPEAT_REQUEST
不一致的请求
重复的商户退款号但是请求的信息与之前的信息不一致
检查该退款号是否已退过款或更换退款号重新发起请求
ACQ.REASON_TRADE_REFUND_FEE_ERR
退款金额无效
输入的退款金额超过了该笔订单的可退金额
检查退款请求的金额是否正确
业务处理成功
业务处理失败
具体失败原因参见接口返回的错误码
业务处理中
该结果码只有在条码支付请求 API 时才返回,代表付款还在进行中,需要调用查询接口查询最终的支付结果
业务出现未知错误或者系统异常
业务出现未知错误或者系统异常,如果支付接口返回,需要调用查询接口确认订单状态或者发起撤销
商户需上传唯一的商户订单号(out_trade_no),同时建议商户订单号中包含年月日等时间信息;
传递商品明细列表;
上传“terminal_id(机具终端编号)、store_id(商户门店编号)、seller_id(卖家支付宝用户 ID)”信息;
注:若机具商接入,terminal_id(机具终端编号)必填,其余选填。若系统商接入,store_id(商户的门店编号)必填,其余选填。
返回值 fund_bill_list 中的支付宝渠道字段的解析不能硬编码,后续该字段会逐步增加。
设置支付超时时间(time_expire),即晚于该订单的最晚付款时间后,将关闭交易。请根据实际情况设置(如:30 分钟),否则,默认 15 天后自动超时。
如果是支付宝有返佣协议的合作商户,需要传入 extend_params 参数,并且在参数中传入 sys_service _provider_id,值为系统商签约账户的 partnerId。
如果商户只传了订单金额,没有传可打折和不可打折金额,支付宝在处理时,全当做可打折金额。
当支付接口返回支付处理中时(结果码 10003)需轮询查询,请设置合理的查询频率,建议参考值:频率为 5秒/次、轮询时间 30秒。
撤销订单接口有时间限制,通常 24 小时内有效;
撤销失败时,需关注返回结果中的重试标志,重试频率及次数参见撤销订单 API 章节。
支付宝退款支持单笔交易分多次退款,多次退款需要提交支付宝交易号并设置不同的退款单号;总退款金额不能超过用户实际支付金额。
分多笔退款时,若一笔退款失败需重新提交,要采用原来的退款单号。
商户收银系统(POS)
收银系统轮询时,需出现等待支付结果的界面
当收银系统进入轮询查询时,收银系统需要出现等待界面,此时不允许其他收单操作,同时等待界面上需有倒计时或滚动条,便于收银员了解当前订单进度,同时当等待超时后若支付结果还是未付款状态,收银系统应调用撤销订单 API。
轮询时出现等待界面,需要提供取消等待的功能
收银系统出现轮询等待界面时,界面上需有取消等待的按钮,便于收银员及时取消无效或者异常的订单,以提高收银效率;取消等待操作后,收银系统应调用撤 销订单 API,关闭或者冲正无效或异常的订单。
未联网时需禁止支付宝收款功能
商户收银系统在未联网的情况下应禁止收银员使用支付宝收款,并告知收银员网络异常。
小票包含店铺 ID、收银员 ID、支付宝交易号、付款账户(脱敏)、订单总金额、优惠金额等信息。
平台和语言
条码支付API对应的SDK下载
Java-JDK 1.5
Java-JDK 1.4
条码支付API对应的DEMO
1. 条码支付是否需要输入密码?
在满足一定条件下,条码支付主流程是代扣流程,即不需要输入密码,商户用扫码枪扫一下支付宝钱包的条码,即可完成支付。
2. 什么时候需输入密码(验密支付)?
条码支付请求 API 返回支付处理中(返回码 10003)时,此时若用户支付宝钱包在线则会唤起支付宝钱包的快捷收银台,用户可输入密码支付。商户需要在设定的轮询时间内,通过订单查询 API 查询订单状态,若返回付款成功,则表示支付成功。
3. 什么时候会唤起钱包收银台?
唤起钱包收银台的主要场景如下:
用户第一次用支付宝钱包支付;
用户关闭了当面付交易免密开关(可在支付宝钱包内设置);
支付额度超过了离线代扣的额度;
用户支付渠道设置只设置了账户余额支付,且账户余额支付失败。
4. 为什么关掉小额免密功能后,条码支付时仍不需输入密码?
这是因为小额免密与条码支付非同一概念,小额免密支付是指跳转收银台时经判断无需验证支付密码即可实现支付。
条码支付是否免密是由“当面交易免密支付”控制,且默认免密码支付。
若用户需要在条码支付时验证支付密码,关闭小额免密功能后,还需在支付宝钱包内按如下方式设置:
登录支付宝钱包—财富—设置—支付设置—当面交易免密支付,关闭后,所有 O2O 业务的付款流程都会经过收银台,并要求验证支付密码。
5. 条码支付的离线代扣扣款次序?
扣款次序依次为:商家优惠券>账户优惠>天猫点券>红包>积分宝>会员卡>资金类支付工具
其中资金类支付工具的扣款次序依次为:信用卡快捷>信用卡卡通>余额>信任宝>借记卡快捷>借记卡卡通>余额宝。
6. 退款为何没有立即到账?
退款资金一般会按原路返回。但若是通过银行卡支付,因银行结算系统限制,退款时需将该笔资金冻结在支付宝账户内,待银行结算时才能退款到银行卡,通常需要 3-5 个工作日。
7. 如果交易失败,但用户的银行卡扣款成功,资金如何处理?
若出现该情况,支付宝会在 3-5 个工作日将款项退回给顾客。
8. 条码支付安全吗?
支付宝采用高强度安全技术以保护条码数据的安全性,具体如下:
30 秒自动刷新一次
条码用过一次后,无论成功、失败都不能再次使用。故支付失败,需用户刷新条码后才能再次重新发出支付请求。
9. 什么是订单支付超时?
即超过支付有效期尚未支付的订单将自动关闭。
由于发起条码支付请求后,需预留足够的时间供用户打开手机钱包进行支付,故应设置比较合理的订单支付超时时间,一般通过手机钱包支付会在 30 分钟内完成。订单支付超时时间对应的接口参数是:time_expire,默认时间为北京时间。若未传入该参数值,则保持默认值即 15 天。
OpenSSL工具安装
1.Linux用户(以Ubuntu为例)
sudo apt-get install openssl
2.Windows用户开发者可以在OpenSSL官方网站下载Windows的OpenSSL安装包进行安装。
RSA私钥及公钥生成
1.Linux用户(以Ubuntu为例)
进入OpenSSL程序
OpenSSL> genrsa -out rsa_private_key.pem 1024
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Java开发者需要将私钥转换成PKCS8格式
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
OpenSSL> exit
# 退出OpenSSL程序
2.Windows用户在cmd窗口中进行以下操作:
C:\Users\Hammer>cd C:\OpenSSL-Win32\bin
进入OpenSSL安装目录
C:\OpenSSL-Win32\bin>openssl.exe
进入OpenSSL程序
OpenSSL> genrsa -out rsa_private_key.pem 1024
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Java开发者需要将私钥转换成PKCS8格式
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
OpenSSL> exit
# 退出OpenSSL程序
对于使用Java的开发者,将pkcs8在console中输出的私钥去除头尾、换行和空格,作为开发者私钥,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。
私钥及公钥文件示例
经过以上步骤,开发者可以在当前文件夹中(Windows用户在C:\OpenSSL-Win32\bin)看到rsaprivatekey.pem和rsapublickey.pem两个文件,前者为私钥,后者为公钥。开发者将私钥保留,将公钥提交给支付宝网关,用于信息加密及解密。以下为使用OpenSSL生成的私钥文件和公钥文件示例:
1.标准的私钥文件示例(PHP、.NET使用)
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC+L0rfjLl3neHleNMOsYTW8r0QXZ5RVb2p/vvY3fJNNugvJ7lo
4+fdBz+LN4mDxTz4MTOhi5e2yeAqx+v3nKpNmPzC5LmDjhHZURhwbqFtIpZD51mO
fno2c3MDwlrsVi6mTypbNu4uaQzw/TOpwufSLWF7k6p2pLoVmmqJzQiD0QIDAQAB
AoGAakB1risquv9D4zX7hCv9MTFwGyKSfpJOYhkIjwKAik7wrNeeqFEbisqv35Fp
jGq3Q1oJpGkem4pxaLVEyZOHONefZ9MGVChT/MNH5b0FJYWl392RZy8KCdq376Vt
4gKVlABvaV1DkapL+nLh7LMo/bENudARsxD55IGObMU19lkCQQDwHmzWPMHfc3kd
Y6AqiLrOss+MVIAhQqZOHhDe0aW2gZtwiWeYK1wB/fRxJ5esk1sScOWgzvCN/oGJ
LhU3kipHAkEAysNoSdG2oWADxlIt4W9kUiiiqNgimHGMHPwp4JMxupHMTm7D9XtG
UIiDijZxunHv3kvktNfWj3Yji0661zHVJwJBAM8TDf077F4NsVc9AXVs8N0sq3xz
qwQD/HPFzfq6hdR8tVY5yRMb4X7+SX4EDPORKKsgnYcur5lk8MUi7r072iUCQQC8
xQvUne+fcdpRyrR4StJlQvucogwjTKMbYRBDygXkIlTJOIorgudFlrKP/HwJDoY4
uQNl8gQJb/1LdrKwIe7FAkBl0TNtfodGrDXBHwBgtN/t3pyi+sz7OpJdUklKE7zM
SBuLd1E3O4JMzvWP9wEE7JDb+brjgK4/cxxUHUTkk592
-----END RSA PRIVATE KEY-----
2.PKCS8处理后的私钥文件示例(Java使用)
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H
/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJ
Sg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is66
1jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGk
YdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJa
QU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz
711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7P
vgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm
3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMra
vGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1
FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8f
vTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU
2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQ
OGm38pDRPcUDUh2/
-----END PRIVATE KEY-----
3.公钥文件示例
-----BEGIN PRIVATE KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/Q
pkddCVXnZ4bAUaQjXQIDAQAB
-----END PRIVATE KEY-----
appstore-60-28 & 0ae_0}

我要回帖

更多关于 数字签名机制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信