最近在给 OpenCart 集成支付宝,财付通和微信扫码支付,其实这些插件都是有的卖的,但是还蛮贵的,还是自己开发集成吧,省钱。但是集成过程中发现了一些坑,有 opencart 的坑,也有支付 sdk 的坑,浪费了不少时间,这里整理几条,给需要的人跨坑。 微信 native 模式二中的 notify_url 地址必须是公网地址 支付宝的 notify_url 不能是 query string 的形式,比如 xxx/notify.php?route=a/b,只能为 xxx/notify.php OpenCart 中支付宝和财付通中的同步回调处理中最好 unset($_GET[‘route’])再做支付回调验证,否则因为这个多余的参数参与校检导致回调验证不成功 微信回调 notify 的时候是发送数据流,所以 GET 和 POST 是获取不到支付后异步通知过来的数据的,用官方的 SDK 的时候你可以这样改一下: $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents('php://input', 'r'); $notify = new PayNotifyCallBack(); $notify->Handle(false); PC 浏览器的支付宝用 ios 设备访问的时候会弹出支付宝客户端来支付,这样是接收不到异步和同步通知的,所以需要判断一下访问设备是移动端还是客户端,如果是移动端的话得用支付宝的 wap 方式来支付 财付通支付 QQ 浏览器支付一直参数错误,还没找到为什么 转载请注明: 转载自Yuansir-web 菜鸟 | LAMP 学习笔记 本文链接地址: OpenCart 开发支付宝,财付通,微信支付接入遇到的坑

阅读全文

很久没有搞 OpenCart 了,昨天在群里面看到一个人反应,OpenCart 后台(Dashboard)首页打开很慢,大约 9 秒,其他任何页面都很快。不知道什么原因,于是我帮他解决了这个问题,这里随便记录一下问题解决的经过和思路。 首先我让它开启 mysql 的慢查询记录,因为后台首页有一个图表统计,以及订单和用户的等统计数据。可是结果他说并没有查询超过 2 秒的记录。看来不是 mysql 查询的问题。 然后我又让他用 firebug 看一下,哪个 http 请求的时间线最长,本来以为有外部请求的原因,结果发现就是 route=common/home&token= 返回的一个 ajax 超时状态。于是我就去查看了admin/controller/common/home.php 的源码,也没有发现有什么外部的请求。一个个查看 ControllerCommonHome 中 index 方法中所有的$this->load->model,后来发现下面这段代码: if ($this->config->get('config_currency_auto')) { $this->load->model('localisation/currency'); $this->model_localisation_currency->updateCurrencies(); } 去admin/model/localisation/current.php看了一下源代码,果然里面有一段 curl 请求外部链接的代码: public function updateCurrencies($force = false) { if (extension_loaded('curl')) { $data = array(); if ($force) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'"); } else { $query = $this->db->query("SELECT * FROM " .

阅读全文

Opencart 自带的上传商品图片的 JQuery 插件做的相册管理器确实很方便,相比 Echsop 等更加友好的上传商品相册,但是有一个问题,就是如果商品图片很多的时候,你需要上传一个商品图片到相册管理器中后,要到相册管理器中选择你刚才上传的图片,由于相册管理器中图片很多的时候,无论是图片的目录还是图片加载的会很慢,等加载中或者加载完再去找到刚才上传的图片就会消耗一点时间,就如下图所示: 在网上搜索了批量上传的插件,但是还是基于这个相册管理器的批量上传,不能解决打开相册管理器加载速度慢选择图片的问题,于是我就自己做了个批量上传的插件,将Plupload 集成到 Opencart 中,同时做了和商品关联,这样,在添加商品时,只要批量上传图片成功以后,保存商品,就可以自动将商品图片关联到该商品,不需要再使用到 Opencart 的原来的相册管理器了。 但是这里要定义一下上传图片的规则,上传图片的命名规则:上传目录*商品的型号*图片文件名,比如 test_abc_asdfads.jpg 该图片会上传到 image/data/test 目录 中,对应为商品型号为 abc(也就是添加商品需要必填的* Model:)的商品相册图片,当然你可以修改我的插件,用 SKU 代替商品型号。效果如下 具体实现代码可以查看插件,也可以根据自己需求修改该插件: https://github.com/yuansir/opencart-multi-upload-images 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记 如果觉得本篇文章对您十分有益,何不 打赏一下 本文链接地址: 利用 Plupload 实现 Opencart 商品图片批量上传插件 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

阅读全文

很多人反映 Opencart 后台配置邮件协议为 MAIL 和 SMTP 发送邮件都不成功,官方和中文论坛上也有人反映这个问题,但是我照着配置了很多次还是不行,然后我索性把 Opencart 中发送邮件的类库替换成 PHPMailer,经测试完美解决。写一些实现过程,提供给需要的人参照。 1.下载 PHPMailer,解压以后,将里面的 class.phpmailer.php 和 class.smtp.php 复制到 opencart 的 system/library/ 目录下面 2.修改 system/startup.php,注释掉原来引入 mail 类代码,添加引入 class.phpmailer.php //by yuansir ;用phpmailer代替系统自带的mail和smtp的发送邮件方式 require_once(DIR_SYSTEM . 'library/class.phpmailer.php'); //require_once(DIR_SYSTEM . 'library/mail.php'); 3.在 Opencart 中需要发送邮件的代码段中,将原来 new Mail()的发送邮件相应注释掉,重写 PHPMailer 的发送邮件实现方法。比如我这里以 admin/controller/sale/contact.php 为例: foreach ($emails as $email) { //$mail = new Mail(); //$mail->protocol = $this>config>get('config_mail_protocol'); //$mail->parameter = $this>config>get('config_mail_parameter'); //$mail->hostname = $this>config>get('config_smtp_host'); //$mail->username = $this>config>get('config_smtp_username'); //$mail->password = $this>config>get('config_smtp_password'); //$mail->port = $this>config>get('config_smtp_port'); //$mail->timeout = $this>config>get('config_smtp_timeout'); //$mail->setTo($email); //$mail->setFrom($this>config>get('config_email')); //$mail->setSender($store_name); //$mail->setSubject($this>request>post['subject']); // //foreach ($attachments as $attachment) { // $mail->addAttachment($attachment['path'], $attachment['filename']); //} // //$mail->setHtml($message); //$mail->send(); /** * 用phpmailer 发送邮件 * @author yuansir */ ob_start(); error_reporting(0); $mail = new PHPMailer(); $mail->CharSet = "UTF-8"; $mail->IsSMTP(); $mail->Host = $this>config>get('config_smtp_host'); // SMTP server $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = $this>config>get('config_smtp_host'); $mail->Port = $this>config>get('config_smtp_port'); $mail->Username = $this>config>get('config_smtp_username'); $mail->Password = $this>config>get('config_smtp_password'); $mail->SetFrom($this>config>get('config_email'), $store_name);//发件人邮箱和发件人 $mail->Subject = $this>request>post['subject'];//邮件主题 $mail->MsgHTML($message);//邮件内容 $mail->AddAddress($email, "");//收件人邮箱和收件人 foreach ($attachments as $attachment) { $mail->AddAttachment($attachment['path']);//添加附件 } $mail->Send();//发送 } } 然后在后台配置你的邮件发送 SMTP 就可以正常发送了,你要做的就是替换全站涉及到发送邮件的代码段为 PHPMailer 的代码就可以了,关于 PHPMailer 的还有其他方法可以去官方查阅。

阅读全文

国内有个Opencart 中文支持还不错,但是好像里面的某些人不是太有开源精神,发个插件贴,下载还要花费大把的金币,不厚道!最近在用这个系统做一个日文站,因为系统自带配送不能满足要求,所以自己开发了一个配送模块,难度不大。google 一下竟然没有一个完整的 Opencart 模块中文开发教程,等有空了还是发布一个此类的教程。 需求是开发一个配送模块(当然系统自带的配送模块很多了),这个配送方式更灵活: 1.购买的所有商品满一定金额则免运费,比如满 15000 则免全部运费。 2.如果没有满 15000,则购买的商品中多一件商品就加一定金额的运费,比如多一件加 500 运费。 3.不同分类的商品运费收费不一样(因为一个 B2C 中可能卖不类别的商品,比如一个服装站如果卖一双的袜子和 2 双鞋子运费标准相同,可能会不合理吧),比如鞋类的配送为单双 1500,袜子的单双为 1000。 4.不同地区运费也不同,一般地区就是按照上面设定的配送运费规则,但是特殊地区的运费需要额外增加一定的金额,比如 500。 下面是截图: 当然如果以后再有按照重量计费的只需要把相关的逻辑整合进来就可以了。Opencart 是个不错的开源 PHP B2C 系统,功能齐全,尤其是代码很清晰,易于扩展和二次开发。 下载:https://github.com/yuansir/opencart-shipping-plugin 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记 如果觉得本篇文章对您十分有益,何不 打赏一下 本文链接地址: Opencart 模块插件(Modules)开发体验 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

阅读全文

作者的图片

Ryan是菜鸟 | LNMP技术栈笔记

一步一个脚印,一直在路上!记录LNMP技术栈,Web架构,区块链等笔记

菜鸟码农

南京