YunCart电商网站支付宝接口出现500错误
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改写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!交易成功,问题由此解决! |
YunCart电商网站支付宝接口出现500错误的更多相关文章
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
一.前言 DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...
- 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户
阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...
- 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域
一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...
- 如何一步一步用DDD设计一个电商网站(二)—— 项目架构
阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...
- 如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备
阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里——结算页的处理.从整个流程来看,这里需要用户填写的信息是最多的,那么 ...
- DDD设计一个电商网站
DDD设计一个电商网站(十一)-- 最后的准备 阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里--结算页的处理. ...
- 如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展
阅读目录 前言 回顾 本地的一致性 领域事件发布出现异常 订阅者处理出现异常 结语 一.前言 上篇中我们初步运用了领域事件,其中还有一些问题我们没有解决,所以实现是不健壮的,下面先来回顾一下. 二.回 ...
随机推荐
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- XSS
XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- 从零开始编写自己的C#框架(27)——什么是开发框架
前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- Servlet监听器笔记总结
监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...
- 十分钟玩转 jQuery、实例大全
一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQuery对象 jQuery产 ...
- Springboot搭建web项目
最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...