本文目录一览:
- 1、php 后台怎么把多种支付方式集成在一起 可以先择性安装
- 2、怎么在phpweb网站中加paypal代码
- 3、PHP的集成环境wampserver,在电脑右下角已经是绿色的了,问题是在网页端可以进去(比如PH
- 4、php mysql apache 集成环境有哪些
- 5、服务器上用php集成环境好不好呢,哪款集成环境在服务器上使用比较好??
- 6、php开发中app怎么接入支付宝
php 后台怎么把多种支付方式集成在一起 可以先择性安装
本文将介绍如何快速通过PHP类库来集成、整合支付宝来实现充值功能。如果你的系统想要扩充积分、账户余额等功能,那么就要选择一个第三方支付系统来充值。
支付宝集成时,需要三大步:
1、通过表单提交信息,系统整合信息,提交信息到支付宝;
2、用户进行支付后,支付宝后台通知系统处理;
3、支付宝后台通知完成后,支付宝前台跳转到系统返回地址;
支付宝PHP类
PHP 类alipay_notify,主要功能是付款过程中服务器通知处理。
PHP 类alipay_service,根据支付宝外部服务接口生成支付宝地址。
我把这2个类,集中到一个文件alipay.class.inc中,点击这里查看并下载PHP支付宝类源码。
下面主要主要讲解通过支付宝的PHP类来实现整合。
PHP支付宝集成
第一步,建立提交充值的基本信息:
zhifubao-chongzhi PHP支付宝集成 建立提交充值的基本信息
第二步,验证用户提交的金额正确,通过表单验证后,通过支付宝alipay_service类生成支付宝链接,然后跳转到支付宝链接。
function index() {
$total = intval($_POST['total']);
if (!$total) {
$total = 1;
}
$pay_bank = trim($_POST['pay_bank']);
$account = $_POST['_account'];
$base_path = ‘http://’.$_SERVER['HTTP_HOST'].base_path();
$order_id = date(‘YmdHis’, time()); //时间值作为唯一的订单ID号
$subject = $body = ‘LixiPHP充值’.$total.’元’;
$out_trade_no = date(‘YmdHis’, time()).’-’.$account-student['sid'];
//合作身份者ID,以2088开头的16位纯数字
$partner = ’20887015**9*7**’;
//安全检验码,以数字和字母组成的32位字符
$security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′;
//签约支付宝账号或卖家支付宝帐户
$seller_email = ‘seller@alipay.com’;
$_input_charset = "UTF-8";
$sign_type = "MD5"; //签名方式
$transport = ‘https’;//字符编码格式
$parameter = array(
"service" = "create_direct_pay_by_user", //交易类型
"partner" = $partner, //合作商户号
"return_url" = $base_path.’alipay/return’, //同步返回
"notify_url" = $base_path.’alipay/notify’, //异步返回
"_input_charset" = ‘UTF-8′, //字符集,默认为GBK
"subject" = $subject, //商品名称,必填
"body" = $subject, //商品描述,必填
"out_trade_no" = $out_trade_no, //商品外部交易号,必填(保证唯一性)
"price" = $total, //商品单价,必填(价格不能为0)
"payment_type" = "1", //默认为1,不需要修改
"quantity" = "1", //商品数量,必填
"paymethod" = ‘directPay’,
"defaultbank" = $pay_bank,
"logistics_fee" =’0.00′, //物流配送费用
"logistics_payment" =’BUYER_PAY’, //物流费用付款方式:SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)
"logistics_type" =’EXPRESS’, //物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
//"receive _mobile" = ”, //收货人手机
"show_url" = $base_path, //商品相关网站
"seller_email" = $seller_email, //卖家邮箱,必填
);
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_service($parameter, $security_code, $sign_type);
$link = $alipay-create_url();
header("Location: ".$link);
}
用户跳转到支付宝支付界面后,默认的支付银行是在提交表单前选择的网上银行,选择支付宝的话就是使用支付宝余额支付。然后就是等待用户支付了。用户完成支付后,请会发生下面的几个步骤,当然如果用户放弃支付的话,就没有后面的处理了。
第三步,用户进行支付后,支付宝后台通知系统处理。系统处理页面主要是根据生成支付宝链接是使用的notify_url来决定的。它处理完成后,成功返回success,失败返回fail,如果支付宝收到的是fail,那么支付宝还会在隔1小时,1天,1周等周期再次通知服务器处理,这里的周期需求向支付宝询问。如果支付宝收到的是success,注意支付宝好像在一个月后要发送一次TRADE_FINISHED表示交易完成,这个一定不要再给用户加一次充值了。
function alipay_notify() {
$out_trade_no = date(‘YmdHis’, time()).’-’.$account-student['sid'];
//合作身份者ID,以2088开头的16位纯数字
$partner = ’20887015**9*7**’;
//安全检验码,以数字和字母组成的32位字符
$security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′;
//签约支付宝账号或卖家支付宝帐户
$seller_email = ‘seller@alipay.com’;
$sign_type = "MD5";
$_input_charset = ‘UTF-8′;
$transport = ‘https’;
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay-notify_verify();
//支付宝 Notice verify
if($verify_result) {
//认证合格
//获取支付宝的反馈参数
//获取支付宝传递过来的订单号
$order_id = $_POST['out_trade_no'];
//获取支付宝传递过来的总价格
$total_fee = $_POST['total_fee'];
//拆分订单号为订单和学员ID
$txn_id = explode(‘-’, $order_id);
$real_orderid = $txn_id[0]; //get the real order
$sid = $txn_id[1];
if($_POST['trade_status'] == ‘TRADE_SUCCESS’) {
//这里放入你自定义代码,比如根据不同的trade_status进行不同操作
mysql_query("UPDATE {student} set balance = balance+%d where sid = %d", (int) $total_fee, $sid);
mysql_query("INSERT INTO {payment_receipts} (sid, order_id, amount, received) VALUES (%d, ‘%s’, %f, %d)", $sid, $real_orderid, (int) $total_fee, time());
echo "success";
}
else {
echo "fail";
}
}
else {
echo "fail";
}
}
第四步,用户完成支付后,支付宝前台跳转到系统返回地址。这个页面其实可以只做一个非常简单页面,不用做任何验证。但是为了安全建议也做一下返回验证。但是最后不要在返回页面做数据库操作。
function alipay_return() {
$out_trade_no = date(‘YmdHis’, time()).’-’.$account-student['sid'];
//合作身份者ID,以2088开头的16位纯数字
$partner = ’20887015**9*7**’;
//安全检验码,以数字和字母组成的32位字符
$security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′;
//签约支付宝账号或卖家支付宝帐户
$seller_email = ‘seller@alipay.com’;
$sign_type = "MD5";
$_input_charset = ‘UTF-8′;
$transport = ‘https’;
require("../libraries/payment/alipay.class.inc");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay-return_verify();
$order_id = $_GET['out_trade_no']; //获取订单号
$total_fee = (int) $_GET['total_fee']; //获取总价格
$txn_id = explode(‘-’, $order_id);
$real_orderid = $txn_id[0]; //get the real order
$sid = $txn_id[1];
//认证合格
if($verify_result) {
$output = ‘h2恭喜您,学员ID’.$sid.’充值’.$total_fee.’元成功!/h2’;
$student = mysql_query("SELECT uid, balance FROM {student} WHERE sid = %d", $sid);
$output .= ‘p您目前的余额’.$student-balance.’元。/p’;
$output .= l(‘查看记录’, ‘user/’.$student-uid.’/depositlogs’);
return $output;
}
else {
$output = ‘h2你的订单支付过程出现故障!/h2’;
$output .= ‘p您的交易信息是无效的,如果你使用的是已有的返回信息的话,那么交易已经成立,你可以查看我的订单历史。br如果你是黑客的话,俺是守法的好公民,希望你能饶了我这个小店。’;
$output .= ‘/ppa href="/"返回首页/a/p’;
return $output;
}
}
如果用户是恶意修改网址参数,将会看到:
callback return failed 如果用户是恶意修改网址参数
如果用户正常通过支付宝自动跳转回来的,将会看到:
callback return success 如果用户正常通过支付宝自动跳转回来的
好的,赶快将以上方法和代码应用到你的积分、账户余额系统把!
怎么在phpweb网站中加paypal代码
第一步:登陆PP的BIZ网站
第二步:点击用户信息-更多选项
第三步:点击销售工具
第四步:点击 API访问旁边的更新
第五步:点击申请API凭证
第六步:点击查看API签名
第七步:根据自己的需求申请API凭证或API证书
希望我的回答有帮到您
paypal--Sam 1486554099
PHP的集成环境wampserver,在电脑右下角已经是绿色的了,问题是在网页端可以进去(比如PH
右键重启,看看颜色变化,有的版本黄色、红色等代表有问题,纯白色才是一切正常启动;
php mysql apache 集成环境有哪些
1.AppServ (推荐,简洁精简)
当前的两个版本是: 2.5.10 2.6.0 (点击版本号下载)
AppServ是PHP网页架站工具组合包,泰国的作者将一些网路上免费的架站资源重新包装成单一的安装程序,以方便初学者快速完成架站,AppServ 所包含的软件有:Apache、Apache Monitor、PHP、MySQL、PHP-Nuke、phpMyAdmin。适合初学者
AppServ 2.5.10组件版本:
Apache 2.2.8
PHP 5.2.6
MySQL 5.0.51b
phpMyAdmin-2.10.3
AppServ 2.6.0组件版本:
Apache 2.2.8
PHP 6.0.0-dev
MySQL 6.0.4-alpha
phpMyAdmin-2.10.3
2.XAMPP (功能全面)
XAMPP是一款具有中文说明的功能全面的集成环境,XAMPP并不仅仅针对Windows,而是一个适用于Linux、Windows、Mac OS X 和Solaris 的易于安装的Apache 发行版。软件包中包含Apache 服务器、MySQL、SQLite、PHP、Perl、FileZilla FTP Server、Tomcat等等。默认安装开放了所有功能,安全性有问题,需要对以下安全问题进行设定。
MySQL 管理员(root)未设置密码。
MySQL 服务器可以通过网络访问。
PhpMyAdmin 可以通过网络访问。
样例可以通过网络访问。
Mercury 邮件服务器和 FileZilla FTP 服务器的用户是公开的。
3.WampServer (简便易用)
主页
WampServer - WampServe集成了Apache、MySQL、PHP、phpmyadmin,支持Apache的mod_rewrite,PHP扩展、Apache模块只需要在菜单“开启/关闭”上点点就搞定,省去了修改配置文件的麻烦。
4. phpstudy
该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。总之学习PHP只需一个包。
对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事;对老手来说也是一件烦琐的事。因此无论你是新手还是老手,该程序包都是一个不错的选择。
1、全面适合 Win2000/XP/2003 操作系统,IIS和Apache二选一安装。
2、该程序包集成以下软件,均为最新版本。
PHP 5.2.5 新型的CGI程序编写语言,易学易用、速度快、跨平台。
Apache 2.2.8 最流行的HTTP服务器软件,快速、可靠、开源。
MySQL 5.0.45 执行性能高,运行速度快,容易使用,非常棒数据库。
phpMyAdmin 2.11.4 开源、基于WEB而小巧的MySQL管理程序。
ZendOptimizer 3.3.0 免费的PHP优化引擎,性能提高30%以上。
OpenSSL 0.9.8g 密码算法库、SSL协议库以及应用程序。
eAccelerator 0.9.5.2 又一加速,不亚于ZendOptimizer。
3、如果作为服务器请稍修改配置文件即可。MySQL数据库用户名:root,密码root,安装后请重新设置密码。
5.APMServ
APMServ 5.2.0 是一款拥有图形界面的快速搭建Apache 2.2.3、PHP 5.2.0、MySQL 5.0.27&4.0.26、SQLite、ZendOptimizer、OpenSSL、phpMyAdmin、
SQLiteManager,以及ASP、CGI、Perl网站服务器平台的绿色软件。无需安装,具有灵活的移动性,将其拷贝到其它目录、分区或别的电脑时,均只需点击APMServ.exe
中的启动按钮,即可自动进行相关设置,将Apache和MySQL安装为系统服务并启动。APMServ集合了Apache稳定安全的优点,并拥有跟IIS一样便捷的图形管理界面,同
时支持MySQL 5.0 4.0两个版本,虚拟主机、虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需鼠标一点即可完
成。
1、注意事项:APMServ程序所在路径不能含有汉字和空格。
2、MySQL默认用户名:root,密码为空
3、MySQL数据库文件存放目录:MySQL5.0/data或MySQL4.0/data
4、网站根目录[HTML,PHP]www/htdocs [ASP]www/asp [CGI,Perl]www/cgi-bin
5、访问本机请用127.0.0.1/或 (如果开启SSL)
6、非默认端口,网址为127.0.0.1:端口/或:端口/
7、APMServ集成了以下软件:
Apache 2.2.3 [HTTP服务器]
NetBox 2.8 Build 4128 [HTTP服务器+ASP脚本解释引擎]
PHP 5.2.0 [PHP脚本解释引擎]
MiniPerl 5.8 [Perl脚本解释器]
MySQL 5.0.27 [MySQL数据库服务器]
MySQL 4.0.26 [MySQL数据库服务器]
SQLite 3.3.8 [SQLite数据库服务器]
phpMyAdmin 2.9.1.1 [MySQL数据库在线管理工具]
SQLiteManager 1.2.0 [SQLite数据库在线管理工具]
ZendOptimizer 3.2.0 [PHP脚本加速引擎]
OpenSSL 0.9.8d [HTTPS(SSL)安全传输协议]
附加组件:
一Perl、CGI支持(需下载ActivePerl):
APMServ 5.2.0 附带的是MiniPerl,可以运行简单的Perl、CGI程序。如果运行复杂的Perl、CGI程序,请下载ActivePerl,安装在APMServ所在分区根目录下的usr目录中。假如APMServ所在目录为E:/APMServ5.2.0,则将ActivePerl的安装路径选为E:/usr
服务器上用php集成环境好不好呢,哪款集成环境在服务器上使用比较好??
先回答你的第一个问题。
网上有人说适合,也有人说不适合的,不能说他们说的完全错误,但也不能说是完全正确的,具体问题具体分析,这种事情要看情况。
php集成环境的本质是啥?网上那些php集成环境和我们自己安装的有啥区别呢?
其实没多大差别,所谓的php集成环境只不过通过软件替我们完成了一些比较麻烦的操作罢了,本质上没有任何区别!那些程序开发者开发php集成环境软件的时候,都要把apache与mysql等组件集成在软件里面,而这些apache等组件和自己安装的是没啥区别的,不过不建议使用精简版的集成环境,可以使用完全版的php集成环境。
我打个比方,软件的安装版和绿化版其实没毛线区别,有的集成环境集成组件后重新打包成安装版罢了,而有的集成环境集成组件后将其绿化成绿色版集成环境,不过绿化后的php集成环境确实方便,插上U盘,插其他电脑就可以直接运行网站,用软件能省略了很多繁琐步骤,确实很便捷。php集成环境是一种工具,工具本身就是为了方便,当然你也可以自行安装,比较费事罢了,集成环境功能多,方便使用。
关于你的第二个问题“哪款集成环境在服务器上使用比较好??
既然集成环境适合在服务器上运行,那是不是就可以直接用在服务器上?看你的需求了,同时也要看是哪种集成环境。
选择哪种php集成环境做服务器环境主要有以下几点要考虑
1、大部分php集成环境集成的版本都不是最新(这条无关紧要,因为现在很多网站都不是用最新的,旧版本程序不一定适合新的啊!)
解决:可以选择那些集成了新组件的集成环境,或者能自定义设置版本的php集成环境
2、一些php集成环境可能为了减小软件体积,阉割了一些组件,所以不太适合运营使用
解决:你可以选择一些集成了完整版组件的集成环境。
3、一些php集成环境因为某些配置文件是自动生成,有些配置是不能自己改,就算你改了也会被程序自动改回来
解决:目前有一些php集成环境还是能完全自己修改和自定义配置的,不会被软件自动生死所限制。
具体用哪个,你可以根据自己的需求选择,毕竟每个集成环境都各具特点,按需选择。
有的人说用集成环境不安全,自己配置的比较安全,我的乖乖,安不安全看谁在用,你本身啥都不懂,你就算自己配置了php环境,你敢保证是安全的吗?本身集成环境和自己安装的就没啥区别,很多集成环境我们自己都说可以随意配置的,和你自行分开下载安装的配置是一毛一样的。安不安全,看是谁在用,就好比天天有人说这个语言好,那个语言不好,其实语言没所谓好坏,毕竟各有其特点,语言好不好得看用他的人。
phpwamp和PHPCUSTOM这两款集成环境很适合在服务器运行,集成官方完全组件,无阉割无精简,是完全版的,而且支持完全的配置自定义,php版本等自定义,还能同时运行多版本,自带重启任务。
PHPCUSTOM自带重启任务,能定时重启服务器,定时重启网站服务等。
纯绿色很方便,所集成的组件是完全的,适合测试,也比较适合服务器
累死了,纯手工打字啊,采纳我给我赚点分吧。
php开发中app怎么接入支付宝
准备工作
APP支付接口:alipay.trade.app.pay
服务器端使用框架:TP5
登录蚂蚁金服开放平台 -- 创建应用 -- 添加App支付功能。具体查看官方文档
下载官方 SDK (PHP版本资源)——当前SDK版本:106 生成时间:2017-07-25 11:46:10
将SDK原码放置在TP5的vendor目录下的alipay文件夹(可根据实际使用框架技术进行实际调整)。
支付接口调用原理
1、APP支付系统架构
APP支付系统架构图
2、数据校验原理
数据校验原理
应用公钥(商户自身的RSA公钥):支付宝使用该公钥验证该交易是商户发起。
支付宝公钥(支付宝的RSA公钥):商户使用该公钥验证该结果是支付宝返回的。
3、系统交互流程
系统交互流程图
4、支付场景具体实现流程(最详细图解)
在集成App支付能力时,建议实现如下支付流程,创建订单并支付,根据返回的结果确定支付状态,并进行相应的异常处理,其过程如下图所示.
支付场景具体实现流程
商家APP在创建订单并且唤起支付宝APP支付,流程如上图所示,根据第2.2,3步返回的支付结果,确定支付状态,并且做相应的异常处理(必要时关闭订单)
代码实现
步骤1:商户APP端请求商户服务器接口,提交订单数据。
步骤2:商户服务器端接收数据,然后对数据进行签名,返回请求参数到商户APP端。
官方接口文档:
——代码如下:
//vendor();为TP5框架的方法,作用:导入第三方框架类库
vendor('alipay.aop.AopClient');
vendor('alipay.aop.request.AlipayTradeAppPayRequest');
//实例化支付接口
$aop = new \AopClient();
$aop-gatewayUrl = ""; //支付宝网关
$aop-appId = “应用ID,填写你的APPID”;
$aop-rsaPrivateKey = "商户私钥,您的原始格式RSA私钥()";
$aop-alipayrsaPublicKey = "支付宝公钥";
$aop-apiVersion = '1.0';
$aop-signType = "签名方式,如 RSA2 ";
$aop-postCharset = 'UTF-8';
$aop-format = "json";
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$appRequest = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent = json_encode([
'body' = '余额充值', //订单描述
'subject' = '充值', //订单标题
'timeout_express' = '30m',
'out_trade_no' = ‘20170125test01’, //商户网站唯一订单号
'total_amount' = '0.01', //订单总金额
'product_code' = 'QUICK_MSECURITY_PAY', //固定值
]);
$appRequest-setNotifyUrl($url); //设置异步通知地址
$appRequest-setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop-sdkExecute($appRequest);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
echo htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。
// 如果最后有问题可以尝试把htmlspecialchars方法去掉,直接返回$response
说明:sdkExecute()方法,作用生成签名,详细步骤如下:
将请求参数组装分下列3步,以最后第三步获取到的请求为准。
1)将请求参数的键按字典排序,然后按照key=valuekey=value方式拼接,得到未签名原始字符串如下:
app_id=2015052600090779biz_content={"timeout_express":"30m","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"IQJZSRC1YMQB5HU"}charset=utf-8format=jsonmethod=alipay.trade.app.pay¬ify_url=;sign_type=RSA2×tamp=2016-08-25 20:26:31version=1.0
2)再对原始字符串进行签名
app_id=2015052600090779biz_content={"timeout_express":"30m","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"IQJZSRC1YMQB5HU"}charset=utf-8format=jsonmethod=alipay.trade.app.pay¬ify_url=;sign_type=RSA2×tamp=2016-08-25 20:26:31version=1.0sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=
3)最后对请求字符串的所有一级value(biz_content作为一个value)进行encode,编码格式按请求串中的charset为准,没传charset按UTF-8处理,获得最终的请求字符串:
app_id=2015052600090779biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7Dcharset=utf-8format=jsonmethod=alipay.trade.app.pay¬ify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notifysign_type=RSA2×tamp=2016-08-25%2020%3A26%3A31version=1.0sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D
步骤3:商户APP接收从商户服务器端返回的请求参数,然后调起支付宝支付面板。
若用户支付成功,支付宝会同步给商户APP端返回一个支付结果。相应地,支付宝也会通过异步通知给商户服务器端返回一个支付结果。
注意:由于同步通知和异步通知都可以作为支付完成的凭证,且异步通知支付宝一定会确保发送给商户服务端。为了简化集成流程,商户可以将同步结果仅仅作为一个支付结束的通知(忽略执行校验),实际支付是否成功,完全依赖服务端异步通知。
步骤4:服务端异步通知处理机制(支付宝主动发起通知,该方式才会被启用)
官方接口文档:
注意点:
1)必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;
2)支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如:$_POST[‘out_trade_no’];
3)程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
4)当商户收到服务器异步通知并打印出success时,服务器异步通知参数notify_id才会失效。
——代码如下:
$aop = new AopClient;
$aop-alipayrsaPublicKey = '请填写支付宝公钥,一行字符串';
$flag = $aop-rsaCheckV1($_POST, NULL, "RSA2"); //验证签名
if($flag){
//校验通知数据的正确性
$out_trade_no = $_POST[‘out_trade_no']; //商户订单号
$trade_no = $_POST[‘trade_no']; //支付宝交易号
$trade_status = $_POST[‘trade_status']; //交易状态trade_status
$total_amount = $_POST[‘'total_amount']; //订单的实际金额
$app_id = $_POST[‘app_id'];
if($app_id!=$this-config['app_id']) exit('fail'); //验证app_id是否为该商户本身
//只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。
if($trade_status != 'TRADE_FINISHED' $trade_status != 'TRADE_SUCCESS')
exit('fail');
//校验订单的正确性
if(!empty($out_trade_no)){
//1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
//2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
//3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)。
//上述1、2、3有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。
//校验成功后在response中返回success,校验失败返回failure
}
exit('fail');
}
echo"fail"; //验证签名失败
步骤5:当商户APP端接收到支付宝的同步返回结果为成功时,商户APP端再请求商户服务器端API,判断订单最终支付结果,并做出最终响应。