PayPal支付接口的PHP开发方式

 

解析PayPal支付接口的PHP开发方式

大家都知道PHP代码的便捷之处和用法,那么今天我们就向大家详细的讲解如何运用PHP来开发PayPal支付接口的相关内容,希望对大家有所帮 助。PayPal 快速、安全而又方便,是跨国交易的首选在线付款方式。现在PayPal支付接口可以和国内大部分信用卡关联,可以实现国人的跨国交易收支。

所谓paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal 的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这 些数据进行操作。

开设Sandbox帐号

但代码的调试是一件很痛苦的事情,因为作为第三方开发人员,不可能开两个帐号,每次测试还要之间交易一些钱,所以Paypal专门开发了 Sandbox给 开发人员进行开发,首先到https://developer.paypal.com/注册一个开发帐号,好了之后再进入Sandbox建立测试用的 Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这 种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录 Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少 920-203 920-533 )。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击Edit按钮,打开IPN,这里如果你使用 的是固定的IPN Handle,可以直接将地址填入。

接下来,我们测试的时候,应该将Paypal接口的地址设置为https://www.sandbox.paypal.com/cgi-bin /webscr

基本的流程

当客户向您付款时,PayPal将向位于指定 URL (type=”hidden” name=”notify_url” value=” “)的服务器发送一个通知。此通知中将包括您的客户的所有付款信息(例如,客户名称、金额),以及一段加密代码。当服务器收到通知时,它随后会将该信息 (包括加密代码)发送回安全的PayPal URL。PayPal将通过检查加密字符串对交易进行身份验证。这种将 IPN 数据传回PayPal的操作防止了“欺骗”,因此您可以确保 IPN 来自PayPal。在进行验证时,PayPal会将其合法性的确认信息发送回您的服务器。

提示:要启用即时付款通知,您将需要输入一个 URL,通过它您可以接收到来自您的用户信息的通知。

启用了即时付款通知后,每次当您接收付款时您的服务器都会收到一个通知,此通知将以隐藏的“FORM POST”的方式发送到指定的 URL,并将包括所有付款信息。此页面的底部列出了通知的 FORM 变量。

每次收到来自PayPal的 IPN 时,您必须在实施订单之前完成如下所述的通知确认过程。确认列出的信息将可确保交易合法。

通知确认IPN

为了确保付款已进入您的PayPal账户,您必须验证用作“receiver_email”的电子邮件地址是否已在您的PayPal账户中注册并得 到确认。

服务器收到即时付款通知后,您将需要通过构建一个发送到PayPal的 HTTP POST 对其进行确认。您的 POST 应发送到https://www.paypal.com/cgi-bin/webscr

您必须完全按照收到表单变量时的原样发送所有收到的表单变量。您还需要将一个值为“_notify-validate”的名为“cmd”变量(例 如,cmd=_notify-validate)附加到 POST 字符串。

PayPal将回复该 POST,并在回复的正文中包含一个单词“VERIFIED”或“INVALID”。当您收到 VERIFIED 回复时,您需要在实施订单之前执行若干检查:

确认“payment_status”为“Completed”,因为系统也会为其他结果(如“Pending”或“Failed”)发送 IPN。

检查“txn_id”是否未重复,以防止欺诈者重复使用旧的已完成的交易。

验证“receiver_email”是已在您的PayPal账户中注册的电子邮件地址,以防止将付款发送到欺诈者的账户 。

检查其他交易详情(如物品号和价格),以确认价格未改变完成了以上检查后,您可以使用 IPN 数据更新您的数据库,并处理购物。

如果收到“无效”通知,则应将其视为可疑通知,并应对其进行调查。

主要参数:

向PayPal提交粘贴代码时,应包括以下 4 个隐藏变量及一张图片,这就是说,您粘贴到PayPal的最短必需代码应如下:

 <form action="https://www.paypal.com/row/cgi-bin/webscr" method="post">
 <input type="hidden" name="cmd" value="_xclick">  // "_xclick" 立即购买
 <input type="hidden" name="business" value="you@youremail.com">   //PayPal账户上的电子邮件地址
 <input type="hidden" name="item_name" value="Item Name"> //物品名称(或购物车名称)
 <input type="hidden" name="currency_code" value="USD"> //定义币种以标示货币变量 值可以为 "USD"、"EUR"、"GBP"、"CAD"、"JPY"。
 <input type="hidden" name="amount" value="0.00"> //物品的价格(购物车中所有物品的总价格,因为是_Xclick模式)
<input type="image" src="http://www.paypal.com/zh_XC/i/btn/x-click-but01. gif" name="submit" alt="请使用PayPal付款!">
 </form>

可用变量

business 您的PayPal账户上的电子邮件地址

quantity 物品数量。大于 1 时,会与金额相乘

item_name 物品名称(或购物车名称)。必须是字母数字字符,最多为 127 个字符

item_number 用于跟踪付款的可选传递变量。必须是字母数字字符,最多为 127 个字符

amount 物品的价格(购物车中所有物品的总价格)

shipping 该物品的运送成本

shipping2 每增加一件物品所需的运送成本

handling 手续费

tax 基于交易的税额。如果使用该变量,传递值将覆盖所有用户信息税收设置(不管买家所在位置)。

no_shipping 送货地址。如果设为 “1″,则不会要求您的客户提供送货地址。该变量为可选项;如果省略或设为 “0″,将提示您的客户输入送货地址

cn 可选标签,会在提示栏上显示(最多 40 个字符)

no_note 为付款加入提示。如果设为 “1″,则不会提示您的客户输入提示。该变量为可选项;如果省略或设为 “0″,将提示您的客户输入提示。

on0 第一选项栏名称。最多 64 个字符

os0 第一组选项值。最多 200 个字符。”on0″ 必须定义,以便识别 “os0″。

on1 第二选项栏名称。最多 64 个字符

os1 第二组选项值。最多 200 个字符。”on1″ 必须定义,以便识别 “os1″。

custom 决不会向您的客户显示的可选转递变量。可用于跟踪存货

invoice 决不会向您的客户显示的可选转递变量。可用于跟踪账单号

notify_url 仅与 IPN 一起使用。发送 IPN Form Post 的互联网 URL

return 您的客户完成付款后将返回的互联网 URL

cancel_return 您的客户取消付款后将返回的互联网 URL

image_url 您要用作图标的图片的互联网 URL,图片大小为 150 X 50 像素

cs 设置您的付款页面的背景色。如果设为 “1″,背景色将为黑色。该变量为可选项;如果省略或设为 “0″,背景色将为白色

扩展变量

PayPal 允许您粘贴扩展变量,条件是将改变以下 “cmd” 值:

到:

通过上述 “cmd” 值修改,您还可使用以下变量:

扩展变量

email 客户的电子邮件地址

first_name 客户的名。必须是字母数字字符,最多为 32 个字符

last_name 客户的姓。必须是字母数字字符,最多为 64 个字符

address1 客户地址所在国家或地区。必须是字母数字字符,最多为 100 个字符

address2 客户地址第二行。必须是字母数字字符,最多为 100 个字符

city 客户地址所在城市。必须是字母数字字符,最多为 100 个字符

state 客户地址所在州。必须是正式的 2 个字母缩写

zip 客户地址的邮政编码

night_phone_a 客户夜间联系电话号码的区号

night_phone_b 客户夜间联系电话号码前三位

day_phone_a 客户白天联系电话号码的区号

day_phone_b 客户白天联系电话号码前三位

提示:若要更改”用户信息”中的默认运费和手续费设置,请转至您的用户信息,编辑您的运费计算,然后点击”允许采用基于交易的运费”复选框。

将单个物品传递给PayPal

如果您的第三方购物车可设置成向PayPal传递单个物品,有关物品的信息将加入买家和卖家的记录日志和系统通知中。要加入该物品的信息,您需要将 HTML 格式元素粘贴至PayPal购物车流程的新版本。该过程与 #1 节”将总购物车数量传递给PayPal”描述的非常相似,不同之处在于:

将 “cmd” 变量设置到 “_cart”

更换必要的 HTML 行

添加称为 “upload” 的新变量

在 <表格> 和 标签之间新增以下行:

定义物品明细

对于以下各特定物品参数,定义与通过您的合作商购物车购买的各物品对应的一组新值。将 “_x” 附加到变量名称,其中 x 是物品号码,从 1 开始,每加入一物品增加一。

item_name_x (物品 #x 需要)购物车中物品 #x 的名称。必须是字母数字字符,最多为 127 个字符

item_number_x 与购物车中物品 #x 关联的可选传递变量。必须是字母数字字符,最多为 127 个字符

amount_x (物品 #x 需要)物品 #x 的价格

shipping_x 运送物品 #x 的第一件(数量 1)的成本

shipping2_x 每增加一件运送物品 #x(数量 2 或更多)所需的运送成本

handling_x 物品 #x 的处理成本

on0_x 物品 #x 的第一选项栏名称。最多 64 个字符

os0_x 物品 #x 的第一组选项值。最多 200 个字符。”on0_x” 必须定义,以便识别 “os0_x”。

on1_x 物品 #x 的第二选项栏名称。最多 64 个字符

os1_x 物品 #x 的第二组选项值。最多 200 个字符。”on1_x” 必须定义,以便识别 “os1_x”。

为购物车中每件物品重复此设定

为您的买家购物车中的各物品加入以上表格中的一组必需的变量和任何选项变量。购物车中的第一物品必须用以 “_1″ 结束的参数定义,如 “item_name_1″、”amount_1″ 等。同样,第二物品应用变量 “item_name_2″、”amount_2″ 等命名。提示:”_x” 值必须以一为单位按序递增,以便识别。如果从 item #1 跳到 item #3 而不定义 item #2,则第三个物品会被忽略。

要指定币种:所有货币变量(金额、运费、运费 2、手续费、税款)将以粘贴在付款上的 “currency_code” 变量指定的币种显示。因为其不是随物品不同的,无需向变量名称附加 “_x”。如果没有粘贴 “currency_code” 变量,我们将假定所有货币变量值为美元。.

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

magento使用paypal支付接口测试

Magento修改邮件模板内容

Magento
默认邮件模板
都是带着官方的标志和一些官方的基本信息。为了建立品牌形象我们需要把邮件模板中的所有官方信息换成自己的信息。修改步骤如下:


1、找到Magento的邮件模板文件(这里以 en_US为例),如下列文件:
magento\app\locale\en_US\template\email\account_new.html:
magento\app\locale\en_US\template\email\admin_password_new.html:
magento\app\locale\en_US\template\email\newsletter_subscr_confirm.html:
magento\app\locale\en_US\template\email\order_creditmemo.html:
magento\app\locale\en_US\template\email\order_creditmemo.html:
magento\app\locale\en_US\template\email\order_invoice.html:
magento\app\locale\en_US\template\email\order_invoice.html:
magento\app\locale\en_US\template\email\order_new.html:
magento\app\locale\en_US\template\email\order_new.html:
magento\app\locale\en_US\template\email\order_shipment.html:
magento\app\locale\en_US\template\email\order_shipment.html:
magento\app\locale\en_US\template\email\order_update.html:
magento\app\locale\en_US\template\email\password_new.html:
magento\app\locale\en_US\template\email\wishlist_share.html:
(部分路径在app\locale\en_US\template\email\sales\
)
这 里的en_US是语言文件,这里修改的是英文界面下的邮件模板

2、修改信息(这里以订单确认信为例)

换logo的方法:把\order_update.html: 里原有的logo地址改为 -> {{store url=""}}skin/frontend/default/default/images/logo.gif

 

添加订单时间,变量是:{{var order.created_at}}

 

修改网站名称Main Website Store:这个世界在后台System - Manage Stores那边,更改Store Name就可以。

 

其他的林林总总也是修改或带变量,在修改Magento邮件模板
的时候千万不要写死内容。。不然后期维护麻烦

用PHP建立XML-RPC的Web Sevice系統

PHP 中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是 PHP 4还是PHP 5,都已经默认集成了XML-RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML-RPC的协议交互,如果没有xmlrpc扩展,建议使用PEAR::XML-RPC扩展。
Web Service介绍

Web Service就是为了异构系统的通信而产生的,它基本的思想就是使用基于XML的HTTP的远程调用提供一种标准的机制,而省去建立一种新协议的需求。目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。 XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。

我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更详细内容,建议参考手册。

 

安 装xmlrpc扩展

如果你的系统中没有安装xmlrpc的php扩展,那么请正确安装。

在Windows平台下,首先把PHP安装目录下的扩展php_xmlrpc.dll放到C:\Windows或者C:\Winnt 目录下,(PHP4的扩展在C:\php\extensions目录中,PHP5的扩展在C: \php\ext目录中),同时在C:\Windows\php.ini或者C: \Winnt\php.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。

在Unix/Linux平台下,如果没有安装xmlrpc扩展,请在重新编译PHP,在configure的时候请加入 --with-xmlrpc 选项,然后查看phpinfo()看是否正常安装xmlrpc。

(注意:以下操作都是建立在xmlrpc扩张正常安装前提下,请务必正确安装。)

 

XML-RPC工作原理

XML-RPC大致就是整个过程就是使用XML 来进行通信。首先构造一个RPC 服务器端用来出来从RPC客户端传递过来的使用XML封装的请求,并且把处理结果通过XML的形式返回给RPC客户端,客户端就去分析XML获取自己需要 的数据。

XML-RPC的服务器端必须有现成的函数提供给客户端调用, 并且客户端提交的请求中的函数和方法必须和服务器端的一致,否则将无法获取所需要的结果。

下 面我进行简单的代码来描述整个过程。

 

XML-RPC实践

服务器端使用xmlrpc_server_create函数产生一个服务器端,然后把需要需要暴露的RPC调用接口进行注册,接受 RPC客户端POST过来的XML数据,然后进行处理,处理结果通过XML的形式显示给客户端。

代码如下: rpc_server.php

<?php

/**

* 函数:提供给RPC客户端调用的函数

* 参数:

* $method 客户端需要调用的函数

* $params 客户端需要调用的函数的参数数组

* 返回:返回指定调用结果

*/

function rpc_server_func($method, $params) {

$parameter = $params[0];

if ($parameter == "get"){

$return = ''This data by get method'';

}else{

$return = ''Not specify method or params'';

}

return $return;

}

//产生一个XML-RPC的服务器端

$xmlrpc_server = xmlrpc_server_create();

//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数

xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");

//接受客户端POST过来的XML数据

$request = $HTTP_RAW_POST_DATA;

// 执行调用客户端的XML请求后获取执行结果

$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);

//把函数处理后的结果XML进行输出

header(''Content-Type: text/xml'');

echo $xmlrpc_response;

//销毁XML-RPC服务器端资源

xmlrpc_server_destroy($xmlrpc_server);

?>

服务器端构造好了,那么再构造我们的RPC客户端。客户端大致通过Socket访问XML-RPC服务器端的80端口,然后把需要调用的RPC接口封装到XML里,通过POST请求提 交给RPC服务器端,最后获取服务器端返回结果。

代码如下:rpc_client.php

<?php

/**

* 函数:提供给客户端进行连接XML-RPC服务器端的函数

* 参数:

* $host 需要连接的主机

* $port 连接主机的端口

* $rpc_server XML-RPC服务器端文件

* $request 封装的XML请求信息

* 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false

*/

function rpc_client_call($host, $port, $rpc_server, $request) {

//打开指定的服务器端

$fp = fsockopen($host, $port);

//构造需要进行通信的XML-RPC 服务器端的查询POST请求信息

$query = "POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC
Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length:
".strlen($request)."\n\n".$request."\n";

//把构造好的HTTP协议发送给服务器,失败返回false

if (!fputs($fp, $query, strlen($query))) {

$errstr = "Write error";

return false;

}

//获取从服务器端返回的所有信息,包括HTTP 头和XML信息

$contents = '''';

while (!feof($fp)){

$contents .= fgets($fp);

}

// 关闭连接资源后返回获取的内容

fclose($fp);

return $contents;

}

//构造连接RPC服务器端的信息

$host = ''localhost'';

$port = 80;

$rpc_server = ''/~heiyeluren/rpc_server.php'';

//把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get

$request = xmlrpc_encode_request(''rpc_server'', ''get'');

//调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息

$response = rpc_client_call($host, $port, $rpc_server, $request);

//分析从服务器端返回的XML,去掉HTTP头信息,并且把XML 转为PHP能识别的字符串

$split = ''<?phpxml version=?>1.0" encoding="iso-8859-1""'';

$xml = explode($split, $response);

$xml = $split . array_pop($xml);

$response = xmlrpc_decode($xml);

//输出从RPC服务器端获取的信息

print_r($response);

?>

大致我们上面的例子就是提交一个叫做rpc_server的方法过去,参数是get,然后获取服务器端的返回,服务器端返回的XML 数据是:

<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
<value>
<string>This data by get method</string>
</value>
</param>
</params>
</methodResponse>

那么我们再通过 xmlrpc_decode函数把这个XML编码为PHP的字符串,我们就能够随意处理了,整个Web Service交互完成。


结束语

不管是XML-RPC也好,SOAP也罢, 只要能够让我们稳定、安全的进行远程过程的调用,完成我们的项目,那么就算整个Web Service就是成功的。另外,如果可以的话,也可以尝试使用PEAR中的XML-RPC来实现上面类似的操作,说不定会更简单,更适合你使 用。

简单的使用XML-RPC进行Web Service交互就完成了,部分代码参考PHP手册,想获取详细信息建议参考手册,如果文章有不正确,请指正。

电子商务系统使用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使用paypal支付接口测试

paypal帐户,帐户类型分为Personal(个人)、Premier(高级)和Business(商业),他们的差别对于开发者

来说主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续费;Premier和Business当然就提供了IPN和PDT功能,能够在客户支付成功后,将交易信息传给指定的网站,用来二次使用。

这里插进来介绍一下paypal sandbox,也就是沙盒,是paypal提供给开发者的一个工具,非常好用。

作为Magento开发者,第一次使用Paypal总是希望能使用测试账号来测试功能是否工作正常,基本流程如下: 

1. 去developer.paypal.com申请开发账号(这里以dev123@gmail.com为例),申请后自动建立一个buyer和一个seller测试子账号供测试(这里分别以buyer123@gmail.com和seller123@gmail.com为例)。 

2. Magento后台允许PayPal Standard支付: 
System->Configuration->Payment Methods->PayPal Website Payments Standard 

3. Magento后台设置PayPal账号 
System->Configuration->PayPal->Website Payments Standard 
    Business Account: seller123@gmail.com 
    Sandbox Mode : Yes 

最常犯的错是:将Business Account设置为dev123@gmail.com, 这样当支付进入最后一步会提示这样的错误(导致订单别取消): 
This invoice has already been paid. For more information, please contact the merchant.
 

4. 打开浏览器登录developer.paypal.com,在同一个浏览器下订单,当place order转入paypal网站时(sandbox网站),你可以选择输入信用卡信息支付,也可以选择登陆PayPal,如果选择登录可以用前面的buyer123@gmail.com,首次登陆可能要求你帮定一个银行账号,因为是测试账户,这里的银行账号是无所谓的,接下来就会一路顺利,确认支付成功,点击回到商家网站按钮,订单完成。 

注:第4条提到的“打开浏览器登录developer.paypal.com,在同一个浏览器下订单”是必需的,否则不能完成测试! 
另外一个可能导致订单不成功的的原因是:Shipping Address必须足够真实,否则PayPal会Decline你的 

还有在这里提一下paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal 的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这 些数据进行操作。

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

PayPal支付接口的PHP开发方式

gspay支付页面错误代码表示的意思

magento
和osc使用gspay支付接口跳到gp支付页面出现的错误代码标识意思如下:

101 客户的IP和选择的国家不匹配
(还有,自己网站不要经常上去做购买测试,我们有IP监测,防止卖家替客人刷卡,或者是洗钱。这个监测在您的账户live后通常都会拒绝您自己的测试支付,显示为101 108 109 119或121)
102 客户国家的IP被封锁
103 美国客户的IP和州不匹配
104 欺骗的卡持有人
105 欺骗的卡号
106 客户浏览器的语言被封锁
107 客户国家被封锁
108 欺骗的邮件地址
109 欺骗的IP
110 欺骗的电话号码
111 客户浏览器被封锁
112 超过每小时的最大交易限额
113 小时IP限制
114 多次尝试用不同的客户信息
116 网站必须注册
118 不能自己测试
119 高拒付风险客户,银行不接受的付款
121 填写的信息和发卡行不符
122 表示数次购买时,其余资料不同,但填写的邮箱是相同的
123 多个不同的全名用一个IP或者一个浏览器多次下单