支付宝网页服务器出错500,YunCart电商网站支付宝接口出现500错误

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

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

下图为我朋友的网站:

A191415958-83114.gif_small.gif

问题描述:

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

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

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

A191418208-83114.gif_small.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://

如:。但这仍不是问题的核心。换来,改用curl来取代fsockopen。于是

getHttpResponse方法就改写成:

/**

* 作  者:郑州北鲨* 远程获取数据

* 注意:该函数的功能可以用curl来实现和代替。curl需自行编写。

* $url 指定URL完整路径地址

* @param $input_charset 编码格式。默认值:空值

* @param $time_out 超时时间。默认值:60

* return 远程输出的数据

*/

//curl改写fsockopen

function 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!交易成功,问题由此解决!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值