Chinaunix首页 | 论坛 | 博客
  • 博客访问: 274638
  • 博文数量: 26
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-25 19:28
文章分类
文章存档

2011年(6)

2010年(4)

2009年(10)

2008年(6)

我的朋友
最近访客

分类: Java

2008-08-28 22:01:54

一点必须了解的基础知识:

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的详细设置

登录至Paypal后台,进入My Account->Profile页面,点击Instant Payment Notification,如下图: 

然后就会出现下面的页面了,点击Edit按钮,如下图:

然后就会出现下面的页面了,在页面里面那个选框处打勾,并在下面的Notification URL 处填写:http://您的网站地址/index.php?gOo=cGF5cGFsX3JlcGx5LnBocA& 然后点击Save按钮,如下图:

然后页面就会提示你:“You have successfully activated Instant Payment Notification.”

接下来再次进入My Account->Profile页面,点击Website Payment Preferences ,如下图:


然后就会进入Website Payment Preferences页面,在里面要做四件事情:
1:Auto Return 后面打勾选择On
2:Return URL 后面输入:http://您的网站地址/index.php?gOo=cGF5cGFsX3JlcGx5X3JldHVybi5waHA&
3:Payment Data Transfer 后面打勾选择On
4:上面都做好之后,点击页面最下面的Save按钮
如下图:

保存之后页面立即跳转到My Account->Profile,并且提示您设置成功,里面还会有一串identity token号码,那个就是私钥,如下图:



当然,这个私钥(identity token)不会只出现这一次的,在您设置完之后,您可以仍然进入Website Payment Preferences页面去查看它,它就在Payment Data Transfer那一个区块,如下图:

接下来,我们测试的时候,应该将Paypal接口的地址设置为
最后基本的流程为:

用户在我们的网站上选择商品、放入购物车,然后检查准备支付
网站根据购物车中的商品,生成Paypal的支付表单(也是提交到上面IPN用的Paypal接口地址),包含了此次交易的一些信息(下次会专门找

机会解释一下)。并在自己的数据库中生成一张订单记录。
Paypal在Session中记录下这些交易信息

用户用Paypal账户登录Paypal(Sandbox用Sandbox的虚拟帐号),复查明细,点击Pay按钮
Paypal进行交易处理,如果我们的Paypal收款帐号在接受帐款上没有什么问题(没有特别的需要Accept的地方),交易完成,那么Paypal会发

送一个IPN,并发送提示邮件。
我们IPN Handler接受到信息,首先向Paypal进行校验,如果信息正确,然后根据信息和自己数据库中进行比对,如果无误,可以将支付信息

保存,并修改订单状态。
然后Paypal会显示一个界面表示交易完成,此时如果用户点击“Return”按钮,Paypal会将用户送回我们网站指定地点。
我们网站迎接用户回来,向用户表示感谢,并进行提醒,给出订单号等等。

如果明文形式的话,就和压缩包里面的paypal.htm文件一般


























--------------------

文件夹和文件的一些简要说明:[App_Code] 放了几个必要的类
[Bin]  存放了支付接口的解密加密的一个DLL文件
[EWPcert] 系统所需要用到的安全证书
CheckOut.aspx 相当于B2C网站的购物车,程序从这里开始
NotifyUrl.ashx 2次POST安全性验证页面,比较重要
PDTResponse.aspx用于返回信息的页面,我们可以通过这个页面来实现,吧交易的一系列信息存入自己的数据库用于验证用户是否已经支付

---------[App_Code]-----------
ButtonEncryption.cs  加密【CHECK OUT】按钮的密码字符串,相当于吧明文的一些基本参数直接加密了
Constants.cs  全局变量,用于存放一些PAYPAL设置的基础信息
NVPCodec.cs  代码转换
Utils.cs  用于安全验证时候用的

---------[EWPcert]-----------
sandbox_cert_pem.txt  PAYPAL的公共证书
sdk-ewp.p12  一个类似似有的证书吧,这个到不是很了解

阅读(3945) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-12-09 14:43:50

請問有郵箱麼?我有個IPN的問題想請教你,謝謝

chinaunix网友2008-12-09 14:43:50

請問有郵箱麼?我有個IPN的問題想請教你,謝謝

chinaunix网友2008-11-20 12:49:01

你能不能给我详细的讲讲paypal支付接口怎么用呢 我想要在paypal支付成功都返回一个订单号 用来修改数据库订单状态

chinaunix网友2008-11-20 12:49:01

你能不能给我详细的讲讲paypal支付接口怎么用呢 我想要在paypal支付成功都返回一个订单号 用来修改数据库订单状态

chinaunix网友2008-11-17 15:51:29

请问您有MSN吗?谢谢