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

最近帮朋友用php做了一个电商网站,化妆品方面的。上网看了相关方面的程序源码,最后选择了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!交易成功,问题由此解决!

YunCart电商网站支付宝接口出现500错误的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  2. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  3. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  4. 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

    阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...

  5. 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域

    一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...

  6. 如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...

  7. 如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备

     阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里——结算页的处理.从整个流程来看,这里需要用户填写的信息是最多的,那么 ...

  8. DDD设计一个电商网站

    DDD设计一个电商网站(十一)-- 最后的准备    阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里--结算页的处理. ...

  9. 如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展

    阅读目录 前言 回顾 本地的一致性 领域事件发布出现异常 订阅者处理出现异常 结语 一.前言 上篇中我们初步运用了领域事件,其中还有一些问题我们没有解决,所以实现是不健壮的,下面先来回顾一下. 二.回 ...

随机推荐

  1. CSS3 border-radius边框圆角

    在CSS3中提供了对边框进行圆角设定的支持,可对边框1~4个角进行圆角样式设置. 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 ...

  2. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  3. ajax

    常见的HTTP状态码状态码:200 请求成功.一般用于GET和POST方法 OK301 资源移动.所请求资源移动到新的URL,浏览器自动跳转到新的URL Moved Permanently304 未修 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. setCapture、releasCapture 浅析

    1. setCapture 简介 setCapture可以将鼠标事件锁定在指定的元素上,当元素捕获了鼠标事件后,该事件只能作用在当前元素上. 以下情况会导致事件锁定失败: 当窗口失去焦点时,锁定的事件 ...

  6. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  7. 转:ORA-15186: ASMLIB error function = [asm_open], error = [1], 2009-05-24 13:57:38

    转:ORA-15186: ASMLIB error function = [asm_open], error = [1], 2009-05-24 13:57:38http://space.itpub. ...

  8. LINQ to SQL语句(7)之Exists/In/Any/All/Contains

    适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...

  9. 这些年一直记不住的 Java I/O

    参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...

  10. MapReduce剖析笔记之五:Map与Reduce任务分配过程

    在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...