PayPal支付功能实现
系统要添加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支付出现的支付页面应该是这样子的
<%--取消支付页面的地址设置 value=0 可以设置地址 value=1 不可以设置地址 --%><input type="hidden" runat="server" id="no_shipping" name="no_shipping" value="1" />
2)PayPal接受客户付款后,向notify_url通过Post方式发送IPN
3)服务器收到IPN后,必须将收到的POST信息原样返回给PayPal进行验证,PayPal通过词方法防范欺骗或“中间人”攻击
4)PayPal返回验证信息,通过验证为VERIFIED,不通过为INVALD
5)根据验证信息处理付款明细
IPN数据包含了付款过程的详细信息,通过获取并分析可以:
自定义网站对客户购物进行实时回复:以Email或者其它方式通知客户付款的状态;
自动履行相关操作:当收到IPN数据并确认付款状态已经完成后,可以立刻启动发货流程,或者虚拟货币的充值;
记录交易信息到数据库中。
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支付功能实现相关推荐
- uni-app:实现PayPal支付功能
一.相关文档或网址 1.uni-app官方文档地址:开通 | uni-app官网 2.paypal开发者中心:Applications - PayPal Developer 二.开发流程 1.开发前配 ...
- 境外 android 支付功能,Paypal向Android开发者提供应用内部支付功能
腾讯科技讯(编译/中涛)北京时间5月20日消息,据国外媒体报道,eBay旗下网络支付平台Paypal周三宣布,已面向Android手机平台的外部开发者发布了"移动支付库"(Mobi ...
- php paypal源码,PHP整合PayPal支付
简单整理一下PHP项目整合PayPal支付功能. 一.表单的构建: 二.IPN验证部分 class paypal { var $ipn_data = array(); // array contain ...
- asp.net paypal信用卡支付功能
前段时间有个客户网站需要用到信用卡支付功能,客户有个Website Payments Pro的帐号,第一次做这东西花了很多时间在上面,已做好运行了一段日子, 现在总结一下: 1. 先注册一个paypa ...
- java对接PayPal支付-自动续费功能
一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...
- android nfc 支付功能,PayPal宣布新版Android APP将支持NFC支付功能
据外媒报道,在巴塞罗那召开的世界移动通信大会(MWC)上,在线支付巨头宣布在即将到来的PayPal安卓新版本APP将支付NFC支付功能. 从2014年8月份开始,1800万的消费者都选择使用PayPa ...
- 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)
这次在项目中要实现订单功能,所以要完成在线支付,在线支付一般有网银支付和第三方支付(支付宝.paypal等)这两种途径,未简单起见,先完成支付宝在线支付功能,使用UTF-8编码 在正式测试之前,先准备 ...
- Android下集成Paypal支付
近期项目需要研究paypal支付,官网上的指导写的过于复杂,可能是老外的思维和中国人不一样吧.难得是发现下面这篇文章: http://www.androidhive.info/2015/02/andr ...
- django 实现电子支付功能
思路:调用第三方支付 API 接口实现支付功能.本来想用支付宝来实现第三方网站的支付功能的,但是在实际操作中发现支付宝没有 Python 接口,网上虽然有他人二次封装的的 Python 接口,但是对我 ...
- PayPal支付集成到自己Web网站
PayPal如何集成到B2C网站? 因为网上实在找不到集成教程,我习惯性的google了一下相关资料,发现关于paypal接口的中文文档并不多,也不详细,只好自己研究,还好paypal上的资料非常齐全 ...
最新文章
- AngularJs的UI组件ui-Bootstrap分享(六)——Tabs
- 城市轨道交通运营票务管理论文_【专业简介】城市轨道交通运营与管理
- Python练习-基于socket的FTPServer
- 【Python】过滤数组中的空值(空字符串''和None)
- java中有stdin_在java中听stdin的后台进程
- 什么是立即执行函数,有什么作用?
- 动态代理 and Listener监听器
- 快手大数据架构演进实录
- linux - mysql 异常:Ignoring query to other database
- 一起谈.NET技术,基于CallContextInitializer的WCF扩展导致的严重问题
- 数据中心201812-4
- Android 虚拟机技术为何至今依旧“屹立不倒”?
- Java程序员怎么迈向架构师
- OPenGL笔记--创建三维图形(立方体)
- 操作系统作业之银行家算法(c语言实现)
- Eclipse Debug不为人知的秘密
- python灰色波浪线_去除pycharm的波浪线
- 小半斤拔凉 支付Java 相关参考
- 微型计算机原理daa,单片微机原理、汇编与C51及接口技术(第2版)
- ECMA7 新标准概述
热门文章
- python 根据条件输出_python数据类型、输入输出、运算符、条件判断、循环
- linux pap认证,linux – pppd“同行拒绝认证”
- 玩转软件|通过汉化WINRAR,手把手教你如何汉化软件
- java发卡系统_基于java的网络收费验证系统和在线付费发卡
- MySQL 常用命令汇总
- 软件测试的意义究竟是什么?
- 对于分布式消息队列我有话说
- voip 客户端 android,基于Android平台的VoIP客户端开发与性能改进
- 网络流(Network Flow)
- 微信云开发实现点赞收藏评论功能