电子商务系统使用paypal支付接口的程序流程及通信接口

 

magento使用paypal支付接口测试

关于paypal在线支付的信息可以直接访问http://www.paypal.com。

一般电子商务系统实现的流程
如下: 
客户在系统内下订单 -> 将订单的金额信息提交到paypal网站 -> 客户在paypal上付款 -> paypal将客户的付款完成信息发送给电子商务系统 -> 系统收到paypal信息后确定客户订单已经付款 -> 进行发货等后续流程。

 

从这个流程中可以看到系统与paypal的通信尤其关键,可以实现订单的自动付款确认。 

(1)如何调用paypal接口
?(将订单的金额信息提交到paypal网站) 

<form name="paypal" action
="https://www.paypal.com/cgi-bin/webscr
" method="post">

<input type="hidden" name="cmd
" value="_xclick">

<input type="hidden" name="business
" value="paypal@xxx.com"><!--这里填写你的paypal账户email-->

<input type="hidden" name="item_name
" value="order information"><!--这里填写客户订单的一些相关信息,当客户连到paypal网站付款的时候将看到这些信息-->

<input type="hidden" name="amount
" value="220.00"><!--订单的总金额信息-->

<input type="hidden" name="currency_code
" value="USD"><!--订单总金额对应的货币类型 ,客户可以用其他币种来付款,比如这里订单币种是美元USD,客户可以用欧元EUR来付款,由paypal根据当前汇率自动实现币种之间的换算-->  

<input type="hidden" name="on0" value="customerId"><!-- 自定义的参数1 -->

<input type="hidden" name="os0" value="stephen"><!-- 对应上面自定义参数1对应的值 -->

<input type="hidden" name="on1" value="address"><!-- 自定义的参数2 -->

<input type="hidden" name="os1" value="shanghai china"><!-- 对应上面自定义参数2对应的值 -->

<input type="hidden" name="notify_url
" value="http://www.xxx.com/notifyurl.jsp?order_id=23876412"><!--这里告诉paypal付款的通信url,即当客户付款后调用这个url通知系统-->

<input name="Paypal" type="button" value="Go to Paypal" onclick="javaScript:this.form.submit();"></td>

</form>

在生成上面的paypal表单时,其中的[cmd],[action],[business],[amount],[currency_code],[notify_url]
参数设置绝对不能出错,[cmd]和[action]指定paypaly接口类型,[business]出错,你将收不到客户的付款,[amount]与[currency_code]关系到订单的金额,[notify_url]是系统与paypal的付款通知接口url。  


当客户下单后看到上面的页面后,就可以通过设置的按钮[Go to Paypal]连接到paypal.com网站,然后登录并进行付款。 (但一般我们会通过js触发表单的自动提交)

 

 

(2)paypay
将付款信息返回给系统 

当客户付款后,paypal就会自动调用上面表单提供的[notify_url]

//系统接收成功返回200 OK 否则返回fail

 

如果确认收到paypal发来的客户付款信息,则返回"200 OK",这样子paypal就知道系统已经收到信息了;否则返回"fail",这样paypal会过一段时间后再次发来。其实,只有当paypal收到"200 OK"的返回信息后才会停止发送付款信息,否则会自动的每隔一段时间就调用上面 

的[notify_url]通信接口。 

 

 

(3)系统处理paypal
发来的付款信息

程序流程
为:

//判断paypal付款账户是否正确

//判断订单号  

//循环收取paypal发来的所有参数信息  

//这里添加对收到信息的处理:一般是将这些信息存入数据库,然后对客户的订单进行处理.   

 

这样系统可以自动对客户订单的付款情况进行跟踪,更快捷的进行订单处理。 

 

 

Ps,

paypay允许的币种 
AUD Australian Dollar 
CAD Canadian Dollar 
CHF Swiss Franc 
CZK Czech Koruna 
DKK Danish Krone 
EUR Euro 
GBP Pound Sterling 
HKD Hong Kong Dollar 
HUF Hungarian Forint 
JPY Japanese Yen 
NOK Norwegian Krone 
NZD New Zealand Dollar 
PLN Polish Zloty 
SEK Swedish Krona 
SGD Singapore Dollar 
USD U.S. Dollar 

 

paypal返回参数

mc_gross交易收入
address_status地址信息状态
paypal_address_idPaypal地址信息ID
payer_id付款人的Paypal ID
tax税收
address_street通信地址
payment_date交易时间
payment_status交易状态
charset语言编码
address_zip邮编
first_name付款人姓氏
address_country_code国别
address_name收件人姓名
custom自定义值
payer_status付款人账户状态
business收款人Paypal账户
address_country通信地址国家
address_city通信地址城市
quantity货物数量
payer_email付款人email
txn_id交易ID
payment_type交易类型
last_name付款人名
address_state通信地址省份
receiver_email收款人email
address_owner尚未公布/正式启用
receiver_id收款人ID
ebay_address_id易趣用户地址ID
txn_type交易通告方式
item_name货品名称
mc_currency货币种类
item_number货品编号
payment_gross交易总额[只适用于美元情况]
shipping运送费

magento在多个linux服务器配置UTC时间同步流程

1.查看系统是否安装ntp 安装命令为:yum install ntp
2.apf -f -------关闭防火墙
3.备份clock和localtime
cp /etc/localtime /etc/localtime.bak
cp /etc/sysconfig/clock /etc/sysconfig/clock.bak
rm /etc/localtime
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
vi /etc/sysconfig/clock 配置如下
ZONE="UTC"
UTC=true
ARC=false
4.ntpdate time.windows.com或ntpdate clock.nc.fukuoka-u.ac.jp -----同步UTC时间
5.clock --systohc -----系统时间同步硬件时间
6.date ----命令查看时间是否正确
7.apf -s -------开启防火墙
 

magento网站后台无法打开解决办法

一批magento网站从win系统转移到linux系统后,出现网站后台无法登录,提示错误:

Recoverable Error: Argument 1 passed to Mage_Eav_Model_Entity_Abstract::setConnection() must be an instance of Zend_Db_Adapter_Abstract, boolean given, called in /var/www/html/uggbootsky.com/app/code/core/Mage/Sales/Model/Mysql4/Order.php on line 44 and defined in /var/www/html/uggbootsky.com/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 151


判断错误原因可能是:由于Win系统和Linux系统下字符格式造成的问题,无法获取到订单配置文件,之前都是在Win系统中,直接修改配置,一些 xml 的配置文件。 怀疑这些文件格式不兼容,到Linux下无法读取,所以,无法打开订单表。

 

解决办法

1、建立一个新的网站程序。

2、将旧站的模板,配置,图片等等拷贝到新目录中。(注意要拷贝 .htaccess 文件)。

3、使用旧库,及相同的加密Key。

4、进入后台,重新设置样式。

5、新网站程序能正常进入后台,操作正常,订单,目录,商品资料无丢失。

6、问题解决!

 

Ps, 另外这种解决方案会造成的magento安装的一些新闻插件、支付插件等插件的丢失,需要重新安装。

有趣的一句vbs脚本


CreateObject("SAPI.SpVoice").Speak "I love you" 

知道上面那句vbs语句有何作用吗?呵呵,也许你懂的~ 还没尝试过的就动手试试!

新建一个文本,复制进上面那句话,然后保存成后缀名为.vbs的文件,双击运行~~  

怎么样? 明白这句话的作用了吧?

不知道你听出来的声音是男声还是女生呢?是女声的话.....

嘿嘿 , 很邪恶的想...如果把"I love you“替换成某些词句...  ……&*%……%……&%

呵呵,其实发出男声女声是根据系统的语音库,另外如果系统装有中文语音库或其他语言语音库的话也是能发出想对内容的声音的。

另外还可以通过rate来调整语音的速度,如下,

oSa = Createobject("SAPI.SpVoice")  
oSa.rate=6
oSa.speak("oSAPI.rate=6:这是调节语音速度的属性!")  

更多应用可以去查阅相关手册~  欢迎一起交流有趣的东西~~ 哈哈

深入理解Magento的配置系统

第一章 - Magento强大的配置系统

Magento的配置系统就像是Magento的心脏,支撑着Magento的运行。这套配置系统掌管着几乎所有“module/model/class/template/etc”。它把整个Magento系统抽象出来,用一个配置文件来描述。这里的“配置文件”并不是一个物理上存在的文件,而是Magento根据当前的系统状态动态生成的一段XML。大数的PHP开发者并不习惯于这样抽象,因为它增加的编程的复杂性。但是这样的抽象提供了无与伦比的灵活性,允许你覆盖几乎任何系统的默认行为。

首先,让我们写一个简单的插件来看看这个所谓的“配置文件”长什么样。虽然我已经提供的现成的代码,但是还是建议你自己建立这个插件,把整个流程走一遍有助于你的理解。
设置插件目录结构

我们将要创建一个Magento的模块【译者注: Magento的插件不叫plug-in,叫module,翻译成模块】。Magento的模块phpxml文件组成,目的是扩展或者覆盖系统的行为,比如为订单增加数据模型,更改一个方法,或者增加一个全新的功能。【译者注:Magento自带的那些功能也都是基于模块的,比如用户注册,商品展示,结账流程等等。Magento给我的感觉就是一切皆模块,和Eclipse的插件体系结构有点像】

数Magento的系统模块的结构和我们将要构建的插件的结构是一样的。Magento的系统模块在以下目录
app/code/core/Mage
每一个子目录都是一个单独的模块。这些模块是由Magento官方开发的。我们安装完Magento以后,所使用功能就是来自这些模块。我们自己创建模块应该放在如下目录
app/code/local/Packagename
“Packagename”应该是一个唯一的字符串" title="字符串">字符串,用来标识你的代码。通常人们使用公司名字作为Packagename,比如
app/code/local/Microsoft
由于我在做我自己的Magento项目,我将使用我自己的域名“Alanstormdotcom”。 然后,我们要创建以下目录结构
app/code/local/Alanstormdotcom/Configviewer/Block
app/code/local/Alanstormdotcom/Configviewer/controllers
app/code/local/Alanstormdotcom/Configviewer/etc
app/code/local/Alanstormdotcom/Configviewer/Helper
app/code/local/Alanstormdotcom/Configviewer/Model
app/code/local/Alanstormdotcom/Configviewer/sql
你的插件并不一定需要包含以上所有的目录,但是为了以后开发方便,我们还是在一开始就把目录创建好。接下来我们要创建两个文件,一个是config.xml,放在etc目录下面
app/code/local/Alanstormdotcom/Configviewer/etc/config.xml
文件内容如下
<config> 
<modules>
       <Alanstormdotcom_Configviewer>
         <version>0.1.0</version>
       </Alanstormdotcom_Configviewer>
</modules>
</config>
第二个文件需要在如下位置创建
app/etc/modules/Alanstormdotcom_Configviewer.xml
第二个文件应该遵循如下命名规则“Packagename_Modulename.xml”,文件内容如下
<config>
<modules>
       <Alanstormdotcom_Configviewer>
         <active>true</active>
         <codePool>local</codePool>
       </Alanstormdotcom_Configviewer>
</modules>
</config> 
我们先不管这些文件是干什么的,以后会解释。建立好这两个文件以后,你的模块的骨架就已经完成了。Magento已经知道你的模块存在,但是现在你的模块不会做任何事情。我们来确认一下Magento确实装载了你的模块
清空Magento缓存
后台管理界面,进入 System->Configuration->Advanced
展开“Disable Modules Output”
确认“Alanstormdotcom_Configviewer”显示出来了
如果你看到“Alanstormdotcom_Configviewer”,那么恭喜你,你已经成功创建了你第一个Magento模块
创建模块逻辑

我们之前创建模块不会做任何事情,下面我们来为这个模块加入逻辑
1. 检查“showConfig”查询字符串" title="字符串">字符串是否存在
2. 如果“showConfig”存在,那么检查“showConfigFormat”查询字符串" title="字符串">字符串是否存在
3. 如果“showConfigFormat”存在,那么输出指定格式配置信息,否则输出默认格式配置信息
4. 终止执行流程
首先更改我们的config.xml文件
<config>
<modules>...</modules>
<global>
       <events>
         <controller_front_init_routers>
            <observers>
                   <alanstormdotcom_configviewer_model_observer>
                     <type>singleton</type>                         
                     <class>Alanstormdotcom_Configviewer_Model_Observer</class>
                     <method>checkForConfigRequest</method>
                   </alanstormdotcom_configviewer_model_observer>
            </observers>
         </controller_front_init_routers>
       </events>
</global>
</config>
然后创建如下文件
Alanstormdotcom/Configviewer/Model/Observer.php
输入以下内容
<?php
class Alanstormdotcom_Configviewer_Model_Observer {
       const FLAG_SHOW_CONFIG = 'showConfig';
       const FLAG_SHOW_CONFIG_FORMAT = 'showConfigFormat';    

       private $request;

       publicfunction checkForConfigRequest($observer) {       
         $this->request = $observer->getEvent()->getData('front')->getRequest();
         if($this->request->{self::FLAG_SHOW_CONFIG} === 'true'){
            $this->setHeader();
            $this->outputConfig();
         }
       }

       private function setHeader() {
         $format" title="format">format = isset($this->request->{self::FLAG_SHOW_CONFIG_FORMAT}) ?
         $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : 'xml';                               
         switch($format" title="format">format){
            case 'text':
                   header("Content-Type: text/plain");
                   break;
            default:
                   header("Content-Type: text/xml");
         }          
       }

       private function outputConfig() {          
         die(Mage::app()->getConfig()->getNode()->asXML());    
       }
}
?>
好了,代码编辑结束。清空你的Magento缓存,例如输入如下URL
//sjolzy.cn/?showConfig=true
【译者注: 根据文中的配置,不难看出任何指向Magento的URL加了“?showConfig=true”以后,都会输出同样的内容,正常的执行流程会被终止。】
配置文件分析

打开上述URL,你应该看到一个巨大的XML文件。这个文件描述了当前Magento系统状态。它列出了所有的模块数据模型,事件,监听器等等。举个例子,如果你搜索如下字符串" title="字符串">字符
Configviewer_Model_Observer
你会发现刚刚你创建的那个被列出来了。Magento会解析每个模块config.xml,并把它们包含在这个全局配置中。
这个配置文件有啥用?

到目前为止,我们所作的事情似乎没什么意义,但是这个配置文件却是理解Magento的关键因素。你创建的每一个模块都会被加到这个配置文件中,任何时候,你需要调用一个系统功能的时候,Magento都会通过这个配置文件来查询相应的模块功能。举个简单的例子,如果你懂MVC的话,你应该和“helper class”之概念的打过交道
$helper_salesrule = new Mage_SalesRule_Helper();
Magento抽象了PHP的声明方式。在Magento系统中,上面的代码等同于
$helper_salesrule = Mage::helper('salesrule');
Magento将通过以下逻辑来处理这行代码
配置文件查找<helpers />标签
在<helpers />里面查找 <salesrule />标签
在<sales />里面查找 <class />标签
实例化从#3找到的(Mage_SalesRule_Helper)
Magento总是通过配置文件获得名,这个逻辑看起来有些复杂,但这样做的优点也很明显,我们可以不需要更改Magento的代码就能更改Magento的核心功能。【译者注: 在这个例子中,我们可以通过修改配置文件用我们自己的SalesRule_Helper替换原来那个】这种高度抽象的编程方式php中并不常见,但是它可以让你清晰的扩展或者替换系统的某一部分。