博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
YunCart电商网站支付宝接口出现500错误
阅读量:7294 次
发布时间:2019-06-30

本文共 2890 字,大约阅读时间需要 9 分钟。

hot3.png

     yuncart 是一套易与集成的php开源商城系统,方便多人同时经行二次开发,Yuncart 可以以非常方便的方式切换到sql server,oracle等数据库,大小1.9MB,感兴趣的朋友,可以去下载。

     最近帮朋友用php做了一个电商网站,化妆品方面的。上网看了相关方面的程序源码,最后选择了yuncart,它轻量、简单、功能丰富等特点,闲暇时,做了些修改。下面就今天出现的问题,简单的说下,希望能帮助到有类似问题的童鞋。

     下图为我朋友的网站:

    yuncart,嫩好看,郑州北鲨科技

 问题描述:

      在网站上购买支付成功后,返回网站时,出现500内部服务器错误。

       排除:出现500后,发现支付宝上交易已成功,钱也少了,说明支付的时候是没有问题的,在回调的过程中发生了错我。

然后,开启网站上的日志,进行线上调试:

     180124_gEiv_584165.gif

    最后发现错误的根源出现在:/include/front/third/payment/alipay/alipay_core.function.php中

 function getHttpResponse($url, $input_charset = '', $time_out = "60") {    $urlarr     = parse_url($url);    $errno      = "";    $errstr     = "";    $transports = "";    $responseText = "";    if($urlarr["scheme"] == "https") {        $transports = "ssl://";        $urlarr["port"] = "443";    } else {        $transports = "tcp://";//LCQ修改        $urlarr["port"] = "80";    }            $fp=@fsockopen($transports."".$urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);        if(!$fp)     {        die("ERROR: $errno - $errstr
\n");    }     else {        if (trim($input_charset) == '') {            fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n");        }        else {            fputs($fp, "POST ".$urlarr["path"].'?_input_charset='.$input_charset." HTTP/1.1\r\n");        }                fputs($fp, "Host: ".$urlarr["host"]."\r\n");        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");        fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n");        fputs($fp, "Connection: close\r\n\r\n");        fputs($fp, $urlarr["query"] . "\r\n\r\n");        while(!feof($fp))        {            $responseText .= @fgets($fp, 1024);        }        fclose($fp);        $responseText = trim(stristr($responseText,"\r\n\r\n"),"\r\n");        return $responseText;    }

这个函数中使用了

fsockopen这个函数,由于某些服务器或虚拟空间上,不支持php的fsockopen方法,网上也有说:在url中,去掉http://如:http://www.xxx.com改成www.xxx.com。但这仍不是问题的核心。换来,改用curl来取代fsockopen。于是getHttpResponse方法就改写成:/** * 作  者:郑州北鲨* 远程获取数据 * 注意:该函数的功能可以用curl来实现和代替。curl需自行编写。 * $url 指定URL完整路径地址 * @param $input_charset 编码格式。默认值:空值 * @param $time_out 超时时间。默认值:60 * return 远程输出的数据 *///curl改写fsockopenfunction getHttpResponse($url,$requestdata,$time_out = "60") {    $ci = curl_init();    curl_setopt($ci,CURLOPT_USERAGENT,"Yuncart");    curl_setopt($ci,CURLOPT_CONNECTTIMEOUT,$time_out);    curl_setopt($ci,CURLOPT_TIMEOUT,$time_out);    curl_setopt($ci,CURLOPT_RETURNTRANSFER,true);    curl_setopt($ci,CURLOPT_SSL_VERIFYPEER,false);    curl_setopt($ci, CURLOPT_HEADER, false);    curl_setopt($ci,CURLOPT_POST,true);    curl_setopt($ci, CURLOPT_POSTFIELDS,$requestdata);    curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );    curl_setopt($ci, CURLOPT_URL, trim($url,"?"));    $response = curl_exec($ci);    $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);    $http_info = curl_getinfo($ci);    curl_close ($ci);   return $response;}这样以来,我们再次测试,OK!交易成功,问题由此解决!

转载于:https://my.oschina.net/lichaoqiang/blog/287043

你可能感兴趣的文章
FPGA在各行业的应用分析
查看>>
PostgreSQL 实时位置跟踪+轨迹分析系统实践 - 单机顶千亿轨迹/天
查看>>
js template实现方法
查看>>
(译)理解 LSTM 网络 (Understanding LSTM Networks by colah)
查看>>
java 反射
查看>>
[Android1.6]继承BaseAdapter为GridView设置数据时设置setLayoutParams时注意
查看>>
Winform开发几个常用的开发经验及知识积累(一)
查看>>
【FTP】java FTPClient 文件上传内容为空,文件大小为0
查看>>
Winform开发框架里面使用事务操作的原理及介绍
查看>>
Error:(108) No resource identifier found for attribute 'style' in package 'android'
查看>>
从JavaScript函数重名看其初始化方式
查看>>
用系统滚动条实现NumericUpDown的原理
查看>>
就不可以认真点么.
查看>>
JSP标签JSTL(4)--URL
查看>>
DiscuX END - 553 Envolope sender mismatch with header from..
查看>>
论文笔记之:Instance-aware Semantic Segmentation via Multi-task Network Cascades
查看>>
单例模式
查看>>
你能用微信小程序打开小程序了【附开发方法】
查看>>
【BOOM】一款有趣的Javascript动画效果
查看>>
Osmocom-bb系统编译
查看>>