.Net在线付款---Paypal在线付款开发过程
最近在做一个Web订单项目,项目有一个需求就是集成Paypal与Paydollar在线付款,一开始看到这个需求也是傻了眼,因为以前从来没有做过在线付款的功能,于是打开百度,google狂搜一通,发现.net下面集成这两种付款方式的介绍很不全面,没有找到我心中想要的答案,没有办法,只要老老实实的跟着网站上提供的文文件来做,在项目快完成时,于是想将现在做的一些心得和步骤记录下来,以备以后有用!
你可以进入https://www.paypal.com/了解Paypal的更多内容.
你可以進入https://www.paypal-biz.com/developer/ 下載相關的技術文檔
或者直接點擊下載本文相關的文檔:
即时付款通知指南
https://www.paypal-biz.com/development/documentation/PayPal_IPN&PDT_Guide_V1.0.pdf
网页付款标准版集成指南
https://www.paypal-biz.com/development/documentation/PayPal_WPS_Guide_V1.0.pdf
Sandbox測試環境使用指南
https://www.paypal-biz.com/development/documentation/PayPal_Sandbox_Guide_V1.0.pdf
你在做asp.net集成Paypal在线付款需要以下的条件:
1. 需要有.net开发基础(废话).
2. 需要有一个在外网可以访问到的网址.
3. 需要仔细阅读Paypal集成文檔,以备参考.
4. 需要注册Paypal的正式账号与测试账号(本文以测试账号为例).
假定我们现在的系统叫Order系统,需要集成在线付款,本文按照如下的流程来讲述Paypal的开发过程:
1. 註冊Paypal的测试账号.
2. 编写一个HTML Form 将订单的一些相关信息POST到Paypal的页面上去.
3. 提供一个页面用于让Paypal更新我们的Order系统.
4. 返回到Order系统的提示页面.
一 获得Paypal的测试账号
Paypal为我们提供一个可以测试的虚拟付款的付款网站:
http://www.sandbox.paypal.com/
界面上要求你用Email Address和password来登录,和PayDollar不同的是paypal提供了測試環境的註冊帳號,如果你沒有帳號,可以點擊Sing Up Now註冊一個paypal的測試帳號.
註冊完成後,可以用剛註冊的帳號登錄,再點擊Test Account,然後再註冊一個Business帳號和一個personal帳號,分別用於模擬買家與賣家,或者叫做接款方和付款方.
在注冊business帳號和personal帳號時,會要求你和信用卡與借記卡關聯(這一些信息都可以為假的!).
你可以進入官網了解或者百度一下,網上怎樣註冊帳號的資料很多.
二. 编写一个HTML Form 将订单的一些相关信息POST到paypal的页面上去.


学习过HTML的同学都会知道上面是什么意思,以下是我对上面的一些参数含义的解释,如果你需要更多的帮助,你可以阅读Paypal集成指南的相关章节:
1. 请将form的method设置成POST 将action设置成https://www.sandbox.paypal.com/cgi-bin/webscr
如果要变成正式付款请将它设置成:
http://www.paypal.com/cgi-bin/webscr
2. business设置成Paypal提供给你的账号,如果是正式环境发布,就需要用正式的账号
3. amout设置成你要付款的金额
4. item_name设置成你要付款的订单号
5. paypal提供了在Form裏面設置IPN(Instant Payment Notification 即时付款通知)的方法,只要你將下面的代碼加入Form中就可以設置
<input type=\"hidden\" name=\"notify_url\" value=”http://www.youdomain/PaypalIPN.aspx”/>,但本次開發中沒有使用這一種方法,我們會在paypal的business帳號的管理界面中設置好,下面的內容會介紹.
設置好這一些參數後,如果提交上去,就會實現這一個功能:將金額為:480.00訂單號為: OP0000055的訂單付款,收款方為XXXX@XXXX.com(business帳號)
(如果你要更详细的参数设置介绍,你可以查看Paypal集成文档在这里我并不贴出Order系统的其它的代码,我们只要将这个Form的代码生成好,动态替换里面要改变的参数(比如amout,orderref等)提交上去就好了,就比如说,一个页面上可以放两个Form,一个Form用于显示购物车里面的信息,另一个Form就可以放以上的代码,只要保证第二个Form提交了就OK了,悄悄的告诉你,我就是用StringBuilder这样一条一条append上去的,遇到要替换的参数我就Replace一下,我相信你一定知道我是怎么做的,哈哈,你信不信不要紧,反正我相信了!
当你将该Form提交后,你可以看到Order系统已跳转到sandbox.paypal.com的测试付款页面了
在這裏你就可以輸入你註冊的personal的帳號與密碼付款.
当你点击PayNow按钮时,Paypal就会开始给你做付款操作.
三 提供一个页面(paypalIPN.aspx)用于让Paypal更新我们的Order系统
我们先来看看IPN文档上怎么定义IPN的含义:
在买家通过您的网站付款结束后,PayPal 将异步(即不作为网站付款流程的一部分) 发送付款详细数据到您所指定的 URL,以便您了解买家付款的具体情况并做出相应的响应。 这个过程我们称作即时付款通知 (简称 IPN)。示意图如下:
1) 客户点击“付款”按钮向您的账户付款;
2) PayPal 接受到客户的付款后,向您的服务器指定的 URL 通过 POST 方式发送
IPN;
3) 在您的服务器收到 IPN 之后,您必须将收到的 POST 信息对原样返回给 PayPal 进行验证,PayPal 通过此方法帮您防范欺骗或“中间人”攻击;(对 IPN 信息 的验证过程我们称之为通知确认,详细的可参见 6.3)
4) PayPal 返回验证信息,通过验证为 VERIFIED,不通过则为 INVALD;
5) 根据验证信息处理付款明细。
【注】每次付款您可能收到多个 IPN 信息,一般来说直到收到 IPN 信息中的付款状态 为 Completed 为止。
IPN 数据包含了整个付款过程的详细信息,通过获取并分析它您可以:
„ 自定义网站对客户购物进行实时回复:您可以以 EMAIL 或其他方式通知客户 付款的状态;
„ 自动履行相关操作:当收到 IPN 数据并确认付款状态已经完成后,您就可以 立刻启动向买家发货的流程,也可以为买家进行虚拟货币的充值或者以某种方 式将虚拟商品的卡号和密码发送给买家;
„ 记录交易信息到您的数据库中。
当Paypal在做付款操作时,paypal会将本次付款的信息(如交易号,付款状态等)Post回Order系统,以便Order系统更新自己的系统,比如说更新订单的交易号与交易日期, 所以我们要提供一个页面来接收这一些数据,这个页面在Paypal里面叫IPN(Instant Payment Notification 即时付款通知)页面,(这个页面我们取名为paypalIPN.aspx)如果你想了解更多IPN的知识,请阅读即時付款通知指南
IPN可以在Form裏面設置也可以在Business帳號的管理頁面配置:
上sandbox裏選擇business帳號,然後點擊入business的帳號管理頁面
點用用戶信息-更多選項
就會進入如下頁面:
更改即時付款通知習慣設定
在通告Url中填入IPN的頁面地址(需要可以在外網訪問的地址):
選擇接收即時付款通知消息(已啟用),然後按保存.
paypalIPN.aspx的后台代码如下:


代碼主要是接收https://www.sandbox.paypal.com/cgi-bin/webscr的返回值是否為VERIFIED,如果為true就可以用Request.form去獲取paypal返回的數據去更新Order系統,如果你想了解更多,請詳細閱讀即時付款通知指南
个人体会:
1.我个人认为,paypal要求我们提供的IPN页面只能用于更新Order系统,不应该用于显示界面(包括付款结果),不要將IPN頁面和Order系統付款結果頁面混為一談(IPN頁面只是用來更新系統,不用於顯示,而付款結果頁面只是用於顯示付款結果).
2.Order系统提供的IPN页面,是一定要有外网上可以访问的,要不然会造成返回参数接收不成功!我曾经在这个地方卡住很久,后来换成外网地址后就可以接收返回参数.
四 返回到Order系统的提示页面
当paypal付款成功后,我们会一直停留在paypal的付款完成页面,如果我们想要他自动返回我们的Order系统的某个页面,以显示出付款结果(或有其它的操作),我们就要用使用PDT,我们先来看一下实时付款通知文档里面PDT的意义是什么:
PDT 是一个安全获取付款明细的方式。在买家付完款后,卖家可以通过此方式即时获取付款明细并显示给买家看。PDT 的流程示意图如下所示:
1) 买家通过 PayPal 付款后根据事先设定的返回 URL(return)返回到您的网站;
2) PayPal 将在返回的 URL 附加变量 tx,即 PayPal 的交易流水号;
3) 将收到的交易流水号 tx 和您的身份标记通过 POST 方式发回给 PayPal;
4) PayPal 接受请求后验证身份标记及交易流水号后将付款明细发送回给网站;
5) 将接受到的付款明细处理后显示在买家的网页浏览器中。
Paypal的付款结果页面比paydollar的相对来说更复杂,我们首先要到你注册的business账号的管理页面去设置一下PDT
进入网站付款习惯设定
将自动返回设置成开启
将返回URL设置成你想要返回的页面地址
将付款数据传输设置为开启
请记录下你的身份标记,在以后的开发时用得上.
假定我们设置的PDT页面为:paypalResult.aspx,那么后台代码和IPN页面的代码很相似:


当系统开发完成后,你的公司可能会向Paypal申请正式的账号,这时你需要将Form的一些测试信息更改成正式信息(比如说action地址,business账号等等)
.Net在线付款---Paypal在线付款开发过程的更多相关文章
- .Net在线付款---Paydollar在线付款开发过程
原文:.Net在线付款---Paydollar在线付款开发过程 最近在做一个Web订单项目,项目有一个需求就是集成Paypal与Paydollar在线付款,一开始看到这个需求也是傻了眼,因为以前从来没 ...
- [label][转载][paypal]paypal在线支付接口的WEB语言设置
http://stephen830.iteye.com/blog/274072 ★★★ 本篇为原创,需要引用转载的朋友请注明:< http://stephen830.iteye.com/blog ...
- 如何取消Paypal自动付款功能
在国外在线服务消费肯定会常遇到PayPal的支付方式,有些人可能PayPal有些余额可能会用这个工具来支付,但付款后,可能服务因为不满意而退掉,但第二年却自动续约了?但明明服务已退掉,这该怎么处理呢? ...
- 判断ecshop未付款添加去付款按钮
判断ecshop未付款添加去付款按钮,打开ecshop模板目录下user_transaction.dwt找到{$item.handler} 这个变量 给它下面添加以下代码 {if $item.pay_ ...
- 在线学习和在线凸优化(online learning and online convex optimization)—基础介绍1
开启一个在线学习和在线凸优化框架专题学习: 1.首先介绍在线学习的相关概念 在线学习是在一系列连续的回合(rounds)中进行的: 在回合,学习机(learner)被给一个question:(一个向量 ...
- PayPal网站付款标准版(for PHP)
简单整理一下PHP项目整合PayPal支付功能. 一.表单的构建: <form method="post" name="form" action=&quo ...
- .NET在线培训 | C#在线培训 | .NET培训 | 最课程培训
最课程(www.zuikc.com) 软件开发培训,在线软件培训的创新者!我们的创新在于: 1:一次购买,终身服务.每个最课程学员都会分配一位专职教师及一位监管教师,点对点跟进课程进度,直到您学会课程 ...
- Redis命令大全&中文解释&在线测试命令工具&在线中文文档
在线测试命令地址:http://try.redis.io/ 官方文档:http://redis.io/commands http://redis.io/documentation Redis 命令参考 ...
- 在线学习和在线凸优化(online learning and online convex optimization)—FTL算法5
最自然的学习规则是使用任何在过去回合中损失最小的向量. 这与Consistent算法的精神相同,它在在线凸优化中通常被称为Follow-The-Leader,最小化累积损失. 对于任何t: 我们谈到了 ...
随机推荐
- How to install java and eclipse on linux
First of all, download from the website of java. I download 'jdk-8u102-linux-i586.tar.gz' unzip it t ...
- 我心中的核心组件(可插拔的AOP)~第十二回 IoC组件Unity
回到目录 说在前 Ioc组件有很多,之前也介绍过autofac,castle等,今天再来说一下在微软Nlayer DDD架构里使用的unity组件,今天主要说一下依靠注入,如果希望看拦截的用法,可以阅 ...
- struts2学习笔记之六:struts2的Action访问ServletAPI的几种方式
方法一:通过ActionContext访问SerlvetAPI,这种方式没有侵入性 Action类部分代码 import com.opensymphony.xwork2.ActionContext; ...
- JS 操作 DOM
定义:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式 节点:(例如:< ...
- node.js 简介
简介: Node,是一个可以让 JavaScript 运行在服务器端的平台.它可以让 JavaScript 脱离浏览器的束缚运行在一般的服务器环境下 Node.js 是一个为实时Web ...
- Java override 和 overload 的区别
override 是重写(覆盖)了一个方法,用来实现不同的功能,一般是用于子类继承父类时,重写父类的方法的时候. 重写(覆盖)的规则: 1.重写方法的参数列表必须表示与被重写的方法相同,否则不能称为重 ...
- 下列哪项不属于jdk1.6垃圾收集器?
下列哪项不属于jdk1.6垃圾收集器? A. Serail 收集器 B. parNew 收集器 C. CMS 收集器 D. G1 收集器 答案:D 解:Java垃圾收集器发展路径下图所示: 其 ...
- KnockoutJS 3.X API 第四章 数据绑定(1) 文本及样式绑定
目录 本节将介绍六种文本绑定方式: visible绑定 text绑定 html绑定 css绑定 style绑定 attr绑定 可见文本绑定(visible) 使用visible绑定,来控制DOM元素的 ...
- XML学习笔记7——XSD实例
在前面的XSD笔记中,基本上是以数据类型为主线来写的,而在我的实际开发过程中,是先设计好了XML的结构(元素.属性),并写好了一份示例,然后再反过来写XSD文件(在工具生成的基础上修改),也就是说,是 ...
- Cocos2d-x 3.2 学习笔记(十)Joystick 搖杆控件
最近想做格鬥遊戲,那麼就要有搖杆控件,不想去看別人的代碼就自己寫了個搖杆控件,實現起來很簡單. 話不多說,看代碼: #ifndef __Joystick__ #define __Joystick__ ...