支付宝支付--即时到账 开发总结

时间:2022-03-27 13:25:20

在支付宝支付的开发过程中,通过自己的理解和尝试做出一点流程总结记录:

 

一.前往 https://doc.open.alipay.com/doc2/alipayDocIndex.htm 支付宝开放平台 点击业务接入-》即时到账 ,即可下载 即时到账DEMO。DEMO中包含 两种签名版本(MD5、RSA) 三种编程语言(CSHARP、JAVA、PHP) 两种编码格式(GBK、UTF-8),我选择是MD5签名下的PHP语言UTF-8编码。

  如果项目拥有SSL加密协议,也就是HTTPS安全通道,可以使用rsa签名的方式进行开发。

 

二.先配置 alipay.config.php 文件:

 1 //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
 2 //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
 3 $alipay_config['partner']        = '';
 4 //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号
 5 $alipay_config['seller_id']    = $alipay_config['partner'];
 6 //或者$alipay_config['seller_email']或者$alipay_config['seller_account_name']    
 7 // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
 8 $alipay_config['key']            = '';
 9 // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
10 $alipay_config['notify_url'] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/notify_url.php";
11 // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
12 $alipay_config['return_url'] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/return_url.php";
13 //签名方式
14 $alipay_config['sign_type']    = strtoupper('MD5');
15 //字符编码格式 目前支持 gbk 或 utf-8
16 $alipay_config['input_charset']= strtolower('utf-8');
17 //ca证书路径地址,用于curl中ssl校验
18 //请保证cacert.pem文件在当前文件夹目录中
19 $alipay_config['cacert']    = getcwd().'\\cacert.pem';
20 //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
21 $alipay_config['transport']    = 'http';
22 // 支付类型 ,无需修改
23 $alipay_config['payment_type'] = "1";
24 // 产品类型,无需修改
25 $alipay_config['service'] = "create_direct_pay_by_user";
26 //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
27 //↓↓↓↓↓↓↓↓↓↓ 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
28 // 防钓鱼时间戳  若要使用请调用类文件submit中的query_timestamp函数
29 $alipay_config['anti_phishing_key'] = "";
30     
31 // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1
32 $alipay_config['exter_invoke_ip'] = "";
33 //↑↑↑↑↑↑↑↑↑↑请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

 

官方demo注解已经写得很详细了,值得至于的问题  $alipay_config['partner']  $alipay_config['key']  $alipay_config['seller_id/seller_email/seller_account_name'](该参数三选一 卖家的支付宝用户号/账号/账号别名) 这三个参数是由支付宝开发平台提供的。

$alipay_config['notify_url'] $alipay_config['return_url'] 参数 由开发者设置,设置时必须保证外网可以访问到的地址且不可以带?id=123自定义参数

  'notify_url' 异步通知地址 : 这个地址是用户支付完成后,支付宝异步回调的地址,开发者必须在该地址下的PHP文件进行支付成功后业务逻辑处理

  'return_url' 同步通知地址: 这个地址是用户支付完成后,支付宝同步跳转的地址,开发者在该地址下的PHP文件处理支付宝支付成功的页面显示

 

支付宝支付--即时到账 开发总结

 

 

三.配置完成后 在需要需要支付的php文件中载入 require_once "/lib/alipay_submit.class.php";  和 在支付的类里 载入 require_once PAYPATH."/alipay.config.php";

 

四.实例化 AlipaySubmit 类 传入参数数组  参数列表:

基本参数

service

接口名称

String

接口名称。

不可空

create_direct_pay_by_user

partner

合作者身份ID

String(16)

签约的支付宝账号对应的支付宝唯一用户号。

以2088开头的16位纯数字组成。

不可空

2088101011913539

_input_charset

参数编码字符集

String

商户网站使用的编码格式,如utf-8、gbk、gb2312等。

不可空

gbk

sign_type

签名方式

String

DSA、RSA、MD5三个值可选,必须大写。

不可空

MD5

sign

签名

String

请参见签名

不可空

7d314d22efba4f336fb187697793b9d2

notify_url

服务器异步通知页面路径

String(190)

支付宝服务器主动通知商户网站里指定的页面http路径。

可空

http://api.test.alipay.net/atinterface/receive_return.htm

return_url

页面跳转同步通知页面路径

String(200)

支付宝处理完请求后,当前页面自动跳转到商户网站里指定页面的http路径。

可空

http://api.test.alipay.net/atinterface/receive_return.htm

业务参数

out_trade_no

商户网站唯一订单号

String(64)

支付宝合作商户网站唯一订单号。

不可空

6843192280647118

subject

商品名称

String(256)

商品的标题/交易标题/订单标题/订单关键字等。

该参数最长为128个汉字。

不可空

贝尔金护腕式

payment_type

支付类型

String(4)

只支持取值为1(商品购买)。

不可空

1

total_fee

交易金额

Number

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

不可空

100

seller_id

卖家支付宝用户号

String(16)

  • seller_id是以2088开头的纯16位数字。
  • seller_email是支付宝登录账号,格式一般是邮箱或手机号。
  • seller_account_name是卖家支付宝账号别名。

三个参数至少必须传递一个。

当签约账号就是收款账号时,请务必使用参数seller_id,即seller_id的值与partner的值相同。

三个参数的优先级别是:seller_id>seller_account_name>seller_email。

不可空

2088002007018966

seller_email

卖家支付宝账号

String(100)

alipay-test01@alipay.com

seller_account_name

卖家支付宝账号别名

String(100)

tstable02@alipay.com

buyer_id

买家支付宝用户号

String(16)

  • buyer_id是以2088开头的纯16位数字。
  • buyer_email是支付宝登录账号,格式一般是邮箱或手机号。
  • buyer_account_name是买家支付宝账号别名。

三个参数的优先级别是:buyer_id>buyer_account_name>buyer_email。

可空

2088002007018955

buyer_email

买家支付宝账号

String(100)

tstable01@alipay.com

buyer_account_name

买家支付宝账号别名

String(100)

tstable03@alipay.com

price

商品单价

Number

单位为:RMB Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。此参数为单价

规则:price、quantity能代替total_fee。即存在total_fee,就不能存在price和quantity;存在price、quantity,就不能存在total_fee。

可空

10.00

quantity

购买数量

Number

price、quantity能代替total_fee。即存在total_fee,就不能存在price和quantity;存在price、quantity,就不能存在total_fee。

可空

1

body

商品描述

String(1000)

对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。

可空

美国专业护腕鼠标垫,舒缓式凝胶软垫模拟手腕的自然曲线和运动,创造和缓的GelFlex舒适地带!

show_url

商品展示网址

String(400)

收银台页面上,商品展示的超链接。

可空

http://www.360buy.com/product/113714.html

paymethod

默认支付方式

String

取值范围:

  • creditPay(信用支付)
  • directPay(余额支付)

如果不设置,默认识别为余额支付。

说明:

必须注意区分大小写。

可空

directPay

enable_paymethod

支付渠道

String

用于控制收银台支付渠道显示,该值的取值范围请参见支付渠道

可支持多种支付渠道显示,以“^”分隔。

可空

directPay^bankPay^cartoon^cash

anti_phishing_key

防钓鱼时间戳

String

通过时间戳查询接口获取的加密支付宝系统时间戳。

如果已申请开通防钓鱼时间戳验证,则此字段必填。

可空

587FE3D2858E6B01E30104656E7805E2

exter_invoke_ip

客户端IP

String(15)

用户在创建交易时,该用户当前所使用机器的IP。

如果商户申请后台开通防钓鱼IP地址检查选项,此字段必填,校验用。

可空

128.214.222.111

extra_common_param

公用回传参数

String(100)

如果用户请求时传递了该参数,则返回给商户时会回传该参数。

可空

你好,这是测试商户的广告。

it_b_pay

超时时间

String

设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭。

取值范围:1m~15d。

m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。

该参数数值不接受小数点,如1.5h,可转换为90m。

可空

1h

token

快捷登录授权令牌

String(40)

如果开通了快捷登录产品,则需要填写;如果没有开通,则为空。

可空

201103290c9f9f2c03db4267a4c8e1bfe3adfd52

qr_pay_mode

扫码支付方式

String(1)

扫码支付的方式,支持前置模式和跳转模式。

前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以iframe方式请求支付宝页面。具体分为以下3种:

  • 0:订单码-简约前置模式,对应iframe宽度不能小于600px,高度不能小于300px;
  • 1:订单码-前置模式,对应iframe宽度不能小于300px,高度不能小于600px;
  • 3:订单码-迷你前置模式,对应iframe宽度不能小于75px,高度不能小于75px。
  • 4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。

跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。

  • 2:订单码-跳转模式

可空

1

qrcode_width

商户自定二维码宽度

Integer

商户自定义的二维码宽度。

当qr_pay_mode=4时,该参数生效。

可空 200

need_buyer_realnamed

是否需要买家实名认证

String(2)

是否需要买家实名认证。

  • T表示需要买家实名认证;
  • 不传或者传其它值表示不需要买家实名认证。
可空  T

promo_param

商户优惠活动参数

String(128)

商户与支付宝约定的营销透传参数。

可空 {"customer201412":"Y","goods201412":"Y"}

hb_fq_param

花呗分期参数

String

参数格式:hb_fq_seller_percent ^卖家承担付费比例|hb_fq_num ^期数。

  • hb_fq_num:花呗分期数,比如分3期支付;
  • hb_fq_seller_percent:卖家承担收费比例,比如50代表卖家承担50%。

两个参数必须一起传入。

两个参数用“|”间隔。Key和value之间用“^”间隔。

具体花呗分期期数和卖家承担收费比例可传入的数值请咨询支付宝。

可空 hb_fq_seller_percent^50|hb_fq_num^3

goods_type

商品类型

String(2)

商品类型:

  • 1表示实物类商品
  • 0表示虚拟类商品

如果不传,默认为实物类商品。

可空 1

 

从官网给出的参数列表可以知道必须的参数有10个,

其中 service、partner、_input_charset、seller_id、payment_type、sign_type、sign 都可以通过 alipay.config.php 配置文件获取, 此外还必须传入out_trade_no、subject、total_fee。

 

五. 调用 AlipaySubmit 类中的 buildRequestForm 方法 传入数组参数、提交方式(post) 和 提交按钮。

 1 $parameter = array(
 2                 "service"               => trim($alipay_config['service']),
 3                 "partner"               => trim($alipay_config['partner']),
 4                 "seller_email"          => trim($alipay_config['seller_email']),
 5                 "payment_type"          => trim($alipay_config['payment_type']),
 6                 "notify_url"            => $notify_url,//异步回调
 7                 "return_url"            => $return_url,//同步回调
 8                 "out_trade_no"          => $ordernum,//订单号
 9                 "subject"               => $subject,
10                 "total_fee"             => $total_fee,
11                 "body"                  => $body,
12                 "show_url"              => $show_url,
13                 "anti_phishing_key"     => $anti_phishing_key,
14                 "exter_invoke_ip"       => $exter_invoke_ip,
15                 "extra_common_param"    => $extra_common_param,
16                 "_input_charset"        => trim(strtolower($alipay_config['input_charset']))                
17             );
18             //建立请求
19             $alipaySubmit = new AlipaySubmit($alipay_config);
20             $html_text = $alipaySubmit->buildRequestForm($parameter,"post", "");
21             echo $html_text;

 

六.  支付宝提交参数进行支付时获取签名的流程sign_type、sign不参加签名)并以表单方式发送请求

  1.先调用buildRequestPara($para_temp)方法 将传入的参数进行处理(排序签名);

  2.paraFilter($para_temp)方法是对数组中的空值和签名参数(sign_type、sign)进行排除;

  3.argSort($para_filter)方法是对数组进行排序;

  4.$this->buildRequestMysign($para_sort)方法是将数组进行签名(把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串);

  5.在buildRequestMysign方法中数组参数和配置文件(alipay.config.php)中key参数进行MD5加密返回签名字符串;

  6.最后将签名字符串和签名类型也加入请求数组参数中;

  7.将请求参数进行循环组装成表单弹出新页面自动提交表单。

  

 1 $sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$this->alipay_gateway_new."_input_charset=".trim(strtolower($this->alipay_config['input_charset']))."' method='".$method."'>";
 2         while (list ($key, $val) = each ($para)) {
 3             $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
 4         }
 5 
 6         //submit按钮控件请不要含有name属性
 7         $sHtml = $sHtml."<input type='submit' value='".$button_name."'></form>";
 8         
 9         $sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>";
10         
11         return $sHtml;

 

七.支付成功后的回调 (回调页面已经传给支付宝服务器,支付宝服务器会在支付完成后对支付回调页面进行请求并传回支付参数

  1.页面同步回传的参数(通知地址:'return_url'

参数 参数名称 类型(字节长度) 参数说明 是否可为空 样例
is_success 成功标识 String(1) 表示接口调用是否成功,并不表明业务处理结果。 不可空 T
sign_type 签名方式 String DSA、RSA、MD5三个值可选,必须大写。 不可空 MD5
sign 签名 String(32) 请参见签名验证 不可空 b1af584504b8e845ebe40b8e0e733729
out_trade_no 商户网站唯一订单号 String(64) 对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。 可空 6402757654153618
subject 商品名称 String(256) 商品的标题/交易标题/订单标题/订单关键字等。 可空 手套
payment_type 支付类型 String(4) 只支持取值为1(商品购买)。 可空 1
exterface 接口名称 String 标志调用哪个接口返回的链接。 可空 create_direct_pay_by_user
trade_no 支付宝交易号 String(64) 该交易在支付宝系统中的交易流水号。最长64位。 可空 2014040311001004370000361525
trade_status 交易状态 String 交易目前所处的状态。成功状态的值只有两个:
TRADE_FINISHED(普通即时到账的交易成功状态);
TRADE_SUCCESS(开通了高级即时到账或机票分销产品后的交易成功状态)
可空 TRADE_FINISHED
notify_id 通知校验ID String 支付宝通知校验ID,商户可以用这个流水号询问支付宝该条通知的合法性。 可空 RqPnCoPT3K9%2Fvwbh3I%2BODmZS9o4qChHwPWbaS7UMBJpUnBJlzg42y9A8gQlzU6m3fOhG
notify_time 通知时间 Date 通知时间(支付宝时间)。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-23 13:17:39
notify_type 通知类型 String 返回通知类型。 可空 trade_status_sync
seller_email 卖家支付宝账号 String(100) 卖家支付宝账号,可以是Email或手机号码。 可空 chao.chenc1@alipay.com
buyer_email 买家支付宝账号 String(100) 买家支付宝账号,可以是Email或手机号码。 可空 tstable01@alipay.com
seller_id 卖家支付宝账户号 String(30) 卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088002007018916
buyer_id 买家支付宝账户号 String(30) 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088101000082594
total_fee 交易金额 Number 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 可空 10.00
body 商品描述 String(1000) 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。 可空 Hello
extra_common_param 公用回传参数 String 用于商户回传参数,该值不能包含“=”、“&”等特殊字符。如果用户请求时传递了该参数,则返回给商户时会回传该参数。 可空 你好,这是测试商户的广告。

  根据 trade_status 的状态可以知道订单的支付状态可以进行对支付成功后的业务逻辑处理。注意 通过GET获取参数。

if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
//不管普通或者高级 都执行此处
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//如果有做过处理,不执行商户的业务程序
}

  因为订单有可能已经通过异步进行处理了,所以需要先进行判断订单是否已经处理,如果处理就不再处理直接展示成功页面,如果未处理就处理业务后展示成功页面。

 

 

  2.页面异步回传的参数(通知地址:'notify_url'

参数 参数名称 类型(字节长度) 参数说明 是否可为空 样例
notify_time 通知时间 Date 通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。 不可空 2009-08-12 11:08:32
notify_type 通知类型 String 通知的类型。 不可空 trade_status_sync
notify_id 通知校验ID String 通知校验ID。 不可空 70fec0c2730b27528665af4517c27b95
sign_type 签名方式 String DSA、RSA、MD5三个值可选,必须大写。 不可空 DSA
sign 签名 String 请参见签名验证 不可空 _p_w_l_h_j0b_gd_aejia7n_ko4_m%2Fu_w_jd3_nx_s_k_mxus9_hoxg_y_r_lunli_pmma29_t_q%3D
out_trade_no 商户网站唯一订单号 String(64) 对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。 可空 3618810634349901
subject 商品名称 String(256) 商品的标题/交易标题/订单标题/订单关键字等。它在支付宝的交易明细中排在第一列,对于财务对账尤为重要。是请求时对应的参数,原样通知回来。 可空 phone手机
payment_type 支付类型 String(4) 只支持取值为1(商品购买)。 可空 1
trade_no 支付宝交易号 String(64) 该交易在支付宝系统中的交易流水号。最长64位。 可空 2014040311001004370000361525
trade_status 交易状态 String 取值范围请参见交易状态 可空 TRADE_FINISHED
gmt_create 交易创建时间 Date 该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-22 20:49:31
gmt_payment 交易付款时间 Date 该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-22 20:49:50
gmt_close 交易关闭时间 Date 交易关闭时间。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-22 20:49:46
refund_status 退款状态 String 取值范围请参见退款状态 可空 REFUND_SUCCESS
gmt_refund 退款时间 Date 卖家退款的时间,退款通知时会发送。格式为yyyy-MM-dd HH:mm:ss。 可空 2008-10-29 19:38:25
seller_email 卖家支付宝账号 String(100) 卖家支付宝账号,可以是email和手机号码。 可空 chao.chenc1@alipay.com
buyer_email 买家支付宝账号 String(100) 买家支付宝账号,可以是Email或手机号码。 可空 13758698870
seller_id 卖家支付宝账户号 String(30) 卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088002007018916
buyer_id 买家支付宝账户号 String(30) 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。 可空 2088002007013600
price 商品单价 Number 如果请求时使用的是total_fee,那么price等于total_fee;如果请求时使用的是price,那么对应请求时的price参数,原样通知回来。 可空 10.00
total_fee 交易金额 Number 该笔订单的总金额。请求时对应的参数,原样通知回来。 可空 10.00
quantity 购买数量 Number 如果请求时使用的是total_fee,那么quantity等于1;如果请求时使用的是quantity,那么对应请求时的quantity参数,原样通知回来。 可空 1
body 商品描述 String(1000) 该笔订单的备注、描述、明细等。对应请求时的body参数,原样通知回来。 可空 Hello
discount 折扣 Number 支付宝系统会把discount的值加到交易金额上,如果需要折扣,本参数为负数。 可空 -5
is_total_fee_adjust 是否调整总价 String(1) 该交易是否调整过价格。 可空 N
use_coupon 是否使用红包买家 String(1) 是否在交易过程中使用了红包。 可空 N
extra_common_param 公用回传参数 String 用于商户回传参数,该值不能包含“=”、“&”等特殊字符。如果用户请求时传递了该参数,则返回给商户时会回传该参数。 可空 你好,这是测试商户的广告。
business_scene 是否扫码支付 String 回传给商户此标识为qrpay时,表示对应交易为扫码支付。目前只有qrpay一种回传值。非扫码支付方式下,目前不会返回该参数。 可空 qrpay

   根据 trade_status 的状态可以知道订单的支付状态可以进行对支付成功后的业务逻辑处理。注意 通过POST获取参数。

   trade_status 的状态

触发条件名 触发条件描述 触发条件默认值
TRADE_FINISHED 交易完成 true(触发通知)
TRADE_SUCCESS 支付成功 true(触发通知)
WAIT_BUYER_PAY 交易创建 false(不触发通知)
TRADE_CLOSED 交易关闭 false(不触发通知)

 

  因为订单有可能已经通过同步进行处理了,所以需要先进行判断订单是否已经处理,如果处理就不再处理,如果未处理就处理业务。

  注意:

  •  程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
  • 当商户收到服务器异步通知并打印出success时,服务器异步通知参数notify_id才会失效。
  • 验证是否是支付宝发来的通知 : 

     请求的完整链接 https://mapi.alipay.com/gateway.do?service=notify_verify&partner=2088002396712354&notify_id=RqPnCoPT3K9%252Fvwbh3I%252BFioE227%252BPfNMl8jwyZqMIiXQWxhOCmQ5MQO%252FWd93rvCB%252BaiGg

     返回数据(纯文本)成功时:true,不成功时:报对应错误。

  •  业务数据处理:

     商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,并判断total_fee是否确实为该订单的 实际金额(即商户订单创建时的金额),同时需要校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔          单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email),上述有任何一个 验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处           理,并且过滤重复的通 知结果数据。在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。 如果商户需要对同步返回的数据做验签,必须通过服务端的签名验签代码逻辑          来实现。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。

     交易状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功;

     交易状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限;

     交易成功之后,商户(高级即时到账或机票平台商)可调用批量退款接口,系统会发送退款通知给商户,具体内容请参见批量退款接口文档;

     当商户使用站内退款时,系统会发送包含refund_status和gmt_refund字段的通知给商户。