YunCart电商网站支付宝接口出现500错误

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

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

     下图为我朋友的网站:

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

 问题描述:

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

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

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

    

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  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<br />\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 ;
     }

这个函数中使用了

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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改写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!交易成功,问题由此解决!
目录
相关文章
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
977 2
|
机器学习/深度学习 人工智能 算法
机器学习是什么?
机器学习是什么?
683 4
|
9月前
|
UED
产品经理-用户体验五要素 - AxureMost
《用户体验五要素》介绍了构建成功用户体验设计的五个层面:战略层、范围层、结构层、框架层和表现层。战略层明确产品目标与用户需求;范围层定义功能和内容需求;结构层规划交互与信息架构;框架层设计界面、导航和信息布局;表现层则通过视觉设计创造感知体验。每一层都依赖于其下一层,形成自下而上的连锁效应,确保各要素相互作用,共同实现用户体验目标。
|
域名解析 网络协议 物联网
深度解析:UDP协议及其工作机制与优点
【8月更文挑战第20天】
817 0
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
|
人工智能 自然语言处理 安全
搭建微信公众号AI助手
将微信公众号(订阅号)变为AI智能客服仅需四步:创建大模型问答应用、搭建微信公众号连接流、引入AI智能客服及增加私有知识。首先在百炼平台创建应用并获取API密钥;其次利用阿里云AppFlow服务无代码连接微信公众号与大模型应用;接着配置公众号引入AI客服;最后上传企业知识文档提升客服精准度。通过这些步骤,轻松实现智能化客户服务。
1386 2
|
网络协议 程序员 数据安全/隐私保护
LabVIEW在两台计算机之间传输数据
LabVIEW在两台计算机之间传输数据
304 0
|
存储 Java Apache
Python Number类型详解!
本文详细介绍了 Python 中的数字类型,包括整数(int)、浮点数(float)和复数(complex),并通过示例展示了各种算术操作及其类型转换方法。Python 的 `int` 类型支持任意大小的整数,`float` 类型用于表示实数,而 `complex` 类型用于表示复数。此外,文章还对比了 Python 和 Java 在数字类型处理上的区别,如整数类型、浮点数类型、复数类型及高精度类型,并介绍了各自类型转换的方法。尽管两种语言在语法上有所差异,但其底层逻辑是相通的。通过本文,读者可以更好地理解 Python 的数字类型及其应用场景。
457 2
|
缓存 监控 数据库
性能优化的常见策略有哪些
【10月更文挑战第20天】性能优化的常见策略有哪些
627 0
|
SQL 分布式计算 大数据
利用SparkSQL Logical Plan Parse 打造大数据平台SQL诊断利器
利用SparkSQL Logical Plan Parse 打造大数据平台SQL诊断利器
281 0