AliPay支付宝标准快速付款接口文档(专用纯网关)V1.5.1 - 图文

更新时间:2024-01-17 06:58:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

纯网关

Alipay.com 纯网关接口文档 1 副标题:网银直连 修订历史

版本号 V1.0 V1.1 作者 技术支持团队 甘宁 修订章节 全版修改 订正部分接口参数和描述信息,例如:即时支付支持错误通知地址(error_notify_url) 更新签约接口内容 修订原因 加强文档结构的合理性 接口升级、增加查询签约接口 修订日期 2008-11-17 2009-8-2 V1.2 V1.3 V1.4 V1.5 V1.5.1 甘宁 甘宁 甘宁 甘宁 甘宁 重新整理流程以及文档说明 使文档阅读性更强 2009-12-8 2010-3-18 2010-3-29 2010-9-13 2010-10-26 增加“公用回传参数” 满足用户自定义参数的要求 通知中增加网银流水 请求参数列表 增加4.3.2的信用卡简码 满足商户网银支付需求 支持自定义超时可以使用时间区间 信用卡大额支付也支持纯网关 说明:

本接口将支付宝即时到帐接口用作纯网关的功能做详细介绍。

在集成时处理机制和原有支付宝即时到帐一样,请求时必须增加默认支付方式(paymethod)和默认网银(defaultbank)2个参数 目

1

前言------------------------------------------------------------------------------------------------------------- 3 1.1 1.2

概述 ----------------------------------------------------------------------------------------------------------- 3 术语 ----------------------------------------------------------------------------------------------------------- 3

Alipay.com

纯网关

Alipay.com

2 接口功能及参数介绍 ---------------------------------------------------------------------------------------- 3 2.1

标准即时到账接口(适用于纯网银) --------------------------------------------------------------- 3

2

2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 3

功能描述 ------------------------------------------------------------------------------------------ 3 交互流程 ------------------------------------------------------------------------------------------ 4 交互模式 ------------------------------------------------------------------------------------------ 4 接口详细说明 ------------------------------------------------------------------------------------ 4 接口注意事项 ----------------------------------------------------------------------------------- 11 接口错误代码列表 ----------------------------------------------------------------------------- 11

签名通用策略 ------------------------------------------------------------------------------------------------ 13 3.1 3.2

安全方面CHECKLIST ------------------------------------------------------------------------------------ 13 签名方面 -------------------------------------------------------------------------------------------------- 13

3.2.1

签名机制 ----------------------------------------------------------------------------------------- 13 3.2.2 4.2.2签名方式 ------------------------------------------------------------------------------------- 13

3.3 4

其他方面 -------------------------------------------------------------------------------------------------- 14

附录------------------------------------------------------------------------------------------------------------ 14 4.1

接口通用机制 -------------------------------------------------------------------------------------------- 14

4.1.1 4.1.2 4.1.3 4.1.4 4.2

系统调用 ----------------------------------------------------------------------------------------- 14 页面跳转 ----------------------------------------------------------------------------------------- 14 支付宝主动通知处理流程 -------------------------------------------------------------------- 16 通知验证 ----------------------------------------------------------------------------------------- 17

数字签名构造 -------------------------------------------------------------------------------------------- 18

4.2.1 4.3

请求参数构造 ----------------------------------------------------------------------------------- 18

公用枚举表 ----------------------------------------------------------------------------------------------- 21

4.3.1 4.3.2 4.3.1 4.3.2 4.3.3 4.4

通知返回结果枚举 ----------------------------------------------------------------------------- 21 通用交易状态枚举表 -------------------------------------------------------------------------- 21 银行列表 ----------------------------------------------------------------------------------------- 22 信用卡大额银行列表 -------------------------------------------------------------------------- 23 订单状态列表 ----------------------------------------------------------------------------------- 24

FAQ(常见问题的的解答) -------------------------------------------------------------------------- 24

Alipay.com

纯网关

Alipay.com

3

1 前言

1.1 概述

本接口主要用在外部集成网银直连(纯网关)功能

1.2 术语

名称 外部商户、合作伙伴、商户 通知页 参数名称Notify_url,所指定的互联网HTTP地址,当代扣完成之后,支付宝发送信息到该页面去,即调用该页面,该页面中的程序自动运行,并判断请求与处理获取到的信息 合作伙伴ID 分润 页面跳转 签约后,为商家自动分配的唯一编号。 分润指将某一部分费用分给其它的帐户 执行操作后跳转到其它页面 说明 和支付宝进行业务合作的商户

2 接口功能及参数介绍

2.1 标准即时到账接口(适用于纯网银)

2.1.1 功能描述

调用此接口,根据用户传过来的参数创建交易,买家再付款。目前该接口的交易全部为即时到帐纯网银支付接口,即只要买家一付款,钱就会从买家银行卡转到卖家的支付宝账号。同时该接口还支持分润,商家传过来分润的账号和金额,系统会自动打款到该账号上。

Alipay.com

纯网关

Alipay.com

2.1.2 交互流程

4

2.1.3 交互模式

请求/响应交互模式,页面跳转 2.1.4 接口详细说明

2.1.4.1 请求参数列表 特别注意:

a.) 此接口只支持https请求,支付宝是以https进行验证

b.) 按照支付宝外部请求接口概述中要求的签名方式,对输入参数进行签名,该接口请求才

能够被支付宝系统接收。

c.) 本接口支持重复调用,但是提交数据必须一样才可以。 d.) 在请求时必须增加默认支付方式和默认网银2个参数

字段名 协议参数 接口名称 service String create_direct_pay_by_usN Alipay.com

变量名 类型 说明 可空 纯网关

Alipay.com er 合作伙伴ID partner String(16) 合作伙伴在支付宝的用户ID与支付宝签约后自动生成 通知URL notify_url URL针对该交易的交易状态同步N N 5 (String(190)) 通知接收URL。 返回URL return_url URL 结果返回URL,仅适用于立即返回处理结果的接口。支付宝处理完请求后,立即将处理结果返回给这个URL。 错误通知地址 (需要支付宝功能人员开通) error_notify_url URL(String(190)) 如果在交易过程中出错(如签名错误等),则通过此URL将错误码返回给合作伙伴系统 签名 sign String 见签名机制,MD5加密算法后得出的结果 签名方式 sign_type String 见签名方式,现今默认是MD5加密,无需更改该参数的值 参数编码字符集 _input_charset String(默认为GBK) 合作伙伴系统与支付宝系统之间交互信息时使用的编码字符集。合作伙伴可以通过该参数指定使用何种字符集对传递参数进行编码。同时,支付宝系统也会使用该字符集对返回参数或通知参数进行编码。 注:该参数必须在queryString中传递,不论使用的是POST还是GET方式发送请求。如:http://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8 业务参数 商品展示网址 商品名称 商品描述 show_url subject body String(400) String(256) String(1000) 点击商品链接后跳转的页面 商品的标题 商品的具体描述,如果是多种商品,请将商品描述字符串累Y N Y N N N Y N Alipay.com

纯网关

Alipay.com 加传给body 外部交易号 out_trade_no 商品单价 交易金额 购买数量 price total_fee quantity Number(13,2) Number(13,2) Number(6,0) String(64) 合作伙伴交易号(确保在合作伙伴系统中唯一) price:单位为RMB Yuan 0.01~100000000.00 total_fee:单位为RMB Yuan 0.01~100000000.00 quantity:0

纯网关

Alipay.com 备注|收款方Email_2^金额^备注 3. (属于多级分润)收款方Email_1^金额^备注|收款方Email_1^收款方Email_2^金额^备注 如有多条则用“|”隔开,最多不能超过10条,备注最多1000个字符,即500个汉字,详见“接口注意事项” 超时时间 it_b_pay String(3) 商户开通自定义超时功能才有用(支付宝控制权限),定义该交易的超时时间,m表示分钟,h表示小时,d表示天,c表示当天。 商户如果需要改功能,需要告知配置的时间点或者区间,有支付宝技术支持配置。 例如:1m~15d表示在1分钟和15天之内任何一个时间都可以。 备注:默认15d关闭交易。当天理论上是当天的0点后关闭,但是由于是定时任务可能有所延迟。 公用回传参数 extra_common_param String(200) 用于商户回传参数,该值不能包含=&等 特殊字符。如果用户请求时传递了该参 数,则返回给商户时会回传该参数. Y Y 7 一个完整的支付接入请求实例:

https://www.alipay.com/cooperate/gateway.do?body=支付宝支付 &defaultbank=CMB¬ify_url=http://wangjinmin.vip1.es163.net/ganning/asp_bank_before/Alipay_Notify.asp&out_trade_no=2009128201522&partner=208810156834***5&payment_type=1&paymethod=bankPay&return_url=http://wangjinmin.vip1.es163.net/ganning/asp_bank_before/return_Alipay_Notify.asp&seller_email=gwl25@126.com&service=create_diAlipay.com

纯网关

Alipay.com rect_pay_by_user&subject=测试商品&total_fee=100&sign=f67dd8e2c2bc26e4bb137be0e32f0cbc&sign_type=MD5

2.1.4.2 返回参数列表 此接口有两种返回方式:

8 注意:选择具体网银支付方法,进入网银支付页面后才能创建交易,支付完成才返回通知。

需要强调的是部分网银可能不支持支付完成及时跳转,所以商户最好在异步通知中做数据处理或者2个返回处理都集成,增加订单重复接受即可 A. (同步通知):系统根据执行的结果将相关订单信息返回(只做返回不需要商户和支付宝

系统交互) 输出参数列表

字段名 基本信息 是否成功 签名 签名类型 业务参数 接口名称 exterface String 使用支付宝的服务接口名称,用此参数可以确定是支付宝的服务 通知时间 notify_time Timestamp 通知时间(支付宝时间),格式: YYYY-MM-DD hh:mm:ss 通知ID notify_id String 支付宝通知流水号,合作伙伴可以用这个流水号询问支付宝该条通知的合法性 通知类型 支付宝交易号 支付类型 外部交易号 notify_type trade_no payment_type out_trade_no String String(16) String(4) String(64) trade_status_sync 该交易在支付宝系统中的交易流水号 值为1:商品购买 该交易商户提交给支付宝的Y Y Y Y Y Y Y is_success sign sign_type String(1) String(32) String 表示该次操作是否成功 见HTTP参数签名机制, 该参数需要获取做签名校验。 见签名方式 N N N 变量名 类型 说明 可空 Alipay.com

纯网关

Alipay.com 的交易流水号 商品描述 商品名称 总价 买家Email 买家ID 卖家Email 卖家ID 交易状态 公用回传参数 body subject total_fee buyer_email buyer_id seller_email seller_id trade_status extra_common_param String(400) String(256) Number(13,2) String(100) String(30) String(100) String(30) String String 商品描述 商品名称 总价 买家Email 买家ID 卖家Email 卖家ID 见交易状态枚举表 用于商户回传参数,该值不能包含=&等 特殊字符。如果用户请求时传递了该参 数,则返回给商户时会回传该参数. 网银流水号 bank_seq_no String(20) 开通了纯网关和伪网关的商户,在交易成功后可以返回网银流水。其他不返回该值。 Y Y Y Y Y Y Y Y Y Y 9

B. 异步通知(即notify_url通知):支付宝系统根据商户传入的notify_url,定时通知执行

结果返回给商户,若通知后没有获取商户返回的success支付宝会重复多次执行通知。 输出参数列表

字段名 通知类型 通知ID 变量名 notify_type notify_id 类型 String String 说明 trade_status_sync 支付宝通知流水号,合作伙伴可以用这个流水号询问支付宝该条通知的合法性 通知时间(支付宝时间),格通知时间 notify_time Timestamp 式: YYYY-MM-DD hh:mm:ss 签名 签名方式 订单信息: 支付宝交易号 外部交易号 trade_no out_trade_no String(16) String(64) 该交易在支付宝系统中的交易流水号 该交易在合作伙伴系统的流水号 Y Y sign sign_type String String 见签名机制, 该参数需要获取做签名校验。 见签名方式 N N N N 可空 N Alipay.com

纯网关

Alipay.com 折扣 支付类型 商品名称 商品描述 商品单价 购买数量 交易金额 是否调整总价 交易创建时间 交易付款时间 交易关闭时间 退款时间 公用回传参数 discount payment_type subject body price quantity total_fee is_total_fee_adjust gmt_create gmt_payment gmt_close gmt_refund extra_common_param Number(13,2) String(4) String(256) String(400) Number(13,2) Number(6,0) Number(13,2) String(1) Timestamp Timestamp Timestamp Timestamp String 1 单位为RMB Yuan 0.01~100000000.00 >0 单位为RMB Yuan 0.01~1000000.00 该交易是否调整过价格 该笔交易创建的时间 该交易买家的付款时间 交易关闭时间 卖家退款的时间,退款通知时会发送 用于商户回传参数,该值不能包含=&等 特殊字符。如果用户请求时传递了该参 数,则返回给商户时会回传该参数. 网银流水号 bank_seq_no String(20) 开通了纯网关和伪网关的商户,在交易 成功后可以返回网银流水。 备注:需要支付宝技术支持人员开启 交易状态信息: 交易状态 退款状态 买家卖家信息: 卖家Email 卖家ID 买家ID 买家Email 是否使用红包 seller_email seller_id buyer_id buyer_email use_coupon String(100) String(30) String(30) String(100) String(1) 卖家Email 卖家ID 买家Email 买家ID 买家是否在交易过程中使用了红包 说明接口调用过程中的出错信息 Y Y Y Y Y trade_status refund_status String String 见交易状态枚举表 见交易状态枚举表 Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y 10 错误通知参数信息(需要在传入参数增加错误通知地址): 错误代码 error_code String( N

Alipay.com

纯网关

Alipay.com

2.1.5 接口注意事项

? 您需使用HTTPS 协义, 支付宝是以HTTPS的形式进行通知

? 请按照支付宝外部请求接口概述中要求的签名方式,对输入参数进行签名,该接口

请求才能够被支付宝系统接收

? 该接口支持重复调用,即:一笔订单可以重新支付,但是前提是这笔订单的信息和

原来信息一样,否则会报订单号重复

? 处理支付宝的返回信息可以异步处理也可以同步处理,前提是防止订单重复接收 ? 提成数据集:

1. 收款方Email_1^金额^备注|付款方Email^收款方Email_2^金额^备注

11

例如:gwl251@163.com^0.02^分润1|gwl251@126.com^gwl061@163.com^0.01^分润2

2. 收款方Email_1^金额^备注|收款方Email_2^金额^备注

例如:gwl251@163.com^0.02^分润1|gwl061@163.com^0.01^分润2

3.收款方Email_1^金额^备注|收款方Email_1^收款方Email_2^金额^备注

例如:gwl251@163.com^0.02^分润1|gwl251@163.com^gwl061@163.com^0.01^分润2

2.1.6 接口错误代码列表

错误代码(error_code) ILLEGAL_SIGN ILLEGAL_ARGUMENT HAS_NO_PRIVILEGE ILLEGAL_SERVICE ILLEGAL_PARTNER HAS_NO_PUBLICKEY USER_NOT_EXIST OUT_TRADE_NO_EXIST TRADE_NOT_EXIST ILLEGAL_PAYMENT_TYPE BUYER_NOT_EXIST 签名验证出错 参数不正确 没有权限访问该服务 Service参数不正确 说明 商户ID不正确 没有上传公钥 会员不存在 外部交易号已经存在 交易不存在 无效支付类型,需要联系支付宝技术支持工程师处理 买家不存在 Alipay.com

纯网关

Alipay.com SELLER_NOT_EXIST BUYER_SELLER_EQUAL ILLEGAL_SIGN_TYPE COMMISION_ID_NOT_EXIST COMMISION_SELLER_DUPLICATE COMMISION_FEE_OUT_OF_RANGE ILLEGAL_LOGISTICS_FORMAT TOTAL_FEE_LESSEQUAL_ZERO TOTAL_FEE_OUT_OF_RANGE ILLEGAL_FEE_PARAM DONATE_GREATER_THAN_MAX DIRECT_PAY_AMOUNT_OUT_OF_RANGE DIGITAL_FEE_GREATER_THAN_MAX SELF_TIMEOUT_NOT_SUPPORT COMMISION_NOT_SUPPORT VIRTUAL_NOT_SUPPORT ILLEGAL_CHARSET 卖家不存在 买家、卖家是同一帐户 签名类型不正确 佣金收取帐户不存在 收取佣金帐户和卖家是同一帐户 佣金金额超出范围 无效物流格式 交易总金额小于等于0 交易总金额超出范围 非法交易金额格式(参考单价、总价、数量三个组合规则) 小额捐赠总金额超出最大值限制 快速付款交易总金额超出最大值限制 虚拟物品交易总金额超出最大值限制 不支持自定义超时 不支持佣金 不支持虚拟发货方式 字符集不合法 12 ROYALTY_SELLER_ENABLE_STATUS_FORBID 有提成情况下,卖家状态不正常 ROYALTY_SELLER_NOT_CERTIFY ROYALTY_FORAMT_ERROR ROYALTY_TYPE_ERROR ROYALTY_PAY_EMAIL_NOT_EXIST ROYALTY_RECEIVE_EMAIL_NOT_EXIST DEFAULT_BANK_MUST_NOT_NULL LLEGAL_PAYMENT_TYPE ILLEGAL_OUTTIME_ARGUMENT CANT_CREDIT_PAY TRADE_NOT_ALLOWED_PAY NAVIGATION_INCOME_OF_ROYALTY_ACCOUNT 有提成情况下,卖家未通过认证 提成信息错误,请检查后重新集成 提成类型不支持,请检查后重新集成 提成付款帐户不存在 提成收款帐户不存在 默认网银不能为空 错误的Payment_type参数 自定义超时参数错误 不能使用信用支付 交易不允许付款 在提成情况下的多级分润,二次分润帐户Alipay.com

纯网关

Alipay.com 次序问题或者分润时没有预留支付宝服务费

13 3 签名通用策略

3.1 安全方面CheckList

a

从集成后的系统健壮性考虑,收到支付宝发出的通知后,合作伙伴系统须判断接收到的交易状态、交易金额是否与自己系统中的参数对应,并处理这些数据信息,使网站内的交易信息与支付宝内的交易信息保持一致,可防止掉单情况出现。如果不判断,存在潜在的风险,合作伙伴自行承担因此而产生的所有损失。

3.2 签名方面

3.2.1 签名机制

a b c d

没有值的参数无需传递,也无需包含到待签名数据中。

签名时将字符转变成字节流时指定的字符集要与_input_charset保持一致。 如果传递了_input_charset参数,那么这个参数也应该包含在待签名数据中。 根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@等),那么该值需要做URL Encoding,这样请求接受方才能接受到正确的参数值。这种情况下,做签名时使用的应该是原生值而不是encoding之后的值。例如:会员查询接口示例中待签名数据是email=test@msn.com&partner=2088006300000000&service=test,而不是email=test@msn.com&partner=2088006300000000&service=test。

3.2.2 4.2.2签名方式

按照sign_type参数指定的签名算法对待签名数据进行签名【参见:数字签名构造】

Alipay.com

纯网关

Alipay.com

3.3 其他方面

1) 您必需使用HTTPS 协义, 支付宝是以HTTPS的形式进行通知

2) 请按照支付宝外部请求接口概述中要求的签名方式,对输入参数进行签名,该接口请求

才能够被支付宝系统接收

3) 如果设置了notify_url,支付宝会发一条通知到notify_url对应的站点

4) 通知URL不要如此设置:http://www.xxx.com/alipay/notify_url.asp?id=xxx,即不

要带自加的自定义参数,这会导致通知返回时判断失败。

14

4 附录

4.1 接口通用机制

4.1.1 系统调用

顾名思义,这类接口是为合作伙伴系统获得支付宝系统信息提供服务的,是一种系统间的调用接口。

系统调用示意图 4.1.2 页面跳转

顾名思义,这类接口都是一些有页面操作的接口。通常是用户在合作伙伴页面执行

Alipay.com

纯网关

Alipay.com

部分操作,然后跳转到支付宝系统记录订单信息及时再转入网银系统页面完成整个操作。有的甚至可能最后还要再跳回到合作伙伴的下一个页面,继续完成整个操作。根据处理结果的返回方式,又分为:

? 立即返回处理结果,即用户在网银系统页面完成操作后,支付宝将处理结果立即返

回给合作伙伴的下一步操作页面,让用户继续完成真个操作流程。所以,调用这类接口时,必须传递参数return_url(即合作伙伴的下一个操作页面)。

15

立即返回(页面跳转)示意图 ? 异步返回处理结果,即用户从合作伙伴页面跳转到网银支付页面后(支付宝先做记

录),在网银系统完成最后操作,用户不用再回到合作作伙伴页面。这类接口通常是通过通知接口异步获得处理结果。如果需要异步返回结果,那么必须传递notify_url参数,以指定通知返回的地址。如果不需要异步返回结果,那么可以不用传递notify_url参数。(具体流程可以参考:支付宝主动通知处理流程)

Alipay.com

纯网关

Alipay.com

16

页面跳转(通过通知接口返回结果)示意图 4.1.3 支付宝主动通知处理流程

1.支付宝平台系统向外部商户系统发出通知,即访问外部商户提供的通知接收URL(参数notify_url)。

2.外部商户系统接到通知请求,通过notify_id询问支付宝平台系统这个通知的真实性,通知验证。

3.支付宝平台系统判断通知是否是自己发送,如果是返回true,否则返回false。 4.商户系统得到支付宝平台系统的确认后,对通知进行处理。处理完毕后,返回结果给支付宝平台系统,处理结果的值见附件:通知返回结果枚举。

Alipay.com

纯网关

Alipay.com

5.支付宝平台系统处理商户系统返回的处理结果。

17

4.1.4 通知验证

从系统健康性角度考虑,在接收到支付宝平台系统通知以后,验证支付宝的系统通知的正确性(合法性)是非常有必要的。强烈建议外部商户系统加入此应用。 了保证该接口被合法利用,商户系统只能查找1分钟之内(目前为1分钟,以后若有调整,恕不另行通知)的通知。 传递的参数格式:

通知验证 字段名 变量名 类型 String 说明 可空 N 样例 trade_status_sync 接口名称 外部商户 通知ID

service partner notify_id customer_unsign 外部商户在支付宝的用户ID String(16) String N N 支付宝发送的通知ID ? 基于HTTPS协议的通知验证接口

程序在使用时按照以下要求发起一个HTTPS请求,获取该请求的结果即可,所有可能出现的结果见以下的输出参数表,这种验证通知的方式需要网站支持HTTPS访问,若网站不支持https的访问,可以使用另外一种验证方式:基于HTTP协议的通知验证接口。 接入URL:

https://www.alipay.com/cooperate/gateway.do 一个完整的验证请求实例:

https://www.alipay.com/cooperate/gateway.do?service=customer_unsign &partner=1234567890¬ify_id=abcdefghijklmnopqrst

Alipay.com

纯网关

Alipay.com

? 基于HTTP协议的通知验证接口

程序在使用时按照以下要求发起一个HTTP请求,获取该请求的结果即可,所有可能出现的结果见以下的输出参数表。 接入URL:

http://notify.alipay.com/trade/notify_query.do 一个完整的验证请求实例:

http://notify.alipay.com/trade/notify_query.do?partner=1234567890¬ify_id=abcdefghijklmnopqrst

18

通知验证接口输出参数:

输出内容 invalid true false 说明 传入的参数无效 验证通过 验证失败 查找参数格式 查找是否由于sign和mysign不相等引起的1分钟内失效的问题

可能的原因 4.2 数字签名构造

4.2.1 请求参数构造

为了确保数据传输过程中的数据真实性和完整性,我们需要对数据进行签名校验。 HTTP请求中传递的所有参数(除sign和sign_type以外)按照参数名称字符升序的顺序串联起来(如:p1=v1&p2=v2&p3=v3),构成待签名数据。按照sign_type指定的方式对待签名数据进行签名。

Alipay.com

纯网关

Alipay.com

例如:调用某接口需要以下参数: service=cae_charge_agent partner=2088006300000000 email=test@msn.com

那么待签名数据就是:email=test@msn.com&partner=2088006300000000&service=

cae_charge_agent。

19

4.2.1.1 签名算法对比 算法 功能 防篡改 防抵赖 加密 电子签名法是否承认

4.2.1.2 MD5算法构造

定义:MD5是一种摘要生成算法,本来是不能用于签名的。但是,通过在待签名数据之

后加上一串私密内容(指令发送、接收双发事先规定好的,这里我们称其为签名密钥),就可以用于签名了。使用这种算法签名只能起到防数据篡改的功能,不能起到签名防抵赖的功能,因为双方都知道签名密钥

例如:

待签名数据 + securityCode值(支付宝为合作伙伴颁发的安全校验码)的MD5摘要作为签名。 例如:

MD5 √ × × × DSA RSA √ √ √ √ √ √ × √ Alipay.com

纯网关

Alipay.com

安全校验码是mysecurityCode,那么前面会员查询接口示例的待签名数据就是:email=test@msn.com&partner=2088006300000000&service=user_querymysecurityCode。

4.2.1.3 DSA算法构造

定义:DSA是一种非对称的签名算法,即签名密钥(私钥)与验签名密钥(公钥)是不一

样的,私钥用于签名,公钥用于验签名。使用这种算法签名在起到防数据篡改功能的同时,还可以起到防抵赖的作用,因为私用只有签名者知道。 例如:

合作伙伴发送请求时,使用自己的密钥对待签名数据进行DSA签名,支付宝使用合作伙伴的公钥进行校验;支付宝返回数据时,使用支付宝的密钥对待签名数据进行DSA签名,合作伙伴使用支付宝的公钥进行校验。

DSA公私钥可以使用OpenSSL生成,如下: 1. 生成DSA参数

openssl> dsaparam -out dsa_param.pem 1024 2. 生成私钥

openssl>gendsa -out dsa_private_key.pem dsa_param.pem 3. 生成公钥

openssl> dsa -in dsa_private_key.pem -pubout -out dsa_public_key.pem 4.2.1.4 RSA算法构造

定义:RSA也是一种非对称算法,同时,它还是一种加密算法,使用方法跟DSA签名算法

类似

20

Alipay.com

纯网关

Alipay.com

1. RSA密钥生成命令

生成RSA私钥

openssl> genrsa -out rsa_private_key.pem 1024

生成RSA公钥

openssl> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

将RSA私钥转换成PKCS8格式

openssl> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

2. 签名/验签名命令

RSA签名

openssl> sha1 -sign rsa_private_key.pem -out rsasign.bin plaintext.txt

RSA验签名

openssl> sha1 -verify rsa_public_key.pem -signature rsasign.bin plaintext.txt

21

4.3 公用枚举表

4.3.1 通知返回结果枚举

返回结果 success fail 结果说明 处理成功,结束发送 处理失败,重新发送(支付宝平台系统会在24小时内分6-10次发送客户信息,直到接受到外部商户发送的success) 注意:不能包含任何其他的HTML脚本语言,否则支付宝接受数据会收到影响

4.3.2 通用交易状态枚举表

A.正常交易状态枚举: 交易状态列表值(变量值:trade_status) WAIT_BUYER_PAY 说明 交易创建 Alipay.com

纯网关

Alipay.com TRADE_FINISHED TRADE_SUCCESS TRADE_CLOSED ◆支付成功,标准即时到账成功状态 ◆支付成功,机票行业单笔退款成功(没有全部退完) 交易关闭 22 B.退款交易状态枚举: 状态代码(变量值:refund_status) REFUND_SUCCESS REFUND_CLOSED 状态名称 ◆退款成功 退款关闭 备注:如果在支付宝平台操作退款,交易状态(trade_status)会出现2中情况: 1. 不是全额退款,交易成功状态变成TRADE_SUCCESS,增加一个退款状态refund_status= REFUND_SUCCESS 2. 全额退款,交易成功状态变成TRADE_CLOSED,增加一个退款状态refund_status= REFUND_SUCCESS。 4.3.1 银行列表

银行简码 ICBCBTB ABCBTB SPDBB2B CCBB2B BOCB2C ICBCB2C CMB CCB ABC SPDB CIB GDB SDB CMBC COMM CITIC HZCBB2C CEBBANK 银行名称 中国工商银行(B2B) 中国农业银行(B2B) 上海浦东发展银行(B2B) 中国建设银行(B2B) 中国银行 中国工商银行 招商银行 中国建设银行 中国农业银行 上海浦东发展银行 兴业银行 广东发展银行 深圳发展银行 中国民生银行 交通银行 中信银行 杭州银行 中国光大银行 Alipay.com

纯网关

Alipay.com SHBANK NBBANK SPABANK bjbank101 上海银行 宁波银行 平安银行 北京农村商业银行 23 备注:如果没有需要网银简码,可以询问支付宝技术支持工程师,更多网银更新中。 4.3.1 纯借记卡银行列表

银行简码 银行名称 招商银行 中国建设银行 中国工商银行 交通银行 广东发展银行 中国银行 中国光大银行 上海浦东发展银行 中国邮政储蓄银行 CMB-DEBIT CCB-DEBIT ICBC-DEBIT COMM-DEBIT GDB-DEBIT BOC-DEBIT CEB-DEBIT SPDB-DEBIT PSBC-DEBIT 备注:其他银行陆续增加中。

4.3.2 信用卡大额银行列表

银行简码 icbc301 ccb301 cmb301 boc301 comm301 gdb301 cib301 ceb301 银行名称 中国工商银行 中国建设银行 招商银行 中国银行 交通银行 广东发展银行 兴业银行 中国光大银行 平安银行 spabank301 Alipay.com

纯网关

Alipay.com citic302 spdb301 shbank301 备注:其他银行陆续增加中。 中信银行 浦发银行 24 上海银行

4.3.3 订单状态列表

订单状态表: 订单状态 初始 成功 失败 冲正 被冲正 值 I S F P N

4.4 FAQ(常见问题的的解答)

1. 问:我运行程序后怎么一直报错误代码:ILLEGAL_SIGN?

答:如果一直报ILLEGAL_SIGN(签名错误),请首先检查程序中传给支付宝的参数有没有存在空值;然后再检查subject和body有没有特殊的字符。

具体可以连接这个网址查询:http://help.alipay.com/support/index.htm

2. 问:怎么一直报HAS_NO_PRIVILEGE?

答:报这个错误,说明您目前没有使用该服务的权限。遇到这个错误: a.) 要确定您的合同是在生效期内并且有这个服务(譬如:即时支付的服务)。

b.)将出现错误的URL(地址栏的地址)粘贴出来,看看partner和service是不是这个对应的服务参数

3. 问:我怎么接受不到支付宝返回的信息?

答:如果没有接收到支付宝返回的信息, A.)return_url和notify_url的路径

B.)检查并输出sign、mysign和responseTxt的值;对于同步(return_url)返回是可见的并且在付款成功才会跳转,并且只跳转一次,调试起来相对简单;异步(notify_url)返回处理则需要在异步处理页面做日志记录或者将获取信息写进数据库,以检查问题所在

4. 问:我怎么得到合作者身份(partner)和安全校验码(key)?

Alipay.com

纯网关

Alipay.com

答:您可以登陆签约的支付宝账户-?点击“商家服务”可看到合作者身份,安全校验码需要支付密码才可以看到

25

5. 问:我测试的时候怎么sign和mysign一直不相等或者responseTXT?

答:

(1) SIGN与MYSIGN不等,responseTxt为invalid命令参数不对,该错误 是由于合作伙伴

ID(parnterID)与安全校验码(key)未填,或填错导致;还有可能是没有获取notify_id导致

(2) SIGN与MYSIGN相等,responseTxt为false,是由于服务器、端口等因素导致,这时请

检查 a

防火墙是否屏蔽支付宝的IP(支付宝所使用的IP地址是:121.0.26.11,范围:121.0.26.0~255\\121.0.27.0-255;支付宝通知信息的IP地址:121.0.26.1和121.0.26.2,端口:80或者443) b c

端口80或者443端口开放没有或者被其他服务占用

以上如果都没有问题,可能会是网络验证超时导致(支付宝验证时间是1分钟,SIGN与MYSIGN不等会导致超时),需要等待网络稳定再确定问题

(3) SIGN与MYSIGN相等,responseTxt为空,这中情况偶尔会出现,可能是由于返回处

理页面的notify_id值为空导致

6. 问:关于客户服务器搬迁,变动服务器ip,对支付的影响和处理

答:如果客户网站服务器搬迁,会改变服务器ip。会造成支付宝交易通知无法找到对应关系,那么我们建议

(1) 可以变更IP的同时将调取接口中的异步通知域名更成IP地址,等支付宝周三凌晨刷新后

更换成域名

(2) 可以在支付宝每周三凌晨刷新前更换。

(3) 客户网站确认要搬迁变动ip的前提,请先停止支付宝支付二天,等DNS更新成功,在开

启支付宝支付,否则会造成搬迁中下的订单 notify url 无法访问到指定的ip地址。造成掉单现象。

7. 问:同步返回(return_url)和异步返回(notify_url)的区别?

答:

(1) 同步返回处理(return_url):是一种可视化的返回,ie页面跳转通知,只要支付成功,

支付宝通过get方式跳转到这个地址,并且带有参数给这个页面。客户获取信息受到买家操作的影响。如果买家支付完成后客户服务器响应比较慢,买家在显示支付宝提示的“即时到账支付成功“时关闭页面,那么客户网站是获取不到信息,我们这边称为” 掉单“。而且这个返回处理是一次性调取,即支付成功后才调取同步返回处理。

(2) 异步返回处理(notify_url):它的数据交互是通过服务器间进行数据交互,服务器post

消息到异步返回处理页面,需要客户技术在异步返回处理页面处理相关的数据处理,然后每一步操作都要返回给支付宝success(不能包含其他的HTML脚本语言,不可以做页面跳转。),这个返回处理如果集成OK,那么基本不会出现掉单,因为支付宝会在24小时之内分6~10次将订单信息返回个给客户网站,直到支付宝捕获success。

Alipay.com

本文来源:https://www.bwwdw.com/article/ih2o.html

Top