c#+asp.net实现paypal接口支付

第一步、将购物车生成的单据信息绑定显示在要提交表单中并发送支付请求如下:

 <form id="form1" name="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">
          相关的单据信息如商品名称,总金额,订单号等。
<input name="Paypal" type="button" style="height: 25px; margin-right: 20px; cursor: pointer;
                            margin-left: 40px; width: 80px;" value="Pay Now" onclick="javaScript:if(submitorder()==true){this.form.submit();}" />
<div style="display: none">
<!-- 支付方式:-->
<input type="text" name="cmd" value="_xclick" /><br />
<!--这里填写你的paypal账户email如你的qq邮箱注册的paypay帐号  邮箱: -->
<input type="hidden" name="business" value="[email protected]" /><br />
<!--订单信息: 这里填写客户订单的一些相关信息,当客户连到paypal网站付款的时候将看到这些信息 【写备注】-->
<input type="hidden" name="item_name" value=" Confirm Order information" /><br />
<!--订单编号-->
<input type="hidden" name="item_number" value="<%=_ordernum %>" /><br />
<!--订单总金额 -->
<input type="hidden" name="amount" value="<%=_amount %>" /><br />
<!-- 订单数量: <%=_Number %> -->
<input type="hidden" name="quantity" value="1" /><br />
<!-- 订单币种: 订单总金额对应的货币类型 ,客户可以用其他币种来付款,比如这里订单币种是美元USD,客户可以用欧元EUR来付款,由paypal根据当前汇率自动实现币种之间的换算-->
<input type="hidden" name="currency_code" value="USD" /><br />
<!--编码格式 -->
<input type="hidden" name="charset" value="utf-8" /><br />
<%-- <input type="hidden" name="noshipping" value="1"><br />--%>
<!--运费 -->
<input type="hidden" name="shipping" value="<%=ReceivedPostFee.ToString("f2") %>" /><br />
<!--验证加密 password_validate  可额外设置加密方式-->
<input type="hidden" name="custom" value="<%=itemname %> " /><br />
<!-- 返回的路径:付款后提示给客户如支付成功。单号是多少。金额是多少,大概什么时候收到货等-->
<input type="hidden" name="return" value="backurl_info" /><br />
<!-- 取消后返回的页面:如用户不想支付可以跳到指定的页面-->
<input type="hidden" name="cancel_return" value="cancelbackurl_info" />
<!--这里显示商户的logo图片在提交的时候显示,如果没有则显示邮箱的账户-->
<input type="hidden" name="image_url" value="url/pay.png" />
<!--这里告诉paypal付款的通信url,即当客户付款后调用这个url通知系统-->
<input type="text" name="notify_url" style="width: 500px" value="responsepost_url" /><br />
</div>

</form>

 第二步、paypal服务器接收通信请求后返回数据进行校验,根据校验结果做相应的处理:

 private DataContext db = new DataContext();
    protected void Page_Load(object sender, EventArgs e)
    {

        // CUSTOMIZE THIS: This is the seller‘s Payment Data Transfer authorization token.
        // Replace this with the PDT token in "Website Payment Preferences" under your account.

        string authToken = "商户号【authtoken】一系列长串的字符,注册paypal商户号上会有";
        string txToken = Request.QueryString["tx"];
        string query = "cmd=_notify-synch&tx=" + txToken + "&at=" + authToken;

        //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";
        req.ContentLength = query.Length;

        //Send the request to PayPal and get the response
        StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
        streamOut.Write(query);
        streamOut.Close();
        StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
        string strResponse = streamIn.ReadToEnd();
        streamIn.Close();

        Dictionary<string, string> results = new Dictionary<string, string>();
        if (strResponse != "")
        {
            StringReader reader = new StringReader(strResponse);
            string line = reader.ReadLine();

            if (line == "SUCCESS")
            {
               while ((line = reader.ReadLine()) != null)
                {
                    results.Add(line.Split(‘=‘)[0], line.Split(‘=‘)[1]);
                }
              }
            else if (line == "FAIL")
            {
                  //退款后会返回信息。
                  Response.Write("Unable to retrive transaction detail");
            }
        }
        else
        {
           Response.Write("ERROR");
        }

    }

第三、根据支付请求返回来的参数进行验证是否支付成功并修改订单状态和提示客户相关支付信息等:

private DataContext db=new DataContext();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string st = "Completed";
            string item_numberget = "";
            string tx = "";
            if (StringHandler.isCheckQueryString(Request["tx"].ToString().Trim()))
            {
                tx = Request["tx"].ToString().Trim();  //税编号
            }
            string cm = "";
            if (StringHandler.isCheckQueryString(Request["cm"].ToString().Trim()))
            {
                cm = Request["cm"].ToString().Trim();  ///加密
            }

            if (StringHandler.isCheckQueryString(Request["st"].ToString().Trim()))
            {
                st = Request["st"].ToString().Trim();  ///状态
            }

            string amt = "";
            if (StringHandler.isCheckQueryString(Request["amt"].ToString().Trim()))
            {
                amt = Request["amt"].ToString().Trim();  ///购买总额
            }
            string cc = "";
            if (StringHandler.isCheckQueryString(Request["cc"].ToString().Trim()))
            {
                cc = Request["cc"].ToString().Trim();  ///币种USD(美元)
            }

            if (StringHandler.isCheckQueryString(Request["item_number"].ToString().Trim()))
            {
                item_numberget = Request["item_number"].ToString().Trim();  ///get的返回值订单号
            }
            if (st == "Completed" && item_numberget != "")
            {
                //修改对应的单据状态如已支付。并提示支付成功给用户知道
                this.lblstatus.InnerText = "Paid already.";
            }
            else
            {
                 //支付失败
                this.lblstatus.InnerText = "Error";
            }
        }
    }


 第四、aspx显示支付结果并数秒后自动跳转到指定页面,从而实现整个支付流程完成交易: 
 

<script type="text/javascript">
        var num = 5;
        function countDown() {
            if (num >= 0) {
                var str = ‘‘;
                str += ‘Will return to the home page in ‘ + num + ‘ seconds.‘;
                document.getElementById(‘daojishi‘).innerHTML = str;
                num--;
                setTimeout(countDown, 1000);
            }
            else {
                window.location.href = "home.aspx";
            }
        }
        window.onload = countDown;
    </script>



时间: 2024-11-14 14:10:56

c#+asp.net实现paypal接口支付的相关文章

ASP Net/C - PayPal接口文档

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 最近做了一个在线支付,哎呀,把我给折腾的可不轻.搞了很长时间.    PayPal 是一家 eBay 公司,它是在线付款解决方案的全球领导者,在全世界有超过七千一百六十万个帐户用户.PayPal 可由易趣买家和卖家.在线零售商和其他商家在 56 个市场以 6 种货币使用:加元 欧元 英镑 美元 日元 澳元:PayPal 快速.安全而

[label][转载][paypal]paypal在线支付接口的WEB语言设置

http://stephen830.iteye.com/blog/274072 ★★★ 本篇为原创,需要引用转载的朋友请注明:< http://stephen830.iteye.com/blog/274072 > ,谢谢支持!★★★ 以前曾经写过一篇关于<paypal在线支付的通信接口 http://stephen830.iteye.com/blog/254565 >的文章.对以前文章的一个补充: 自从国际paypal增加了繁体中文的WEB版本后,许多早先集成paypal接口的系统

如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问。

由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题. 刚开始没做任何处理,用jsonp的方式调用 web api 接口,总是报一个错误,如下: 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignature":"嫁人要嫁程序员,钱多话少死得早"} 然而,JSONP请求期望得到这样的JSON

ASP.NET实现支付宝接口功能

最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下: 一.下载支付宝接口包 下载地址: https://b.alipay.com/order/productDetail.htm?productId=2012111200373124&tabId=4#ps-tabinfo-hash 具体如何下载,我就不在罗嗦了-- 很多人反映,用支付宝的接口到最后面会出现验证错误.其实,这里需要对接口程序进行一下改造.需要添加几个自定义函数.为了

解决php支付宝接口支付时会跳到一个确定按钮页

php支付宝接口成功接入后,发现支付时,中间会跳到一个带有确定按钮的页面,这个很影响用户体验,该怎么解决呢? 检查代码发现 alipayapi.php 有这么一段代码: $alipaySubmit = new AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter,"post", "确认"); echo $html_text; 其中'确定'按钮就

Asp.Net WebAPI配置接口返回数据类型为Json格式

一.默认情况下WebApi 对于没有指定请求数据类型类型的请求,返回数据类型为Xml格式 例如:从浏览器直接输入地址,或者默认的XMLRequest,或者AngularJs的get请求等. 对于有循环引用的也会抛出异常""ObjectContent`1"类型未能序列化内容类型"application/xml; charset=utf-8"的响应正文." 二.设置返回格式为Json数据 1.修改配置,这对所有的接口都生效 找到Global.asax

关于 第三方接口支付的时候 采用post提交的方式,有两种 一种是通过 curl来进行,一种是通过js当页面加载完后跳转

这是第一种.通过javascript页面加载完后,对表单采用 post方式提交给 第三方接口----- echo <<<_END<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.

Asp.net MVC集成stripe支付

1.注册Stripe账号 https://stripe.com 初始时账号是TEST模式,需要激活账号才能进入LIVE模式:点击 "Your Account" -> "Account Settings",出现如下弹出框: 如果是TEST模式,请使用Test Secret Key和Test Publishable Key,否则请使用LIVE相关的两个Key:具体如何使用,请继续往下看 2.安装Stripe 使用NuGet安装Stripe,通过搜索会找到Strip

asp.net实现IHttpModule接口注意事项

IHttpModule向实现类提供模块初始化和处置事件. IHttpModule包含兩個方法: public void Init(HttpApplication context);public void Dispose(); Init():这个方法接受一个HttpApplication对象,HttpApplication代表了当前的应用程序,我们需要在这个方法内注册 HttpApplication对象暴露给客户端的事件.可见,这个方法仅仅是用来对事件进行注册,而实际的事件处理程序,需要我们另外写