最近评论

搭建PayPal Sandbox 在线支付开发测试环境

//
paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这些数据进行操作。
但代码的调试是一件很痛苦的事情,因为作为第三方开发人员,不可能开两个帐号,每次测试还要之间交易一些钱,所以Paypal专门开发了Sandbox给开发人员进行开发,首先到https://developer.paypal.com/ 注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这 种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录 Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少)。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击 Edit按钮,打开IPN,这里如果你使用的是固定的IPN Handle,可以直接将地址填入。
接下来,我们测试的时候,应该将Paypal接口的地址设置为https://www.sandbox.paypal.com/cgi-bin/webscr
最后基本的流程为:

用户在我们的网站上选择商品、放入购物车,然后检查准备支付
网站根据购物车中的商品,生成Paypal的支付表单(也是提交到上面IPN用的Paypal接口地址),包含了此次交易的一些信息(下次会专门找机会解释一下)。并在自己的数据库中生成一张订单记录。
Paypal在Session中记录下这些交易信息
用户用Paypal账户登录Paypal(Sandbox用Sandbox的虚拟帐号),复查明细,点击Pay按钮
Paypal进行交易处理,如果我们的Paypal收款帐号在接受帐款上没有什么问题(没有特别的需要在界面上“Accept”的地方),交易完成,那么Paypal会发送一个IPN,并发送提示邮件。
我们IPN Handler接受到信息,首先向Paypal进行校验,如果信息正确,然后根据信息和自己数据库中进行比对,如果无误,可以将支付信息保存,并修改订单状态。
然后Paypal会显示一个界面表示交易完成,此时如果用户点击“Return”按钮,Paypal会将用户送回我们网站指定地点。
我们网站迎接用户回来,向用户表示感谢,并进行提醒,给出订单号等等。

整个流程基本如下,不过其中有很多要注意的地方:

我们看到了,接口地址是https开头的,也就是要求使用SSL进行连接, 其实Paypal Sandbox可以使用http,但是最后实际的Paypal接口,不支持http协议,所以如果你用PHP写IPN Handler脚本的话,在验证信息的代码部分,如果简简单单使用fopen、HTTP_Request之类的工具是没用的,PHP的socks库不支持SSL,应该使用curl,有两种方法,一个是使用PHP扩展中的libcurl,Paypal官方发布的SDK中便是使用的这个方法,但Paypal的SDK非常复杂,如果想自己写,可以使用Snoopy,一个简单实用的PHP请求库(它自己说是模拟了浏览器的行为),而它使用的是Curl的可执行文件,通过管道获得结果,而非php的libcurl,所以自己cURL的主页上下载一个支持SSL的编译版本,可能还需要安装OpenSSL,不过对于Linux系统,可能应该会都带。
在支付表单中,可以自己设置notify_url字段,来指定此次交易的信息应该发送到哪个地方,这样就可以覆盖在Profile中我们的设置,另外,这个字段要进行urlencode。
我们得到的IPN信息中,status对应的便是交易状态,如Complete表示完成,首字母大写,而验证结果则是VERIFIEY或者INVALID,全部大写,具体的内容,可以查看Paypal官方的文档订单管理整合指南。

Paypal商家集成资源

•API接口一览
了解详情>>

•即时付款通知IPN
了解详情>>

•付款数据传输PDT
了解详情>>

•测试环境使用说明
了解详情>>

•图标放置规范
了解详情>>

•文档及开发包下载
了解详情>>

zen-cart模板设计

Zen Cart的模板设计比较复杂,需要一定的时间来熟悉。一旦你了解了它的结构,就会慢慢习惯了。
首先要阅读常见问答部分的:如何添加、制作新模板。 Zen Cart的设计没有什么特别,与以前设计HTML页面是一样的。只是整个页面分成了好几个部分,并加入了PHP代码。
通常,页面分为页眉(header),页脚(footer),边框(sideboxes)。所以设计页面的时候,要记住Zen Cart是如何组织这些页面的。
页面是通过CSS样式表来控制的。样式表控制表格单元的背景图案、字体的颜色和样式等等。所以,假如你需要修改边框标题栏的字体,那么查看样式表文件。
Zen Cart在页面添加图像有两种方式。可以使用图像目录的相对路径,或者在模板中用php变量定义图像。如果你使用https服务器,并且采用相对图像路径,那么https的图像目录下也要有同样的图像,否则https服务器很可能会给出警告提示。 www.444p.com
Zen Cart可以设置成任意的html/flash的界面,只是比通常的html页面的设计费时。你可以从修改缺省的模板开始,先修改CSS文件和三栏格式的界面。开始先采用不同的颜色,很快就可以设计出完全不同的风格。
最后,在设计模板前要先计划好你网页的内容,事半功倍。
下面是zen cart页面各部分相对应模板文件的一个列表:
 

文件路径
注释

index.php
主文件

includes/templates/[custom template folder]/common/html_header.php
页面的head部分

includes/templates/[custom template folder]/common/tpl_main_page.php
页面的body部分

includes/templates/[custom template folder]/common/tpl_header.php
所有页面的页眉

(column left)
 

includes/templates/[custom template folder]/common/main_template_vars.php
决定页面的内容部分,缺省为 ‘tmp_index_default.php’

首页 – 缺省

includes/templates/[custom template folder]/templates/tmp_index_default.php
首页模板文件

首页 – 显示分类

includes/templates/[custom template folder]/templates/tpl_index_categories.php
首页上显示分类时的模板文件

includes/modules/[custom template folder]/pages/index/category_row.php
选择要显示的分类

includes/templates/[custom template folder]/templates/tpl_index_category_row.php
显示分类

首页 – 显示指定分类

includes/templates/[custom template folder]/templates/tpl_index_product_list.php
首页上显示指定的分类时采用的模板文件

includes/modules/[custom template folder]/product_listing.php
将商品数据添加到数组

includes/templates/[custom template folder]/templates/tpl_modules_product_listing.php
显示商品数量和商品导航菜单

includes/templates/[custom template folder]/common/tpl_list_box_content.php
显示商品数组

商品信息页面

includes/templates/[custom template folder]/templates/tpl_product_info_display.php
显示单件商品信息

购物车页面

includes/templates/[custom template folder]/templates/tpl_shopping_cart_default.php
购物车页面

(column right)
 

includes/templates/[custom template folder]/common/tpl_footer.php
所有页面的页脚

zencart下载模板复制模板方法

首先说明的是,这里只是说明复制网站模板的理论,用于学习用途,复制并使用未经授权的模板是非法的。
第一次写这类说明,没有经验,欢迎大家指正、补充。
这里以zen cart或者osc的模板为例,其他的模板也是同样的方法。
1. 首先在你的模板目录下,建立一个新的模板,例如:\includes\templates\mytemplate\
复制\includes\templates\template_default下的所有目录和文件到新的目录中
2. 用文本编辑器修改\includes\templates\mytemplate\template_info.php,修改其中的名称、版本、作者等内容。
3. 在后台打开新的模板,然后再工具-外观控制中,点击重置
4. 获取网站模板的图片
用整站下载软件实现,例如Teleport Pro,下载全站的所有图形文件,要保留原站的文件结构。
图片通常都在/images目录下,将下载到的/images下的图形文件都复制到zen cart的/images目录下。
5. 获取网站模板的按钮
也可以用Teleport Pro下载所有按钮,通常是英文的,osc的按钮图片在/includes/languages/english/images/buttons目录下。
将下载的按钮保存到zen cart的按钮目录/includes/templates/mytemplate/buttons/english/ 和 /includes/templates/mytemplate/buttons/schinese/ 中,在schinese目录中的按钮,可以自己用图像处理软件转换成中文。
osc模板中,可供下载的按钮有:
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_address_book.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_add_address.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_back.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_buy_now.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_change_address.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_checkout.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_confirm_order.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_continue.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_continue_shopping.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_delete.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_edit_account.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_in_cart.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_login.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_notifications.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_quick_find.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_remove_notifications.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_reviews.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_search.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_shipping_options.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_tell_a_friend.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_update.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_update_cart.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/button_write_review.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/small_delete.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/small_edit.gif
http://www.domainname.com/osc/includes/languages/english/images/buttons/small_view.gif
类似的,zen cart模板的按钮有
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_add_address.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_back.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_buy_now.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_change_address.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_checkout.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_confirm_order.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_continue.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_continue_shopping.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_delete.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_download.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_in_cart.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_login.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_next.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_ppcheckout.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_prev.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_redeem.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_return_to_product_list.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_reviews.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_search.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_send.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_shipping_estimator.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_sold_out.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_sold_out_sm.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_submit.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_TellAFriend.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_tell_a_friend.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_unsubscribe.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_update.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_update_cart.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/button_write_review.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/small_delete.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/small_edit.gif
http://www.domainname.com/zencart/includes/languages/english/images/buttons/small_view.gif
上面的列表中,自己替换www.domainname.com/osc 或者 www.domainname.com/zencart 为你需要复制的网站地址。
6. 获取网站模板的CSS文件。osc的stylesheet.css文件在根目录下。stylesheet.css文件的具体路径在查看页面源代码时能看到。
打开获得的stylesheet.css文件,剪贴到/includes/templates/mytemplate/css/stylesheet.css文件中,追加在原来的css文件后,不要覆盖原有的内容。
7. 打开需要复制的zen cart或者osc网站,查看源代码。(有些网站不允许你查看源代码,要一些技巧,这里就不详细讨论这个问题了)
8. 在源代码中复制
<!– header //–> 到 <!– header_eof //–> 之间的内容作为\includes\templates\mytemplate\common\tpl_header.php,删除该文件内原来的内容。
<!– footer //–> 到 <!– footer_eof //–> 之间的内容作为\includes\templates\mytemplate\common\tpl_footer.php,删除该文件内原来的内容。
(有些模板把边框部分的显示也放到header.php中,那么你需要找出属于边框的部分并删除)
9. 现在,整个网站的外观已经基本出来了。需要替换上面的这两个文件内的链接,这里是模板转换的关键。根据下面的模式替换,第一行是需要替换的类似链接,第二行是正确的代码:
http://www.domainname.com/osc/index.php
<?php echo zen_href_link(FILENAME_DEFAULT); ?>
http://www.domainname.com/osc/account.php
<?php echo zen_href_link(FILENAME_ACCOUNT, ”, ‘SSL’); ?>
http://www.domainname.com/osc/shopping_cart.php
<?php echo zen_href_link(FILENAME_SHOPPING_CART, ”, ‘NONSSL’); ?>
http://www.domainname.com/osc/checkout_shipping.php
<?php echo zen_href_link(FILENAME_CHECKOUT_SHIPPING, ”, ‘SSL’); ?>
http://www.domainname.com/osc/shipping.php
<?php [...]

zencart的gspay信用卡付款模块

网上搜索zencartzencart的gspay信用卡付款模块,均不提供下载。官方要申请gspay后登陆后台方可下载。现提供如下
gspay-zencart-module下载
 

E-start Your Web Store with Zen Cart 在线电子书

google就是强大,这是zencart出的书要usd的,网上都是部分预览。这个是完整版,可以在线查看,但无法保存下来。
http://books.google.com/books?id=J-VC1O3O-ecC&printsec=frontcover&dq=zen+cart&ei=4yMdSYueIYX-kwS0nqzTCQ#PPP1,M1

zencart客户登陆提示”There was a security error when trying to login”

    该问题是由于使用模板文件比当前系统版本早(1.38)。1.38版本增加了相应的安全功能来防止外部登陆。所以解决的方法就是在当前使用的includes\templates\YOUR_TEMPLATE\templates\tpl_login_default.php参照默认模板里的tpl_login_default.php修改。或者直接从默认模板中复制替换即可。

nps外卡支付错误描述:008

今天公司开通了nps国外信用卡支付。于是在zencart上安装了nps外卡支付模块。到商家管理系统里把默认的密钥123456改为自定义的密钥。在zencart后台填上NPS ID和NPS MD5 key 测试一下,结果出现错误描述:008。联系nps技术支持。其实很简单,就是密钥只能是有abcdef和数字组成,字符数>=16,而我的密码包含了其它字母。按要求修改密钥,重新测试,一切ok。

zen-cart paypal ipn流程

“IPN” = 及时付款通知 “Instant Payment Notification” …即PayPal的标准支付方式
1. 客户在您的网店下订单
2. 确认订单后,转向PayPal网站,客户输入资料并付款
3. 付款后点击链接(或等待5秒)返回您的网店
同时,在上面第2步与第3部之间,PayPal服务器执行如下操作:
1. Paypal服务器给您的网店发送请求,网店接收请求的地址为/ipn_main_handler.php 页面
2. 您的服务器接收请求的端口为 80 和 443
3. 您的服务器接收到请求后,核对PayPal发送的数据与网店的数据一致
4. 如果通过检验,后台生成订单,并通知PayPal服务器。这些通讯是通过端口 80 或 443 双向进行的
5. 说明:如果没有成功,PayPal服务器会持续发送 IPN 通知约4天。只有通知成功后,才会生成客户的订单。
转载来源:http://www.zen-cart.cn/forum/topic4799.html

paypal服务状态

查看最新paypal服务状态
http://www.pdncommunity.com/blog?blog.id=mts_updates

zen-cart1.38中文版登陆提示500错误

系统环境:win2008+iis7+php5
zen-cart 版本 1.38 utf-8
此问题困扰了我很久,开始以为是服务器资源占用太大。可是其它zen-cart网站都可以正常登陆。打开iis7的显示错误信息选项(现在给忘了怎么设置的,orz)发现是错误在/includes/classes/cache.php 174行,提示执行超时。原来是在while循环里超时了。于是在该循环后面加入一行 var_dump($zv_file);
看了语句好像是/cache 目录文件过多。打开/cache目录。oh my god,exploer 当时就不响应了。windows统计了一下文件数量7万多个。难怪会超时登陆不了。赶紧删除所有txt文件。对这些文件等产生感觉是在后台设置了什么。登陆后台,configuration,日志选项,果然是这里,把里面所有选项都关闭了。一试,真不产生那些txt文件了。困扰了几天的问题终于明白了