两通知都要去做
- 同步通知: 用于用户在支付宝页面付款完毕后自动跳转回你自己的网址, 你根据他的参数告诉用户已经支付成功, 然后你再更新你自己订单表的状态为已支付.
异步通知: 其实是双保险机制, 如果同步通知后没有跳转到你的网址, 可能用户关了, 可能网速慢, 即无法触发你更新订单状态为已支付的controller, 这时候异步通知就有作用了, 不过你要判断一下, 如果订单已经变为已支付, 则不必再更新一次了, 只返回给支付宝success即可, 否则他会一直异步通知你
1同步通知是给用户看的
2异步通知是给服务器看的
why?同步通知方便用户查看是否充值成功,如果这里就判断并更新数据库,迟早会出事,首先网路慢或者用户关闭太早,造成用户充值成功但是数据库没有更新,同时这里更新数据库容易被伪造,数据不真实
异步通知一般都采用自动通知,并且有证书校验,不受前端影响,伪造数据难度高
1、文件列表:
alipay_config.php (基本参数配置页面,填写商家的支付宝安全校验码,合作id,支付宝帐号等内容)
index.php (提供给商家的接入页面,包含了物流信息,商品信息等内容)
return_url.php (跳转页面,买家支付成功后跳转的页面,仅当买家支付成功后跳转一次。)
notify_url.php (异步通知,下单成功后,支付宝服务器通知商户服务,并把这笔订单的状态通知给商户,商户根据返回的这笔订单的状态,修改网站订单的状态,比如等待买家付款状态,买家已经付款等待卖家发货.....)
alipay_service.php 支付核心类文件(建议不要修改)
alipay_notify.php 返回核心类文件(建议不要修改)
2、文件内容说明:
alipay_config.php 文件
-- show_url = "" '商户网站的网址。
-- seller_email = "" '请填写签约支付宝账号,
-- partner = "" '填写签约支付宝账号对应的partnerID,
-- key = "" '填写签约账号对应的安全校验码
如何获取支付宝帐号,安全校验码和partner
'登陆 www.alipay.com 后, 点商家服务,可以看到支付宝安全校验码和合作id,导航栏的下面
notify_url 交易过程中服务器通知的页面 要用 http://格式的完整路径,例如 http://www.alipay.com/alipay/notify_url.php 注意文件位置请填写正确
return_url 付完款后跳转的页面 要用 http://格式的完整路径, 例如 http://www.alipay.com/alipay/return_url.php 注意文件位置请填写正确。
index.php 文件
按照alipay_config.php文件进行配置,然后修改商品名称,商品描述,外部商家订单号等
logistics_fee 物流配送费用
logistics_payment 物流配送费用付款方式:SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、 BUYER_PAY_AFTER_RECEIVE(货到付款)
logistics_type 物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
3、return_url 与 notify_url 的区别
买家付款成功后,如果接口中指定有return_url ,买家付完款后会跳到 return_url所在的页面,这个页面可以展示给客户看,这个页面只有付款成功才会跳转.
notify_url:服务器后台通知,这个页面是程序后台运行的(买家和卖家都看不到),买家付完款后,支付宝会调用notify_url这个页面所在的页面并把相应的参数传递到这个页面,这个页面根据支付宝传递过来的参数修改网站订单的状态,更新完订单后需要在页面上打印出一个success给支付宝,如果反馈给支付宝的不是success,支付宝会继续调用这个页面.
流程:买家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付宝通知notify_url---& gt;如果反馈给支付宝的是success(表示成功,这个状态下不再反馈,如果不是继续通知,一般第一次发送和第二次发送的时间间隔是3分钟)
剩下的过程,卖家发货,买家确认收货,交易成功都是这个流程
常见问题:
1.根据代码实例和开发文档熟悉接口,将代码实例的相关参数信息填写完整(可以虚拟参数),在本地测试(不上传到服务器)支付宝接口。如果没有任何问题再将接口根据实际业务做到网站或者网站后台。
2.测试时您们需要两个支付宝账户,其中一个必须实名认证并且保证有一定的金额,以便测试时使用。另外一个帐户可以作为收款方(卖家)(针对于支付接口)
3.如果做支付宝订单信息和您们后台数据同步请集成时做数据返回处理,本地测试可以使用同步测试,如果在服务器上测试,可以通过异步来做也可以(支付宝有两种数据返回处理:同步返回和异步返回)。
同步返回(return_url)和异步返回(notify_url)的区别【return_url和notify_url参数必须是两个返回处理文件的绝对路径】?
答:同步返回处理(return_url):是一种可视化的返回,ie页面跳转通知,只要支付成功,支付宝通过get方式跳转到这个地址,并且带有参数给这个页面。客户获取信息受到买家操作的影响。如果买家支付完
成后客户服务器响应比较慢,买家在显示支付宝提示的“即时到账支付成功“时关闭页面,那么客户网站是获取不到信息,我们这边称为” 掉单“。而且这个返回处理是一次性调取,即支付成功后才调取同步返回处理。
异步返回处理(notify_url):它的数据交互是通过服务器间进行数据交互,必须将其放置在服务器上(公网)测试,服务器post消息到异步返回处理页面,需要客户技术在异步返回处理页面处理相关的数据处理
,然后每一步操作都要返回给支付宝success(不能包含其他的HTML脚本语言,不可以做页面跳转。)这个返回处理如果集成OK,那么基本不会出现掉单,因为支付宝会在24小时之内分6~10次将订单信息返回
个给客户网站,直到支付宝捕获success。
备注:同步返回处理则会受到买家操作的影响:
假如买家在操作的时候,支付宝完毕进入支付宝提示成功页面,这个时候由于服务器相应比较慢,那么买家有可能会关闭这个页面,这个时候您们就会接受不到支付宝返回的信息,还有有些网银支付后也不会调取支付宝的同步返
回处理页面,这样您在同步做数据处理同样接受不到数据。
备注:
请注意:现在您们集成的时候先按照提供给您们的测试账户的ID来做,至于正式账户的ID您们可以找等合同正式生效后再查询(获取方法:登陆签约的
支付宝账户-?点击“商家服务”,就可以看到)
--处理支付宝返回通知失败几种情况:
1、SIGN与MYSIGN不等,responseTxt为invalid命令参数不对,该错误 是由于合作伙伴ID(parnterID)与安全校验码(key)未填,或填错导致
2、SIGN与MYSIGN相等,responseTxt为false,是由于服务器、端口等因素导致,这时请检查
a.防火墙是否屏蔽支付宝的IP(支付宝锁使用的IP地址是:121.0.26.11,范围:121.026.0~255)
b.端口80或者443端口开放没有或者被其他服务占用
c.以上如果都没有问题,可能会是网络验证超时导致(支付宝验证时间是1分钟,SIGN与MYSIGN不等会导致超时),需要等待网络稳定再确定问题
3、SIGN与MYSIGN不等,responseTxt为true,此时只有两种情况会出现:
其一:传递参数时格式不符合(例如:带自定义参数)导致签名不一致
其二:编码格式出现问题,这时候请检查服务器编码和网站编码是否一致,可以写编码过滤解决也可以在返回页面强制编码转换