php issign为false,支付宝接口集成及错误排除

我集成了支付宝接口,可以支付成功,可是notify_url.php中始终好像没有回调,所以按照官方文档,我作了以下修改php

$verify_result = $alipayNotify->verifyNotify();

if($verify_result) {

//商户订单号

$order_id = $_POST['out_trade_no'];

//支付宝交易号

$trade_no = $_POST['trade_no'];

//交易状态

$trade_status = $_POST['trade_status'];

//订单总金额

$total_fee = floatval($_POST['total_fee']);

//订单支付时间

$pay_time = $_POST['gmt_payment'];

//定制的错误机制

$user_debug=1;

//退款状态

$refund_status = $_POST['refund_status'];

logResult('记录付款后支付宝返回的相关信息[订单编号]:'.$order_id.'[金额]:'.$total_fee.'[时间]:'.$pay_time.'[状态]:'.$_POST['trade_status']);

if ($_POST['trade_status'] == 'TRADE_SUCCESS' || $_POST['trade_status'] == 'TRADE_FINISHED') {

}

}

else{

//验证失败

logResult('验证失败');

echo "fail";

}

其实就是用支付宝接口内部方法logResult方法记录了回调的状况,看看是否回调该文件而且看回调到了哪一步数组

再支付一次我发现log.txt文件中多了“验证失败”,所以我就判断是$alipayNotify->verifyNotify();这个没有返回正确的值安全

打开alipay_notify.class.php文件,找到verifyNotify方法,发现官方注释了一段语句服务器

function verifyNotify(){

if(empty($_POST)) {//判断POST来的数组是否为空

return false;

}

else {

//生成签名结果

$isSign = $this->getSignVeryfy($_POST, $_POST["sign"]);

//获取支付宝远程服务器ATN结果(验证是不是支付宝发来的消息)

$responseTxt = 'true';

if (! empty($_POST["notify_id"])) {$responseTxt = $this->getResponse($_POST["notify_id"]);}

//写日志记录

//if ($isSign) {

//$isSignStr = 'true';

//}

//else {

//$isSignStr = 'false';

//}

//$log_text = "responseTxt=".$responseTxt."\n notify_url_log:isSign=".$isSignStr.",";

//$log_text = $log_text.createLinkString($_POST);

//logResult($log_text);

//验证

//$responsetTxt的结果不是true,与服务器设置问题、合做身份者ID、notify_id一分钟失效有关

//isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关

if (preg_match("/true$/i",$responseTxt) && $isSign) {

return true;

} else {

return false;

}

}

}

将如上代码的注释取消,再一次支付,再看log.txt发现写入了以下代码curl

执行日期:20140306121304

responseTxt=

notify_url_log:isSign=true,discount=0.00&payment_type=1&subject=订单主题&trade_no=2014030615255398&buyer_email=287139270@qq.com&gmt_create=2014-03-06 12:12:55&notify_type=trade_status_sync&quantity=1&out_trade_no=1394079155627&seller_id=2088211562160923&notify_time=2014-03-06 12:13:03&trade_status=TRADE_SUCCESS&is_total_fee_adjust=N&total_fee=0.10&gmt_payment=2014-03-06 12:13:03&seller_email=aaaaaa@126.com&price=0.10&buyer_id=2088702034696988&notify_id=ec0149b551db7c645e3e66a3058d3b067g&use_coupon=N&sign_type=MD5&sign=5a46cb0b739f659089330a28293e042e函数

因而咱们能够发现isSign是经过了,那就是$this->getResponse($_POST["notify_id"]这个方法错误了post

function getResponse($notify_id) {

$transport = strtolower(trim($this->alipay_config['transport']));

$partner = trim($this->alipay_config['partner']);

$veryfy_url = '';

if($transport == 'https') {

$veryfy_url = $this->https_verify_url;

}

else {

$veryfy_url = $this->http_verify_url;

}

$veryfy_url = $veryfy_url."partner=" . $partner . "¬ify_id=" . $notify_id;

$responseTxt = getHttpResponseGET($veryfy_url, $this->alipay_config['cacert']);

return $responseTxt;

}

能够看出,该函数就是与支付宝进行通讯,而且这一次用到了支付宝的证书,我起初怀疑是证书的问题,其实全部的证书都是同样的,不会根据商户不一样证书不一样,不过也有多是证书路径的问题$alipay_config['cacert']    = getcwd().'\\cacert.pem';有人也说改为$alipay_config['cacert']    = getcwd().'/cacert.pem';不过我没遇到这个问题this

固然最后要看alipay_core.function.php中的getHttpResponseGET方法了编码

function getHttpResponseGET($url,$cacert_url) {

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头

curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证

curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址

$responseText = curl_exec($curl);

//var_dump( curl_error($curl) );//若是执行curl过程当中出现异常,可打开此开关,以便查看异常内容

curl_close($curl);

return $responseText;

}

发现就是个curl_exec方法,因而就天然而然的怀疑是curl_exec方法被禁用了,打开phpinfo一看,果真是curl_exec被禁用了url

从中咱们能够发现支付宝工做的原理,其实也没有多复杂,支付成功后他会往notify_url post数据过来,系统会根据本地的证书,curl校验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看队列深度_不为人知的网络编程(十一):从底层入手,深度分析TCP连接耗时的秘密...

“ 本文作者张彦飞,原题“聊聊TCP连接耗时的那些事儿”,本次收录已征得作者同意,转载请联系作者。即时通讯网收录时有少许改动。本文已同步发布于52im社区:http://www.52im.net/thread-3265-1-1.html(1、引言对于基于互联网的通信…

perl python ruby_perl,lua,python,ruby的对比(3) -- lambda,closure,proper tail function call

今天的题目是函数,先看一下匿名函数。Perl里是这样的$f sub{ return $_[0]$_[1]$_[2];};print &$f(1,2,3)."\n";lua里是这样的f function(x,y,z) return xyz endprint (f(1,2,3))python里使用了lambda概念,实现是这样的,也可…

oracle将一个表数据更新时间,Oracle批量更新,将一个表的数据批量更新另一表

【问题】现在有两个千万级别的结构相同数据不同数据表T_SMS_PHONENO(目的表),T_SMS_PHONENO2(源表),根据源表数据更新目的表的数据。【分析】根据经验,更新方法一般有以下几种:1、直接update。update T_SMS_PHONENO T Set T.NA…

几级工作台做石头高墙_创造与魔法:建筑新手入门攻略,家园建材怎么做

hello大家好,又见面啦,我是创造与魔法郁金香建筑团的建筑师,九梨梨众所周知,我是一个热衷于出各类建筑案例的人,玩创魔两年多,做了好几十个不同款式的家园吧。其实创魔这个游戏,建筑只是其中一个…

oracle vitu,Supply Chain Management (SCM) a Manufacturing | Oracle Česká Republika

Nebyly nalezeny ždn vsledkyVašemu vyhledvn neodpovdaj ždn vsledky.Abyste našli to, co hledte, doporučujeme vyzkoušet nsledujc postup:Zkontrolujte pravopis vašich klčovch slov ve vyhledvn.Použijte synonyma pro klčov slovo, kter jste zadali, napřk…

python程序文件是什么_.py文件是什么?

展开全部.py文件是python的脚本文件。Python在执行时,首先会将.py文件中的62616964757a686964616fe59b9ee7ad9431333431363039源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机…

oracle12 快照保存时间,【AWR】调整AWR数据采样时间间隔及历史快照保留时间

1.AWR默认的采样间隔和历史快照保留时间默认是保留七天,采集间隔是1小时,这个信息可以从DBA_HIST_WR_CONTROL视图中获得。sysora10g> col SNAP_INTERVAL for a20sysora10g> col RETENTION for a20sysora10g> select * from dba_hist_wr_control…

两步路轨迹文件位置_最新Uber ATG的轨迹预测方法LiRaNet介绍

arXiv今年10月刚刚上传论文“LiRaNet: End-to-End Trajectory Prediction using Spatio-Temporal Radar Fusion“。其特色在于,除了激光雷达和HD Map之外,该轨迹预测方法采用了雷达传感器的信息。雷达和激光雷达融合是有挑战性的,因为前者的低…

python解方程时 怎样变换系数批量解方程_python求解方程

最有效的求解方法:三行代码搞定任何线性方程云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!在三行函数中解决任何线性方程式的技巧,甚至可以在两行代码…

linux查看目录下 开头,Linux下ls如何看到.开头的文件

Linux下ls查看到.开头的文件方法:ls -aLinux操作系统是UNIX操作系统的一种克隆系统,它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界…

python3.7代码转python2.7_Python3.7与Python2.7在centos7下兼容并存

原标题:Python3.7与Python2.7在centos7下兼容并存1、下载python3.7wget "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz"2、解压下载好的压缩包tar -zxvf Python-3.7.0.tgz3、配置编译python3.7mkdir /usr/local/python3 cd Python-3.7.0 ./…

linux红帽密码复杂度,[步骤] Linux 密码策略的设置(设置密码复杂度)(CentOS8RHEL8 版)...

步骤目录:步骤一:设置密码必须包含大小写字母等策略1.1 生成设置密码必须包含大小写字母的策略文件1.2 设置密码必须包含大小写字母等策略步骤二:设置密码有效期等策略步骤三:设置新密码不能和旧密码重复的策略具体的操作步骤&…

增值电信服务费是什么意思_增值电信业务IDC许可证要年检吗,流程是什么

据国家相关法律法规,持有IDC许可证的企业每年年初都需要办理IDC年检,企业也应当重视IDC年检,否则将会面临惩罚,所以小编来给大家介绍云南IDC许可证年检流程。为什么要办理云南IDC许可证年检,如何办理?根据《中华人民共和国电信条…

linux查看进程调用接口,查看某个程序都调用哪些api函数

查看某个程序都调用哪些api函数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!查看某个程序都调用哪些api函数vs6里带了个工具叫depends可以看反汇编软件w32dasm也可以希望能帮到你windows编…

linux生产上线工具,Linux 产能工具及其使用技巧

由于生产力本身是一个主观术语,我不打算详细解释我这里要讲到的“生产力”是什么。我打算给你们展示一些工具及其使用技巧,希望这会帮助你在Linux中工作时能更专注、更高效,并且能节省时间。Linux产能工具及其使用技巧再次说明,我…

python编译2的n次方计算器_用PYTHON2做个计算器,哪位高手能用Python写出计算器的代码,需要加减乘除和退出,谢谢!...

匿名用户 1级 2018-06-05 回答 粗略的写了一个,没有包含对输入的检查。 # coding: utf-8 计算器 operator = {a: [a for addition,+], b: [b for subtraction,-], c: [c for multiplication,*], d: [d for division,/], z: [z for exit,None] } def DisplayOperationMenu():…

linux 2.6.35 内核配置 usb,Linux 2.6.24.4移植到S3C2410(nano2410)之:USB

Linux 2.6.24.4移植到S3C2410(nano2410)之:USB【平台信息】目标板(Nano2410)------------------------CPU: S3C2410XSDRAM:HY57V561620(32MB)FLASH: K9F1208(64MB)NET: CS8900HOST---------------------------------------Linux Realse Version:Fecora Cor 8 (FC8)C…

现代汉语词典第五版_从现代汉语词典“哀兵必胜”词条说起

本文属本公众号原创。想转发可以后台留言,别洗我们的稿!最近,编校一姐一直在研读《现代汉语词典》(第7版),将会陆续发布学习心得。今天,说一说“哀兵必胜”词条。第一版第五版第六版第七版故抗兵相若(加),(…

linux通讯录软件带头像,小程序新技能 Get!保存微信好友头像到手机通讯录

原标题:小程序新技能 Get!保存微信好友头像到手机通讯录亲爱的朋友,你知道来电时能看到好友的头像是一种怎样的体验吗?你是否注意过这样一件事:每当打开自己的微博、微信等社交软件,除了扑面而来的信息流之…

linux vmware硬盘,给vmware的Linux虚拟机增添硬盘

给vmware的Linux虚拟机添加硬盘1、先将虚拟机Power Off,在Virtual Machine Setting对话框里点击左下角的“Add”,选择“Hard Disk”,之后选择“Create a new virtual disk”,分配容量,其他默认配置就可以了。2、启动虚…