支付宝同步通知验证失败java,支付宝 App支付同步通知参数说明

支付宝sdk对商户的请求支付数据处理完成后,会将结果同步反馈给商户app端。

同步返回的数据,商户可以按照下文描述的方式在服务端验证,验证通过后,可以认为本次用户付款成功。有些时候会出现商户app在支付宝付款阶段被关闭导致无法正确收到同步结果,此时支付结果可以完全依赖服务端的异步通知。

由于同步通知和异步通知都可以作为支付完成的凭证,且异步通知支付宝一定会确保发送给商户服务端。为了简化集成流程,商户可以将同步结果仅仅作为一个支付结束的通知(忽略执行校验),实际支付是否成功,完全依赖服务端异步通知。

返回结果示例(iOS|Android)

对于iOS平台而言返回参数是一个NSDictionary对象,对于Android平台而言是一个map结构体。里面有三个key,其中memo是描述信息(类型为字符串);result是处理结果(类型为json结构字符串);resultStatus是结果码(类型为字符串)。

{

"memo" : "xxxxx",

"result" : "{

\"alipay_trade_app_pay_response\":{

\"code\":\"10000\",

\"msg\":\"Success\",

\"app_id\":\"2014072300007148\",

\"out_trade_no\":\"081622560194853\",

\"trade_no\":\"2016081621001004400236957647\",

\"total_amount\":\"0.01\",

\"seller_id\":\"2088702849871851\",

\"charset\":\"utf-8\",

\"timestamp\":\"2016-10-11 17:43:36\"

},

\"sign\":\"NGfStJf3i3ooWBuCDIQSumOpaGBcQz+aoAqyGh3W6EqA/gmyPYwLJ2REFijY9XPTApI9YglZyMw+ZMhd3kb0mh4RAXMrb6mekX4Zu8Nf6geOwIa9kLOnw0IMCjxi4abDIfXhxrXyj********\",

\"sign_type\":\"RSA2\"

}",

"resultStatus" : "9000"

}

返回结果参数

参数

类型

是否必填

最大长度

描述

示例值

out_trade_no

String

64

商户网站唯一订单号 70501111111S001111119

trade_no

String

64

该交易在支付宝系统中的交易流水号。最长64位。

2014112400001000340011111118

app_id

String

32

支付宝分配给开发者的应用Id。

2014072300007148

total_amount

Price

9

该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。

9.00

seller_id

String

16

收款支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字

2088111111116894

msg

String

16

处理结果的描述,信息来自于code返回结果的描述

success

charset

String

16

编码格式

utf-8

timestamp

String

32

时间

2016-10-11 17:43:36

code

String

16

结果码

resultStatus结果码含义

返回码

含义

9000

订单支付成功

8000

正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态

4000

订单支付失败

5000

重复请求

6001

用户中途取消

6002

网络连接出错

6004

支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态

其它

其它支付错误

同步通知验证

为了帮助开发者调用开放接口,我们提供了开放平台服务端DEMO&SDK,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。强烈建议先下载对应语言版本的SDK并引入您的开发工程进行快速接入。

在返回数据resultStatus为9000的情况下,解析result结果,提取验证签名的相关核心数据:

第一步: 提取alipay_trade_app_pay_response字段值,其代表签名原始字符串,上述示例格式如下:

{"code":"10000","msg":"Success","total_amount":"9.00","app_id":"2014072300007148","trade_no":"2014112400001000340011111118","seller_id":"2088111111116894","out_trade_no":"70501111111S001111119"}

第二步: 提取sign_type字段值,其代表签名类型,上述示例格式如下:

RSA2

第三步: 提取sign字段值,其代表签名结果,上述示例格式如下:

NGfStJf3i3ooWBuCDIQSumOpaGBcQz+aoAqyGh3W6EqA/gmyPYwLJ2REFijY9XPTApI9YglZyMw+ZMhd3kb0mh4RAXMrb6mekX4Zu8Nf6geOwIa9kLOnw0IMCjxi4abDIfXhxrXyj********

第四步: 验证签名是否合法:

使用各自语言对应的SHA256WithRSA签名验证函数,传入签名的原始字符串、支付宝公钥、签名类型RSA、签名字符进行合法性验证。

第五步: 在第四步签名验证通过后,必须严格按照如下的描述校验通知参数的合法性:

商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;

判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);

校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);

验证app_id是否为该商户本身。

上述1、2、3、4有任何一个验证不通过,则表明同步校验结果是无效的,只有全部验证通过后,才可以认定买家付款成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Java集成支付App支付,需要进行以下几个步骤: 1. 注册支付开发者账号并创建应用:首先,去支付开放平台(open.alipay.com)注册一个开发者账号,并创建一个应用。在创建应用时,会得到一个AppID,该ID在后续的集成过程中会用到。 2. 导入支付SDK:下载最新版本的支付SDK,并将其导入到Java开发环境中。一般来说,我们可以通过Maven或Gradle等构建工具来导入依赖。 3. 配置应用信息:在Java代码中,需要配置支付相关的参数,包括AppID、支付公钥、应用私钥等。这些信息在第一步中获取到的。 4. 创建支付订单:根据业务需求,我们需要创建支付订单并传递给支付App进行处理。订单信息包括订单号、支付金额、商品名称等。 5. 调起支付App:通过调用支付SDK提供的接口,将支付订单发送到支付App进行支付支付App会弹出一个界面,展示订单信息和支付方式供用户选择。 6. 处理支付结果:支付App支付完成后,会返回支付结果。我们需要在Java代码中处理这个结果,判断支付是否成功,并执行相应的业务逻辑。 总的来说,集成支付App支付就是将支付SDK导入到Java项目中,并按照支付提供的接口规范进行相应的配置和调用,实现支付功能。通过以上步骤,我们可以在自己的Java应用中实现与支付App支付交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值