.Net集成PayPal的Demo

近来项目中需要使用Paypal(贝宝)支付,研究了一下接口,真是吐血,花了一个下午+一个晚上,屡败屡战,海淘了若干文档,终于尝试成功了,分享一下,希望对将要使用paypal的朋友有所帮助。

paypal提供3种类型的对外付款接口,可参考:https://cms.paypal.com/c2/cgi-bin/?cmd=_render-content&content_ID=pages_c2/profile_comparison_new&fli=true

我们这里采用标准的网页版本,其中标准的网页版本又分为三种实现方式:

1.按钮方式,也就是一个商品一个按钮

2.购物车方式,让paypal托管你的购物车

3.你自己的购物网站有购物车,付款时候将购物车数据提交到paypal即可付款

考虑自由度问题,当然我们需要第三种方式。

准备工作

1.到www.paypal.com中申请一个正式的账号,注意银行卡目前只能用信用卡和借记卡,并且需要支持不同币种的,否则可能开通失败。

2.用刚才申请的账号到https://developer.paypal.com/ 中创建开发者模拟账号,为啥?因为开发者账号测试不需要收费

这里需要创建两个账号,买家和卖家,默认系统会给你创建卖家的。

账号创建好了之后,注意修改每个账号的登录密码,在profile里改。

哦,忘记了,创建买家账号的时候,千万别忘记充值哦,充值金额<10000刀。

3.设置好了之后,我们到沙箱里登录卖家账号,单击链接 Enter Sandbox site,用Business类型账号登录,然后做如下设置

IPN即时付款通知的意义是什么呢?交互原理如下:

我们提交购物车到paypal,完成付款以后,paypal会想我们设置好的IPN代理,发送消息,从而使我们自己的程序得知是否付款成功,以备后续操作,而且这个操作是在后台调用的,其主要目的就是为了防止用户主动关闭浏览器,造成程序订单状态无法更新的问题。

付款自动返回设置,指的是完成付款之后跳转到我们自己网站的界面,这个是显示给用户看的,而且这个接收界面,paypal会发送相关订单数据,付款状态等到这个页面上,也就是“付款数据传输(可选)”这项,勾上之后在返回URL界面就可接收到相关数据了(用户付款完成后,恶意关闭的情况除外)

4.当然上面两个值在账号里面设置是全局的,你可以在具体的提交按钮里面设置

5.在我们的购物网站,实现购物车界面代码:

    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="upload" value="1">
<input type="hidden" name="business" value="jacsonwu-facilitator@gmail.com">
<input type="hidden" name="item_name_1" value="San Francisco Bay(32'X32')">
<input type="hidden" name="amount_1" value="1.00">
<input type="hidden" name="quantity_1" value="2">
<input type="hidden" name="item_name_2" value="Mount Hamilton(24'x15')">
<input type="hidden" name="amount_2" value="1.00">
<input type="hidden" name="quantity_2" value="1">
<input type="hidden" name="currency_code" value="CNY">
     <!--这里重写url,将覆盖全局设置-->
<input type="hidden" name="return" value="http://127.0.0.1:56508/ok.aspx">
<input type="Hidden" name="notify_url" value="http://127.0.0.1:56508/pp.aspx" />
<input type="submit" value="Upload Cart" alt="Make payments with PayPal-it's fastfree and secure!" />
</form>

6.付款成功界面代码,也就是return

string strFormValues = Request.Params.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 = "cmd=_notify-validate";
strNewValue = "cmd=_notify-synch&tx=" + Request.QueryString["tx"] + "&at=access_token你的";
//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();
if (strResponse.StartsWith("SUCCESS"))
{
}
else
{
}

7.IPN后台数据接收

//Post back to either sandbox or live
string 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 back
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] param = Request.BinaryRead(HttpContext.Current.Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(param);
string ipnPost = strRequest;
strRequest += "&cmd=_notify-validate";
req.ContentLength = strRequest.Length; //for proxy
//WebProxy proxy = new WebProxy(new Uri("http://url:port#"));
//req.Proxy = proxy; //Send the request to PayPal and get the response
StreamWriter streamOut = new StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close(); StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close(); // logging ipn messages... be sure that you give write
// permission to process executing this code
string logPathDir = ResolveUrl("");
string logPath = string.Format("{0}\\{1}.txt",
Server.MapPath(logPathDir), DateTime.Now.Ticks);
File.WriteAllText(logPath, ipnPost + " " + strResponse);
// if (strResponse == "VERIFIED")
{
//check the payment_status is Completed
//check that txn_id has not been previously processed
//check that receiver_email is your Primary PayPal email
//check that payment_amount/payment_currency are correct
//process payment
}
else if (strResponse == "INVALID")
{
//log for manual investigation
}
else
{
//log response/ipn data for manual investigation
}
Response.Write(strResponse);

.Net集成PayPal的Demo的更多相关文章

  1. 网页集成paypal支付

    在网站中集成paypal支付有两种方式: 1.通过paypal账户的按钮创建工具 进入paypal 商户账号,选择创建按钮工具,有包括添加到购物车.购买.租用三类按钮. 之后会生成一段代码,直接将代码 ...

  2. Android下集成Paypal支付

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

  3. 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

    开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩 ...

  4. ios native工程集成react-native的demo

    react-native看到了给现有工程添加react-native环境的时候碰到一个问题: 如何往工程中添加 package.json文件,以及node_modules是怎么来的? 我开始的时候以为 ...

  5. PHP语言开发Paypal支付demo的具体实现

    如果我们的应用是面向国际的.那么支付的时候通常会考虑使用paypal.以下为个人写的一个paypal支付示例,已亲测可行.paypal有个很不错的地方就是为开发者提供了sandbox(沙箱)测试功能. ...

  6. 网站集成Paypal

    国际化Paypal是一个不错的选择,现在很多的app都是H5,所以网站集成即可操作了. 最方便快捷的集成方式,目前Paypal的网站收款需要企业账号,不过它最开始的老版本是可以个人账号收款的.如下是个 ...

  7. Python3+Django2集成PayPal(贝宝)跨境支付三方接口以及订单查询和退款业务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_157 如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比 ...

  8. 集成paypal支付

    https://developer.paypal.com cocoapods 管理 引入 pod 'PayPal-iOS-SDK' 1.在appdelegate #import <PayPalM ...

  9. Android集成人脸识别demo分享

    本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...

随机推荐

  1. Java虚拟机参数设置(转)

    今天在加载一幅图片时,eclipse报出如下错误: “Exception in thread "main" java.lang.OutOfMemoryError: Java hea ...

  2. Linux 火狐浏览器安装Flash插入

    Linux系统安装完毕,找到Firefox浏览器和视频播放器不能总是提示安装Flash.而据火狐浏览器的提示Flash插件安装总是失败,能手动安装Flash插件啦. 到Flash官网:http://g ...

  3. STM32电源管理

     (1)3时钟模式 ①睡眠模式②停止模式③待机模式 1.睡眠模式:Cortex-M3内核(理解为CPU)停止工作,CPU供电1.8V有着,周边任何执行.执行 2.停机模式:全部时钟都停止,CPU电 ...

  4. Oracle EBS WMS特征(一)

    Oracle EBS WMS特征(一) (版权声明.我的原创或翻译的文章,如需转载,转载用于个人学习,转载请注明出处:否则,请与我联系,版权所有) Oracle WMS这是一个仓库管理,它是Oracl ...

  5. Xcode-5.1.1更改文件盯作者

    原来的文件默认是用户开机时的username ,网上说什么改通讯录事实上都是不正确的. 1.首先打开偏好设置,选择用户群组 2.进入用户界面 改动全名.此时要求你输入用户的password才干改动us ...

  6. 三星Galaxy s4(i9505)得到完美root权限教程

    三星Galaxy s4(i9505)完美获取root权限教程 论坛上贴吧上关于三星s4 i9505 root的介绍有非常多,方法多种多样.今天小编来介绍一种使用root软件来实现三星i9505一键ro ...

  7. eclipse 配置android sdk和maven

    首先下载 ADT-22.2.0.rar eclipse-jee-kepler-R-win32-x86_64.zip android SDK4.2.zip 分别解压在一个盘 将ADT里面的两个目录内容相 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

  9. hdu 1098 Ignatius's puzz

    有关数论方面的题要仔细阅读,分析公式. Problem Description Ignatius is poor at math,he falls across a puzzle problem,so ...

  10. Android编码标准

    只是练习是很难找工作那会儿在,简历基本上都是赶出去石沉大海,因为有项目开发没有实践经验.没有牛逼的背景.更重要的是,没有真才实学,虽然我在大学时读的是计算机专业,它可以被认为是一个技术教育.但--你知 ...