系统要添加PayPal支付功能,使用最简单的方式,在网页上添加一个PayPal的支付按钮,进入PayPal支付页面,支付成功后返回系统。

1、支付按钮添加

在支付页面创建一个Form表单,包含以下重要字段

    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_xclick"><input type="hidden" name="business" value="收款账号邮箱"><input type="hidden" name="item_name" value="商品描述"><input type="hidden" name="item_number" value="商品编号"><input type="hidden" name="currency_code" value="货币单位,如USD,EUR等"><input type="hidden" name="amount" value="支付金额100"><input type="hidden" name="notify_url" value="。。。" />  <!--交易后paypal返回网站地址--><input type="hidden" name="cancel_return" value="。。。" /> <!--客户取消交易后返回地址--><input type="hidden" name="return" value="。。。" />  <!--交易后返回地址--><input type="submit" value="PayPal"></form>

各字段的意思如上。Post以上表单,就会跳转到PayPal支付页面进行支付了。

由于我们这个系统使用WEBFORM开发的,支付页面已经有一个Form表单,Form不能嵌套,就将Form表单改成了DIV,通过js提交form表单。代码如下

<div class="" id="formDiv"><input type="hidden" runat="server" id="cmd" name="cmd">
<input type="hidden" runat="server" id="business" name="business">
<input type="hidden" runat="server" id="item_name" name="item_name">
<input type="hidden" runat="server" id="item_number" name="item_number">
<input type="hidden" runat="server" id="currency_code" name="currency_code">
<input type="hidden" runat="server" id="amount" name="amount">
<input type="hidden" runat="server" id="invoice" name="invoice" />
<input type="hidden" runat="server" id="notify_url" name="notify_url" />
<input type="hidden" runat="server" id="cancel_return" name="cancel_return" />
<input type="hidden" runat="server" id="return" name="return" />
<input type="button" id="btn_PayPal" value="PayPal支付" class="zf-paypai"/>
</div>$("#btn_PayPal").click(function () {var formDivInputNodes = document.getElementById("formDiv").getElementsByTagName("input");var tempForm = document.createElement("form");tempForm.action = "https://www.sandbox.paypal.com/cgi-bin/webscr";tempForm.method = "Post";tempForm.target = "_self";tempForm.style.display = "none";for (var i = formDivInputNodes.length-1; i >=0; i--) {tempForm.appendChild(formDivInputNodes[i]);}tempForm.acceptCharset = "GBK";document.charset = "GBK";document.body.appendChild(tempForm);tempForm.submit();document.body.removeChild(tempForm);})

说明:此处将form的编码格式设置成了GBK,是因为商品名称中有中文,设置成其它格式提交到PayPal页面会出现乱码的情况。

另外:此时PayPal支付出现的支付页面应该是这样子的

请注意红色框,这是地址栏。由于我们的系统已经生成订单,并且在生成订单的时候已经由客户输入并确认的订单地址,所以此处的地址显示会对客户造成误解。并且此处的地址是从客户的PayPal账号中获取的地址,和客户在我们系统中的地址难以统一,因此就想把这个删掉。很简单,在上面的Form提交的时候,加一个参数进去就好了。(找这个参数花了好长时间的)取消后如图
 <%--取消支付页面的地址设置 value=0 可以设置地址  value=1 不可以设置地址  --%><input type="hidden" runat="server" id="no_shipping" name="no_shipping" value="1" /> 
第二步 及时付款通知IPN,就是上面的 notify_url 的内容
买家付款结束,PayPal异步发送付款详细数据到notify_url,此时要检查付款的具体情况并且做出响应。
IPN通知示意图
(官方文档)
1)客户点击付款按钮进行付款
2)PayPal接受客户付款后,向notify_url通过Post方式发送IPN
3)服务器收到IPN后,必须将收到的POST信息原样返回给PayPal进行验证,PayPal通过词方法防范欺骗或“中间人”攻击
4)PayPal返回验证信息,通过验证为VERIFIED,不通过为INVALD
5)根据验证信息处理付款明细

IPN数据包含了付款过程的详细信息,通过获取并分析可以:
自定义网站对客户购物进行实时回复:以Email或者其它方式通知客户付款的状态;
自动履行相关操作:当收到IPN数据并确认付款状态已经完成后,可以立刻启动发货流程,或者虚拟货币的充值;
记录交易信息到数据库中。

以上是文档对IPN的主要介绍,下面上代码(C#)
try{//Post back to either sandbox or livestring strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";string strLive = "https://www.paypal.com/cgi-bin/webscr";HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);// Set values for the request backreq.Method = "POST";req.ContentType = "application/x-www-form-urlencoded";byte[] param = Request.BinaryRead(HttpContext.Current.Request.ContentLength);string strRequest = Encoding.ASCII.GetString(param);               string strNewRequest = strRequest + "&cmd=_notify-validate" ;req.ContentLength = strNewRequest.Length;ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;//Send the request to PayPal and get the responseStreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);streamOut.Write(strNewRequest);streamOut.Close();StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());string strResponse = streamIn.ReadToEnd();streamIn.Close();string strItemName = Request["item_name"].ToString().Trim();string strItemNumber = Request["item_number"].ToString().Trim();string strPaymentStatus = Request["payment_status"].ToString().Trim();string strPaymentAmount = Request["mc_gross"].ToString().Trim();string strPaymentCurrency = Request["mc_currency"].ToString().Trim();string strTxnId = Request["txn_id"].ToString().Trim();string strReceiverEmail = Request["receiver_email"].ToString().Trim();string strPayerEmail = Request["payer_email"].ToString().Trim();string strInvoice = Request["invoice"].ToString().Trim();if (strResponse == "VERIFIED"){if (strPaymentStatus.Equals("Pending")){string strPendingReason = Request["pending_reason"].ToString().Trim();WriteLog.Write("PayPal", "PayPal Payment: Pengding. Reason:"+strPendingReason, 0, "PayPal");return;}// 检查订单状态(payment_status)是否为完成(Completed)if (!"Completed".Equals(strPaymentStatus)){//do sth.}// 如果订单状态为已完成,将PayPal唯一交易号(txn_id)与已经处理的PayPal交易对照检查确保不重复//code // 检查收款人地址receiver_email is your Primary PayPal email//code// 检查价格和币种check that payment_amount/payment_currency are correct//code// process payment                    //code                                        }                else if (strResponse == "INVALID")                {                    //do somethings                    //code                }                else {//log response/ipn data for manual investigation //code                }} catch(Exception ex){ //code}

PayPal支付功能实现相关推荐

  1. uni-app:实现PayPal支付功能

    一.相关文档或网址 1.uni-app官方文档地址:开通 | uni-app官网 2.paypal开发者中心:Applications - PayPal Developer 二.开发流程 1.开发前配 ...

  2. 境外 android 支付功能,Paypal向Android开发者提供应用内部支付功能

    腾讯科技讯(编译/中涛)北京时间5月20日消息,据国外媒体报道,eBay旗下网络支付平台Paypal周三宣布,已面向Android手机平台的外部开发者发布了"移动支付库"(Mobi ...

  3. php paypal源码,PHP整合PayPal支付

    简单整理一下PHP项目整合PayPal支付功能. 一.表单的构建: 二.IPN验证部分 class paypal { var $ipn_data = array(); // array contain ...

  4. asp.net paypal信用卡支付功能

    前段时间有个客户网站需要用到信用卡支付功能,客户有个Website Payments Pro的帐号,第一次做这东西花了很多时间在上面,已做好运行了一段日子, 现在总结一下: 1. 先注册一个paypa ...

  5. java对接PayPal支付-自动续费功能

    一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...

  6. android nfc 支付功能,PayPal宣布新版Android APP将支持NFC支付功能

    据外媒报道,在巴塞罗那召开的世界移动通信大会(MWC)上,在线支付巨头宣布在即将到来的PayPal安卓新版本APP将支付NFC支付功能. 从2014年8月份开始,1800万的消费者都选择使用PayPa ...

  7. 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)

    这次在项目中要实现订单功能,所以要完成在线支付,在线支付一般有网银支付和第三方支付(支付宝.paypal等)这两种途径,未简单起见,先完成支付宝在线支付功能,使用UTF-8编码 在正式测试之前,先准备 ...

  8. Android下集成Paypal支付

    近期项目需要研究paypal支付,官网上的指导写的过于复杂,可能是老外的思维和中国人不一样吧.难得是发现下面这篇文章: http://www.androidhive.info/2015/02/andr ...

  9. django 实现电子支付功能

    思路:调用第三方支付 API 接口实现支付功能.本来想用支付宝来实现第三方网站的支付功能的,但是在实际操作中发现支付宝没有 Python 接口,网上虽然有他人二次封装的的 Python 接口,但是对我 ...

  10. PayPal支付集成到自己Web网站

    PayPal如何集成到B2C网站? 因为网上实在找不到集成教程,我习惯性的google了一下相关资料,发现关于paypal接口的中文文档并不多,也不详细,只好自己研究,还好paypal上的资料非常齐全 ...

最新文章

  1. AngularJs的UI组件ui-Bootstrap分享(六)——Tabs
  2. 城市轨道交通运营票务管理论文_【专业简介】城市轨道交通运营与管理
  3. Python练习-基于socket的FTPServer
  4. 【Python】过滤数组中的空值(空字符串''和None)
  5. java中有stdin_在java中听stdin的后台进程
  6. 什么是立即执行函数,有什么作用?
  7. 动态代理 and Listener监听器
  8. 快手大数据架构演进实录
  9. linux - mysql 异常:Ignoring query to other database
  10. 一起谈.NET技术,基于CallContextInitializer的WCF扩展导致的严重问题
  11. 数据中心201812-4
  12. Android 虚拟机技术为何至今依旧“屹立不倒”?
  13. Java程序员怎么迈向架构师
  14. OPenGL笔记--创建三维图形(立方体)
  15. 操作系统作业之银行家算法(c语言实现)
  16. Eclipse Debug不为人知的秘密
  17. python灰色波浪线_去除pycharm的波浪线
  18. 小半斤拔凉 支付Java 相关参考
  19. 微型计算机原理daa,单片微机原理、汇编与C51及接口技术(第2版)
  20. ECMA7 新标准概述

热门文章

  1. python 根据条件输出_python数据类型、输入输出、运算符、条件判断、循环
  2. linux pap认证,linux – pppd“同行拒绝认证”
  3. 玩转软件|通过汉化WINRAR,手把手教你如何汉化软件
  4. java发卡系统_基于java的网络收费验证系统和在线付费发卡
  5. MySQL 常用命令汇总
  6. 软件测试的意义究竟是什么?
  7. 对于分布式消息队列我有话说
  8. voip 客户端 android,基于Android平台的VoIP客户端开发与性能改进
  9. 网络流(Network Flow)
  10. 微信云开发实现点赞收藏评论功能