Loading...

集成paypal和支付宝支付的另外一种思路

类归于: PHP, 网站技术 — 江东 @ 2009-03-14 17:37:04 才(6)条评论

我们知道,paypal和alipay(支付宝)都支持商家工具功能,不幸的是,他们都是收费的,基本上都是按照交易金额的百分比来收费。然而对于支付宝来说,需要一次性缴纳一定的费用,用来抵消今后交易中的收费。这点对于刚刚起步尝试做网络B2C服务的朋友可能无法接受。

商家工具的好处在于可以很方便的将支付方式集成在自己的网站中,稍会一点代码的人都可以根据帮助手册将其集成进来。所以cosbeta的这篇的日志就不写如何集成商家工具了,这篇日志只是想提出一个变态的解决思路,看看通过这样的方式是否可行!

假设我们将购物的方式的流程设计如下:

  1. 买家将商品添加到购物车、或者直接购买结帐;
  2. 到了结帐的页面(收银台),给买家一个支付宝直接转帐的链接,并且告诉买家直接转帐到某个帐户;
  3. 支付宝的页面是通过javascript打开的,所以收银台能够定时监控得到当前页面的变化(即使监控不到也没有关系);
  4. 买家直接转帐,然后收银台通过js获取到转帐交易的ID号码,若无法获取,则请买家手动输入;
  5. 在服务器端,登录支付宝(通过CURL),通过ID检查支付金额,若和需求金额相同,则提交订单;
  6. 完成支付;

其实上面的方式应该可行,而且这个也不会给支付宝带来任何损失,因为通过程序模拟客户端登录支付宝和用户本身登录支付宝没有什么两样,而且直接转帐超过5000之后,支付宝照样要收取手续费的,因此这种思路仅仅曲线的解决办法,不存在利用漏洞之说。

或者,支付宝本身就会拒绝非正常浏览器的登录,不过用程序模拟浏览器登录应该也不是难事。

当然,paypal也可以利用同样的方法,不过由于paypal的商家工具没有一次性费用的说法,而是按照交易金额的百分比来收费,所以完全没有这个必要。

另外,支付宝的商家工具是不是也可以来个0收费,直接从交易金额中按照一定百分比来扣除?

随便谈谈:合理设置网站的登录密码

类归于: PHP, 网站技术 — 江东 @ 2009-03-03 15:06:30 才(8)条评论

n年前,也就是大学期间,cosbeta接了几个php程序的开发,客户居然有奇怪的要求,说用户的密码要能在后台查看,以方便给用户找回密码。后来,在cosbeta的苦口婆心的劝说下,客户终于同意了cosbeta的方案:将密码加密保存在数据库中,访客不可以取回密码,只能重设密码。这样的好处有三:1.保密用户资料,即使黑客攻破MySql,也无法查看用户的密码,因为密码已经加密过;2.保护用户隐私,即便是是数据库管理员也无法查看用户的密码,从而去猜测用户其他地方可能会使用的密码;3.让用户更加信任你的站点。

为此,cosbeta在这个blog刚建立的时候还发表了一篇日志,建议大家妥善分类管理自己的密码。然而在我们的身边,密码不分等级的人比比皆是,比如有人的OA密码就设置得非常复杂,我在想,要是哪一天公司的IT部门相关人员邪恶一下,将你的密码记录下来,然后因此去推测你的银行卡密码,岂不是很危险。

不过各位放心,cosbeta在保存用户密码时,一律采用了md5(username+password)的方式将密码进行了加密,然后才保存,所以在cosbeta开发的应用中,你是无法找回密码的,只能重设。当然,即使我在这里信誓旦旦的承诺,你依然也要考虑分等级来管理你的密码,永远不要在不信任的站点使用你最重要的密码。

php缩略图制作代码

类归于: PHP, 网站技术 — 江东 @ 2009-01-13 22:06:47 才(2)条评论

今天由于上传头像需要,找到了一个很好的程序,不敢独享,特此分享出来,它就是很多朋友可能需要的东西,php制作缩略图,来自这里,代码如下:

<?php
/*
* File: SimpleImage.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 08/11/06
* Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*
*/
class SimpleImage {
var $image;
var $image_type;
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>

使用起来也很简单,而且没有任何问题

$newfile = UPLOAD_DIR."/icons/".md5($_SESSION['USER']->email).".jpg";//上传文件保存的目录
$image = new SimpleImage();
$image->load($_FILES['icons']['tmp_name']);//上传的临时文件名
$image->resizeToWidth(80);设置宽度
$image->save($newfile);

xampp cgi的问题

类归于: PHP, 网站技术 — 江东 @ 2008-12-19 23:04:02 还没有评论

apache xampp由于要编写大文件(100M左右)上传程序,所以php就不胜任了,这个时候不得不把perl CGI给搬出来。

调试perl CGI的时候才发现本人在windows下的XAMPP无法正常运行CGI程序,总是显示500错误,花了时间,终于解决了,这里记录如下:

  1. 若没有修改apache conf文件,请将你的cgi文件放置在 htdocs/cgi-bin下;
  2. 程序的第一行一定要写正确perl的路径如:#!”F:\Perl\bin\perl.exe”;
  3. XAMPP自带的perl程序可能不好用,需要下载activeperl自行安装;
  4. 下载安装之后可能CGI.pm版本会落后,所以去下载CGI.pm-3.42.tar.gz或者更新的版本,到perl bin的目录下覆盖原来的内容;

完成以上4点,肯定可以解决XAMPP的CGI问题

shopex大大的进步了

类归于: PHP, 网站技术 — 江东 @ 2008-12-14 18:21:05 才(4)条评论

认识王总,所以接触了shopex。shopex是一个强大而简单的中文电子商城程序,因为它的强大,所以通过这个程序,不会写程序的人可以轻松在网络上开一家自己的网上商城。为什么说它简单,主要他的模板机制:

首先来说说shopex的模板是如何的简单。先给一个总体概念让大家感觉一下,那就是我大概用了不到半天的时间就能比较有信心的说自己能做这个模板了。模 板架构确实简单,比wordpress的模板机制都还要简单(也就是这个草率的保证让这个兄弟怀疑我是一个说大话的人)。shopex的每个页面都有对应 的模板框架文件,然后框架文件再去引用具体的模板文件,这样通过框架文件就可以很方便的修改页面的布局,而通过模板文件就可以自由的修改具体的内容,并且 模板文件还能被其他框架所引用,就相当于被include。这样一对一的模板系统当然就很简单了,所以制作shopex模板,上手是相当容易的(from 谈谈shopex)。

然而正是他的简单让cosbeta感到不适,因为 难易度*工作量=常数。 shopex模板设计是如此的简单以至于工作量非常大庞大,所以最终cosbeta没有再答应给王老板继续做下去了。

最近闲着没事,下载了一个新版的shopex来看看,发现新版的shopex有了很大的改变,模板基于smarty,编写更加灵活,工作量大大的减少了,而且可以嵌入php代码,很多功能就能更加容易的衍生出来了,新版本的shopex和旧版本相比,在模板引擎上已经有了一个质的飞跃。对于smarty这个东西,cosbeta在5年前都已经很熟悉了,所以用起来就更加的顺手了。

看来,或许因为这个原因,cosbeta又会再次和shopex打上交道!如此看来,基于smarty模板引擎的zen-cart应该没有多大优势可言了。

另外一件和shopex无关的小事情在这里一并记录下来:

如何给XAMPP加上zend Optimizer支持,其实XAMPP本身已经集成了zend Optimizer,只不过没有打开支持而已,所以给XAMPP添加zend Optimizer支持也是一件很容易的事情:

  1. 停止apache
  2. 打开xampp/php/php.ini 将 zend_optimizer.enable_loader = 0改成 zend_optimizer.enable_loader =1
  3. 打开xamp/apache/bin/php.ini  将 zend_optimizer.enable_loader = 0改成 zend_optimizer.enable_loader =1
  4. 重启apache即可

NetBeans IDE 6.5 For PHP

类归于: PHP, 网站技术 — 江东 @ 2008-11-27 09:45:01 只有1条评论

第一次接触到netbeans还是在大学的时候,一晃都已经快6年了,那时NetBeans仅仅支持java,是一个java开的集成开发环境,使用起来相当的方便,更好的是它是免费的。如今 Net Beans也支持php了,咱们来看看新版的NetBeans都有些什么特性吧:

新特性包括:一个针对Firefox 和IE的PHP、JavaScript调试的强健的IDE,以及支持Groovy 和Grails。NetBeans IDE 6.5还包含了大量对Java, Ruby on Rails, 和C/C++开发的增强。Java增进包括:内置对Hibernate的支持,允许引入Eclipse工程,及保存自动编译。 From CSDN

下载NetBeans IDE 6.5:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffaa.2CRg.DPBWEXO0

有关NetBeans IDE 6.5的更多信息:
NetBeans IDE 6.5特性:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffac.2CRg.DPHKEXQ0
NetBeans IDE 6.5指南和文档:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffae.2CRg.DPMeEXS0
指南视频:
http://communications1.sun.com/r/c/r?2.1.3J1.2U2.11J8XW.CCDJGu..T.Ffag.2CRg.DPSSEXU0

关于web方式上传大文件的问题

类归于: PHP, 网站技术 — 江东 @ 2008-11-14 20:36:25 才(4)条评论

最近对web方式上传大文件比较感兴趣,一直在尝试如何通过php上传大文件。不过你放心,cosbeta这篇文章不是告诉你如何修改php.ini中的post_max_size和upload_max_filesize,一来很多虚拟主机不允许你修改php.ini,即使允许修改,也不太可能让你将size修改到100M,同时php的max执行时间也会让你头痛不已,一句话,用php来实现传统方式的大文件上传是不太可能的。

那么如果一定要上传上100M的大文件是不是就一定没有办法了呢,未必,至少cosbeta就认为可以从两个方面来着手解决这个问题,一是客户端辅助,另外一个方式就是利用perl CGI。

客户端辅助方式是采用java applet或者activex辅助,将用户上传的文件在客户端分解成小文件,一个一个上传,然后在服务器端进行组合。当然applet和activeX各有优缺点,applet需要下载JRE,操作本地文件会有安全提示,会对用户体验不好。而activeX仅仅支持IE,这点众所周知。可惜cosbeta不熟悉activeX的编写,也不太喜欢applet,所以放弃了这个想法。

另外一个方法就是perl CGI了,这个网络现成的程序一大堆,所以这里我就不废话了。

今天用perl + ajax解决了带有进度条大文件上传,非常高兴,便记录下来之!

which is better : readfile, fpassthru, or header

类归于: PHP, 电子技术, 网站技术 — 江东 @ 2008-11-14 17:08:16 才(7)条评论

有这样一个需求摆在眼前:

  1. web服务器上有很多文件要提供给用户下载;
  2. 必须隐藏文件真实的url,防止盗链和未授权的下载;
  3. 不要太占用CPU资源

于是有朋友提出解决方法如下(假设代码在download.php文件中):

  1. 直接header(”location:src”);
  2. 通过php readfile
  3. 采用fpassthru读取文件然后输出

当然,我们知道,采用header是无法加密文件真实路径的,在某些客户端中,真实的路径会被完全重定向输出的,所以第一个方案无效。第二个和第三个方案是可行的,我们完全可以通过.htaccess控制访问文件所在的目录,所以对于保密和授权的需求来说是完全满足的,但是有一个问题,这两种方案会很占用CPU资源么?特别是读取上百兆的文件的时候?

Readfile_vs_include告诉我们,include文件和readfile对于内存和CPU时间的占用没有丝毫差别,所以采用readfile是可行的,下面引用的表格为证: (read on …)