转自:http://www.chenchen.org/article/paypal/4.htm

Paypal国际版网站集成简易教程(一):序言

前段时间接到一个外贸网站的项目,集成paypal支付接口的,对象是海外用户,全部用US的信用卡结算。国内有个paypal的中文版,叫贝宝,不过只支持人民币之间的结算,而且提供的功能不多。所以只能使用paypal国际版,也就是paypal.com,习惯性的google了一下相关资料,发现关于paypal.com接口的中文文档并不多,也不详细,只好自己上paypal.com研究,还好paypal上的资料非常齐全,而且还提供了开发者沙盒(sandbox),相比之下,国内流行的支付宝还有很长的路要走啊。
    
      项目结束的时候就有想法写一篇网站集成paypal的简易教程,方便以后的各位开发者,毕竟看长篇英文资料是很头痛的事情^_^。一直到昨天期末考才结束,所以今天开始写这个教程,其实内容也不多,可能还算不上教程,只能算经验吧。

主要分为序言、支付按钮、返回信息方式(IPN&PDT)、实例四部分组成,预计在三天内完成,如果有新内容我临时再加吧。
    
      接下来一篇将会介绍如何在网站上快速加入paypal支付按钮。

Paypal国际版网站集成简易教程(二):快速加入支付按钮

本篇主要介绍如何在你的网站上快速加入paypal支付按钮,通过这个按钮,人们可以方便快速的付款到你的paypal帐户。
      首先,你需要注册一个paypal帐户,帐户类型分为Personal(个人)、Premier(高级)和Business(商业),他们的差别对于开发者来说主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续费;Premier和Business当然就提供了IPN和PDT功能,能够在客户支付成功后,将交易信息传给指定的网站,用来二次使用。Premier和Business使用上的差异我不是很清楚,应该是月收款额和手续费上的区别吧。
      这里插进来介绍一下paypal sandbox,也就是沙盒,是paypal提供给开发者的一个工具,非常好用,你可以在https://developer.paypal.com/注册和使用它。登录以后可以新建帐户,设置余额和帐户类型,有一点要注意,每次使用时必须先登录sandbox才能使用新建的那些帐户。Sndbox里面有个测试工具,可以发送IPN的,以后会用到。

接着上面的内容,注册完帐户以后,当然,一开始开发最好使用sandbox,不然资金转来转去手续费都扣光了,paypal的费率如下:
      
      比起国内的支付工具,paypal贵了好多,当然,和国情也有关系。
    
      接下来是按钮的代码,很简单,就是一个普通的网页表单代码:

程序代码

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
   <input type="hidden" name="cmd" value="_xclick">
   <input type="hidden" name="business" value="sample@sample.com">
   <input type="hidden" name="item_name" 
   value="Item Name Goes Here">
   <input type="hidden" name="item_number" 
   value="Item Number Goes Here">
   <input type="hidden" name="amount" value="100.00">
   <input type="hidden" name="no_shipping" value="2">
   <input type="hidden" name="no_note" value="1">
   <input type="hidden" name="currency_code" value="USD">
   <input type="hidden" name="bn" value="IC_Sample">
   <input type="image" src="https://www.paypal.com/
   en_US/i/btn/x-click-but23.gif" 
   name="submit" alt="Make payments with payPal - it's fast, 
   free and secure!">
   <img alt="" 
   src="https://www.paypal.com/en_US/i/scr/pixel.gif" 
   width="1" height="1">
</form>

如果使用sandbox,action地址改成https://www.sandbox.paypal.com/cgi-bin/webscr即可,上面这段还是很容易理解的,看下name和value基本上就能知道每个值的含义了。
      
      保存用浏览器打开,就会看到一个paypal的按钮,点击过去按照提示操作,就能付款到business指定值的帐户了。

这就是一个最简单的paypal支付按钮。
      再下一篇中会讲一下如何在付款成功之后,将信息返回到你的网站,大部分需求都是客户完成付款后返回信息到网站的数据库,记录网站客服的交易信息。

最后稍微了解下为什么海外用户喜欢用自己的网站做生意,而不是像国内一样用淘宝之类的C2C平台。一开始我也很不理解,有免费的平台为什么要自己建设网站还要支付paypal的手续费,后来和客户了解了一下,他们做的事网游虚拟交易,国外最大的C2C平台就是eBay,但只有德国可以售卖虚拟物品,并且eBay上的交易并不是免费的,收取的手续费远远高于paypal的费率,因此,更多的海外用户选择自己建设网站进行电子商务。

Paypal国际版网站集成简易教程(三):IPN的使用

本文内容采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

引用内容
什么是即时付款通知IPN
当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分) 发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情况并做出相应的响应。这个过程我们称作即时付款通知(简称 IPN)。

最近事情比较多,一直没有继续更新,不好意思了,今天难得有空,就把最重要的一段先发上来了。

相信大部分网站集成Paypal都希望能够实现客户支付完成后返回信息到自己的网站,然后处理这些信息。比如客户在你的网站上购买了一个产品,通过Paypal完成了支付,接着Paypal告诉你的网站客户完成了支付以及支付信息,最后你的网站将这些信息记录到你自己的数据库中,并且将你的客户订单状态设为已支付,接着你就可以进行一系列的相关订单的后续操作。
      IPN就能帮助我们实现这个功能,IPN示意图如下(来自Paypal.com):
      

当客户完成支付,Paypal会在后台通过post方式向你的服务器传送交易数据,来实现网站集成的功能。
接下来我们就来看IPN的实现方法。
      第一步,你需要一个sandbox的帐号,这很重要,因为它能让你随心所欲的进行测试,而不用担心资金在天上飞。注册地址:https://developer.paypal.com/
      第二步,登陆sandbox,新建一个商家帐号(卖方)和一个客户账号(买方),其中卖方帐号必须是Premier或者Business,不然无法使用IPN功能。
      

新建买家帐号的时候记得在Account Balance中加上金额,不然你就没钱买东西了,如果paypal.com的帐号也能这样加钱多好。
      新建完两个帐号:
      

卖家帐号的test mode要设为enabled。
      选中business帐号,点击下面的Enter Sandbox Test Site进入sandbox Test Site,登录,就像普通Paypal帐号的管理页面一样。
      

点击Profile,在Selling Preferences中选择Instant Payment Notification Preferences,点击edit加入IPN信息返回的地址,记得勾上前面那个选项,我是用.net写的接受文件,所以我的IPN地址是http://www.chenchen.org/ipn.aspx,地址只要能在互联网上访问到就可以了。
      

在Profile -> Selling Preferences ->Website Payment Preferences选项中,有一个Auto Return的选项,将它设为on,并且在下面的return地址中填入你希望的客户支付完成后返回的地址:
      

以上就完成了商家端的设置。

接下来是你网站上ipn.aspx文件的编写,这个是用来接收支付数据的,是非常关键的一个文件。
      文件环境,.net 2.0,语言C#。
      Ipn.aspx文件:此文件不用修改任何东西,代码都在cs文件中。
      Ipn.aspx.cs文件:关键代码

定义一个VerifyIPN()函数:

程序代码
bool VerifyIPN()
{
        string strFormValues = Request.Form.ToString();
        string strNewValue;
        string strResponse;
        string serverURL = "https://www.sandbox.paypal.com/cgi-bin/webscr";

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serverURL);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        strNewValue = strFormValues + "&cmd=_notify-validate";
        req.ContentLength = strNewValue.Length;

StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
        stOut.Write(strNewValue);
        stOut.Close();

StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
        strResponse = stIn.ReadToEnd();
        stIn.Close();

return strResponse == "VERIFIED";
}

这段代码的作用是判断IPN信息是否来自Pyapal,如果不进行判断,那么恶意用户完全可以模拟一个信息post到你的网站上,让你认为订单已经完成支付,所以,必须首先对接受到的信息进行验证。

代码的基本原理,serverURL定义了验证地址,sandbox为:https://www.sandbox.paypal.com/cgi-bin/webscr,Paypal.com就是https://www.paypal.com/cgi-bin/webscr。
      将paypal发送过来的所有信息加上一个&cmd=_notify-validate参数,表示对这个信息进行验证,全部发送回paypal验证,如果信息确实存在,则返回VERIFIED字符串。
验证成功后,就可以用如下形式获得交易信息:

程序代码
string ppTx = Request.Form["txn_id"].ToString();
string ppStatus = Request.Form["payment_status"].ToString();
string ppDate = Request.Form["payment_date"].ToString();
string ppItem = Request.Form["item_name"].ToString();
string ppPrice = Request.Form["mc_gross"].ToString();

每个变量的解释可以参考Paypal网站上的说明,我这里就不再重复。

.cs代码结构如下:

程序代码
public partial class paypal_ipn : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (VerifyIPN())//验证成功
        {
            string ppTx = Request.Form["txn_id"].ToString();//获取post中的各项变量值
                …
            执行将数据写入数据库等操作
        }   
    }

bool VerifyIPN()
{
        具体代码见上。
    }
}

这样,就实现了将支付信息传回网站的功能。注:当交易状态发生改变时,paypal也会返回一个ipn,比如完成支付,退款等等。

介绍一下sandbox中IPN测试工具,登陆sandbox主帐号,就是你在sandbox上注册的那个,不是那些卖家/买家帐号。
      选择Test Tools -> Instant Payment Notification (IPN) Simulator:

输入你的ipn接受文件地址,选择ipn信息的方式,然后会让你填具体信息内容,再点击Send IPN,就能模拟一个ipn到你网站的页面,可以用来测试IPN是否正常工作。
      
      
      不过这个工具有个小BUG,就是发送的IPN里不包括contact_phone这个变量,但是实际的IPN里是有的,这里要注意一下。
      注:可以在商家帐号的Profile -> Selling Preferences ->Website Payment Preferences中,选择Contact Telephone Number这一栏,来确定是否需要发送买家联系电话。
      

通过IPN,你的网站就开始从真正意义上的集成了Paypal。
      这篇文章写得有些仓促,如有疑问可以发送邮件到:chenchen[at]ndwork.com  用@替换[at]。
      下一次我会讲PDT方式,这个比IPN简单很多。

Paypal国际版网站集成简易教程(四):PDT的使用

引用内容

什么是PDT
PDT是一个安全获取付款明细的方式。在买家付完款后,卖家可以通过此方式即时获取付款明细并显示给买家看。

暑假时候写了前面三篇文章,后来去电视台打工了,帮他们上了一个人居博览会,再接着就开学了,又在杭州、温州、宁波跑来跑去。一直不能静下来继续写,现在工作又没啥着落哈。
      今天难得有感觉想写了,不知道是不是中午牛排的威力,趁机会就快点写吧。

上图是PDT的流程示意。
      1.首先买家付款后通过事先设定好的返回url(return)回到您的网站。
      2.接着paypal在返回url后面加上tx变量,即交易号。
      3.然后网站将收到的tx和您的令牌(paypal账户里申请)发回paypal。
      4.paypal验证令牌通过后,将交易明细发回网站。
      5.最后网站将交易明细显示给客户。

启用PDT

Paypal国际版网站集成简易教程相关推荐

  1. Paypal国际版网站集成

    前段时间接到一个外贸网站的项目,集成paypal支付接口的,对象是海外用户,全部用US的信用卡结算.所以只能使用paypal国际版,还好paypal上的资料非常齐全,而 且还提供了开发者沙盒(sand ...

  2. paypal 国际版网站集成

    集成分3步:1.支付按钮 2.IPN 3.PDT 1.支付按钮: 进入paypal后->我的paypal->用户信息->卖家习惯设定->我保存的按钮 添加的文本栏(name=& ...

  3. 阿里云国际版设置电子邮件托管教程详解

    本教程介绍如何在阿里云服务器上设置电子邮件托管.我们将逐步完成设置电子邮件托管所涉及的所有步骤,以便您可以通过链接到已购买域名的地址发送和接收电子邮件. 先决条件 要学习本教程,您需要一个阿里云账号. ...

  4. 最新阿里云国际版支付方式以及注册教程和方法

    阿里云国际版和国内版之间区别,产品和服务的日常价格基本上是没啥区别的,但是国际版的产品越高配价格越划算,性价比越高,双十一活动价格也是比日常价便宜得多. 阿里云国际版云安全中心日常价 阿里云中国版云安 ...

  5. 2023年最新阿里云国际版支付方式以及注册教程和方法

    阿里云国际版和国内版之间区别,产品和服务的日常价格基本上是没啥区别的,但是国际版的产品越高配价格越划算,性价比越高,双十一活动价格也是比日常价便宜得多.TG:@aliyunbaobao 阿里云国际版云 ...

  6. 小米红米note 8 Pro(Redmi note8 Pro)刷机|刷欧洲版(国际版)系统|此教程也适合其它机型小米手机

    小米手机自诞生以来,就以其超高的性价比赢得不少粉丝,在国外也是如此.所以小米发布的手机,都具有国内和国际两个版本,其系统可以互相刷机. 为什么要刷国际版系统呢? 很简单,国际版系统纯净无广告,国内特供 ...

  7. IOS版aplayer使用教程_iOS版 PUBG MOBILE 国际版吃鸡下载教程

    原来之前玩的<绝地求生:刺激战场>一直属于测试版(没有版号.无法商业运营.无法盈利),近日获得版号的<和平精英>彻底替代了<刺激战场>,虽然之前的游戏数据都还在,但 ...

  8. 中文环境的WPS 2020国际版下载安装配置教程

    目录 前言 一.WPS安装 二.使用配置 总结 前言 WPS Office是Windows用户的一款功能强大的办公软件.国际版的wps要比国内版的wps要清爽很多,另外国际版有一个国内版所没有的强大功 ...

  9. 阿里云国际版免费试用套餐使用教程

    前一篇我们分享了两个阿里云国际的注册方法,现在让我们来看看如何开始使用广泛的产品和服务.在此免费试用期间,超过 35 种阿里云产品可供您试用,以及 20 多种始终免费的产品和服务.下面和87cloud ...

最新文章

  1. 安装java的rpm_Centos7使用rpm命令安装java
  2. Windows PE入门基础知识:Windows PE的作用、命名规则、启动方式、启动原理
  3. 保持图片和图片框一致的方法 收藏
  4. Flutter 完美的验证码输入框(2 种方法)
  5. PPT 下载 | 神策数据徐美玲:如何挖好数据这座矿?
  6. 动画 自制弹框上滑+渐显效果
  7. 神经网络优化算法总结【SGD】---【Adam】
  8. 调试器原理_调试器的工作原理
  9. c++调试窗口不见了_Sublime Text配置GDB调试环境
  10. javascript 容错处理代码【屏蔽js错误】
  11. Atitit all diary index va u33 #alldiary.docx Atitit alldiaryindex v1 t717 目录 1. Fix 1 2. Diary deta
  12. java屏幕共享实现原理_远程桌面共享技术实现
  13. iOS 一行代码集成微信浮窗功能
  14. Word美化技巧:Word文档怎么设置背景图片?
  15. linux常用网站(不定期更新)
  16. 描述性统计-正态性检验(SPSS,SAS)P-P图,Q-Q图,直方图,KS检验
  17. ping ping ping HDU - 6203
  18. WidsMob Montage for Mac v1.19蒙太奇图片制作
  19. 【游戏开发实战】Unity Unlit ShaderGraph实现与PBR的自发光贴图类似的叠加效果
  20. LeetCode - 500 - 键盘行(keyboard-row)

热门文章

  1. 管理科学基础知识__后悔值计算
  2. JSON Viewer有个大bug导致不得不放弃掉
  3. Ubuntu 10.10 无线网络已经禁用” “wiress is disabled” 解决方法
  4. 无需ROOT安卓备份Soul应用数据并提取聊天记录
  5. oracle的日期时间转换日期,oracle 的时间日期转换函数
  6. spring aop分析(一)
  7. 【Office插入eps】Word插入eps出错
  8. springboot+网络空间安全实验教学中心门户网站 毕业设计-附源码191220
  9. CDH6.3.3 paywall版之前自定义http服务器放置parcels安装数据
  10. 详解17000tps的以太坊snark侧链方案