zoukankan      html  css  js  c++  java
  • PayPal集成标准版案例(asp.net)关键源码

    Paypal国际版网站集成简易教程(一):序言
    本文介绍如何在自己网站上集成paypal标准版支付,是从百度文库中找到的,要感谢下这位作者把自己的经验心得分享出来,毕竟paypal集成中文的教程非常少。

    要分为序言、支付按钮、返回信息方式(IPN&PDT)、实例四部分组成

    Paypal国际版网站集成简易教程(二):快速加入支付按钮
    本篇主要介绍如何在你的网站上快速加入paypal支付按钮,通过这个按钮,人们可以方便快速的付款到你的paypal帐户。

    首先,你需要注册一个paypal帐户,帐户类型分为Personal(个人)、Premier(高级)和Business(商业),他们的差别对于开发者来说主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息;Premier和Business当然就提供了IPN和PDT功能,能够在客户支付成功后,将交易信息传给指定的网站,用来二次使用。

    这里插进来介绍一下paypal sandbox,也就是沙盒,是paypal提供给开发者的一个工具,非常好用,你可以在https://developer.paypal.com/注册和使用它。登录以后可以新建帐户,设置余额和帐户类型,有一点要注意,每次使用时必须先登录sandbox才能使用新建的那些帐户。Sndbox里面有个测试工具,可以发送IPN的,以后会用到。

    接下来是按钮的代码,很简单,就是一个普通的网页表单代码:
    程序代码
    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="sample@sample.com">
    <input type="hidden" name="item_name"
    value="Item Name Goes Here">
    <input type="hidden" name="item_number"
    value="Item Number Goes Here">
    <input type="hidden" name="amount" value="100.00">
    <input type="hidden" name="no_shipping" value="2">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="bn" value="IC_Sample">
    <input type="image" src="https://www.paypal.com/
    en_US/i/btn/x-click-but23.gif"
    name="submit" alt="Make payments with payPal - it's fast,
    free and secure!">
    <img alt=""
    src="https://www.paypal.com/en_US/i/scr/pixel.gif"
    width="1" height="1">
    </form>

    如果使用sandbox,action地址改成https://www.sandbox.paypal.com/cgi-bin/webscr即可,上面这段还是很容易理解的,看下name和value基本上就能知道每个值的含义了。

    保存用浏览器打开,就会看到一个paypal的按钮,点击过去按照提示操作,就能付款到business指定值的帐户了。

    这就是一个最简单的paypal支付按钮。

    再下一篇中会讲一下如何在付款成功之后,将信息返回到你的网站,大部分需求都是客户完成付款后返回信息到网站的数据库,记录网站客服的交易信息。

    Paypal国际版网站集成简易教程(三):IPN的使用
    引用内容
    什么是即时付款通知IPN
    当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分)发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情况并做出相应的响应。这个过程我们称作即时付款通知(简称 IPN)。

    相信大部分网站集成Paypal都希望能够实现客户支付完成后返回信息到自己的网站,然后处理这些信息。比如客户在你的网站上购买了一个产品,通过Paypal完成了支付,接着Paypal告诉你的网站客户完成了支付以及支付信息,最后你的网站将这些信息记录到你自己的数据库中,并且将你的客户订单状态设为已支付,接着你就可以进行一系列的相关订单的后续操作。
    IPN就能帮助我们实现这个功能,IPN示意图如下(来自Paypal.com):

    当客户完成支付,Paypal会在后台通过post方式向你的服务器传送交易数据,来实现网站集成的功能。

    接下来我们就来看IPN的实现方法。
    第一步,你需要一个sandbox的帐号,这很重要,因为它能让你随心所欲的进行测试,而不用担心资金在天上飞。注册地址:https://developer.paypal.com/
    第二步,登陆sandbox,新建一个商家帐号(卖方)和一个客户账号(买方),其中卖方帐号必须是Premier或者Business,不然无法使用IPN功能。


    新建买家帐号的时候记得在Account Balance中加上金额,不然你就没钱买东西了,如果paypal.com的帐号也能这样加钱多好。
    新建完两个帐号:


    卖家帐号的test mode要设为enabled。
    选中business帐号,点击下面的Enter Sandbox Test Site进入sandbox Test Site,登录,就像普通Paypal帐号的管理页面一样。


    点击Profile,在Selling Preferences中选择Instant Payment Notification Preferences,点击edit加入IPN信息返回的地址,记得勾上前面那个选项,我是用.net写的接受文件,所以我的IPN地址是http://www.chenchen.org/ipn.aspx,地址只要能在互联网上访问到就可以了。


    在Profile -> Selling Preferences ->Website Payment Preferences选项中,有一个Auto Return的选项,将它设为on,并且在下面的return地址中填入你希望的客户支付完成后返回的地址:


    以上就完成了商家端的设置。

    接下来是你网站上ipn.aspx文件的编写,这个是用来接收支付数据的,是非常关键的一个文件。
    文件环境,.net 2.0,语言C#。
    Ipn.aspx文件:此文件不用修改任何东西,代码都在cs文件中。
    Ipn.aspx.cs文件:关键代码

    定义一个VerifyIPN()函数:


    程序代码
    bool VerifyIPN()
    {
    string strFormValues = Request.Form.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 = strFormValues + "&cmd=_notify-validate";
    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();

    return strResponse == "VERIFIED";
    }

    这段代码的作用是判断IPN信息是否来自Pyapal,如果不进行判断,那么恶意用户完全可以模拟一个信息post到你的网站上,让你认为订单已经完成支付,所以,必须首先对接受到的信息进行验证。

    代码的基本原理,serverURL定义了验证地址,sandbox为:https://www.sandbox.paypal.com/cgi-bin/webscr,Paypal.com就是https://www.paypal.com/cgi-bin/webscr
    将paypal发送过来的所有信息加上一个&cmd=_notify-validate参数,表示对这个信息进行验证,全部发送回paypal验证,如果信息确实存在,则返回VERIFIED字符串。
    验证成功后,就可以用如下形式获得交易信息:
    程序代码
    string ppTx = Request.Form["txn_id"].ToString();
    string ppStatus = Request.Form["payment_status"].ToString();
    string ppDate = Request.Form["payment_date"].ToString();
    string ppItem = Request.Form["item_name"].ToString();
    string ppPrice = Request.Form["mc_gross"].ToString();

    每个变量的解释可以参考Paypal网站上的说明,我这里就不再重复。

    .cs代码结构如下:

    程序代码
    public partial class paypal_ipn : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    if (VerifyIPN())//验证成功
    {
    string ppTx = Request.Form["txn_id"].ToString();//获取post中的各项变量值

    执行将数据写入数据库等操作
    }
    }
    bool VerifyIPN()
    {
    具体代码见上。
    }
    }

    这样,就实现了将支付信息传回网站的功能。注:当交易状态发生改变时,paypal也会返回一个ipn,比如完成支付,退款等等。

    介绍一下sandbox中IPN测试工具,登陆sandbox主帐号,就是你在sandbox上注册的那个,不是那些卖家/买家帐号。
    选择Test Tools -> Instant Payment Notification (IPN) Simulator:

    输入你的ipn接受文件地址,选择ipn信息的方式,然后会让你填具体信息内容,再点击Send IPN,就能模拟一个ipn到你网站的页面,可以用来测试IPN是否正常工作。

    不过这个工具有个小BUG,就是发送的IPN里不包括contact_phone这个变量,但是实际的IPN里是有的,这里要注意一下。
    注:可以在商家帐号的Profile -> Selling Preferences ->Website Payment Preferences中,选择Contact Telephone Number这一栏,来确定是否需要发送买家联系电话。
    通过IPN,你的网站就开始从真正意义上的集成了Paypal。

    附:
    创建“Buy Now”按钮PayPal可以让您轻松地通过您的网站接受单件物品的付款。“Buy Now”(立即购买)按钮可以在几分钟内实施,让来自PayPal数百万用户的商家和捐赠人以及网络上的任何其他买家轻松访问您的网站。
    那如何在您自己的网站上创建一个“Buy Now”按钮呢?很简单,如图2-1,这里我们集成了PayPal 的“Buy Now”按钮;

    图2-1 立即购买Buy Now示例


    创建这个“Buy Now”按钮有两种方法:
    方法1-登陆PayPal网站自动创建
    您可以通过登陆PayPal网站自动为您创建“Buy Now”按钮。创建方法请参考 “PayPal网站付款标准版交易方式确认集成指南”。

    方法2-用网页编辑器直接编写代码
    利用您喜欢的网页编辑器(如DreamWeaver)直接编辑HTML代码,在您想要出现“Buy Now”按钮的位置上插入以下示例代

    • <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    • <input type="hidden" name="cmd" value="_xclick">
    • <input type="hidden" name="business" value="paypal@yoursite.com">
    • <input type="hidden" name="item_name" value="SIGMA SD1000">
    • <input type="hidden" name="amount" value="399.00">
    • <input type="hidden" name="currency_code" value="USD">
    • <input type="hidden" name="lc" value="US">
    • <input type="hidden" name="return" value="http://www.yoursite.com/thanks.html">
    • <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
    • </form>

    其中:
    第1、2、10行是必须且不可更改得;
    第3行用于设置您得PayPal账户,即修改粗体部分(下同);
    第4,5行设置商品得属性,包括商品描述,价格;
    第6行用于设置货币种类,关于货币描述请参考附录2;
    第7行用于设置目标客户国家所在地,其值可参考附录6;
    第8行用于设置客户付完款后返回您网站的地址,具体请参考PDT/IPN参考文档;
    第9行在一般情况下无需改动。
    除此之外,您可以根据实际需要增加、修改或删除一些变量。
    所有“Buy Now”按钮可用变量您可以参考“集成指南”文档中“HTML示例与立即购买,捐赠和购物车变量”部分;也可以访问英文网站:
    https://www.paypal.com/Integrati ... able-reference.html
    创建“Shopping Cart”按钮如果您的网站还没有集成购物车功能,您可以通过创建“Add to Cart”按钮直接使用PayPal的购物车。
    如果您的网站已经有自己的购物车或者已经集成了第三方购物车的功能,那您可以通过创建“Upload Cart”按钮将您的购物车明细上传给PayPal并通过PayPal进行付款;您也可以为已有购物车生成一个订单,并通过创建PayPal的“Buy Now”按钮进行付款(其中:商品名称可以为您的订单号,商品价格可以为订单总价)。

    常见问题:若在您的“Buy Now”按钮中添加了变量“invoice”(订单标识号),则应保证每次付款中的“invoice”号码唯一;若重复付款,PayPal 将提示您,如下图所示:

    在所有涉及到价格的变量中,其数值都只精确到小数点后面两位;若其中一个数值精确到两位以上或者格式不对时,PayPal将提示您发生错误,如下图所示:

    如果您为您的网站付款流程页面定义了LOGO,则该LOGO图片必须存放在一个HTTPS服务器上,以避免出现一些安全警告,如下图所示:
     

  • 相关阅读:
    试用solace 消息平台
    mqtt5 share subscription 简单说明
    文件批量重命名神器:Bulk Rename Utility
    Elasticsearch入门,这一篇就够了
    burp suite使用(一) --- 抓包,截包,改包
    BurpSuite安装和配置
    ORA-01779: 无法修改与非键值保存表对应的列”中涉及的概念和解决方法
    一个非常有用的函数——COALESCE
    ORA-01779: cannot modify a column which maps to a non-key-preserved table
    Oracle批量、大量Update方法总结
  • 原文地址:https://www.cnblogs.com/robinli/p/2999638.html
Copyright © 2011-2022 走看看