一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

.net是如何接入支付宝的支付接口的

时间:2017-05-16 编辑:简简单单 来源:一聚教程网

H5手机网站接入支付宝的支付接口,推荐使用支付宝提供的SDK来快速开发

我使用的是SDK开发

引用命名空间

 代码如下 复制代码

usingAop.Api;

usingAop.Api.Request;

usingAop.Api.Response;

usingAop.Api.Util;

首页需要定义一些常量

 代码如下 复制代码

staticstringserverUrl ="https://openapi.alipaydev.com/gateway.do";

   staticstringapp_id ="**"; //开发者的应用ID

   staticstringformat ="JSON";

   staticstringcharset ="utf-8";

   staticstringsign_type ="RSA2";//签名格式

   staticstringversion ="1.0";

   stringUID ="2088102169707816";//卖家支付宝账户号

   //商户私钥

   staticstringmerchant_private_key ="***";

   //支付宝公钥

   staticstringalipay_public_key ="***";

这里的app_id,merchant_private_key,alipay_public_key 我就没有列出来了,获取的方法需要自己去支付宝平台完成一些操作进行获取

在用户点击网站付款时,我们需要唤醒支付宝,来进行支付

 代码如下 复制代码

publicstringH5RequestPayWay(OrderPO order)

    {

      IAopClient client =newDefaultAopClient(serverUrl, app_id, merchant_private_key, format, version, sign_type, alipay_public_key, charset,false);

      AlipayTradeWapPayRequest request =newAlipayTradeWapPayRequest();

      stringaddress="http://m."+ PathLogic1.RootDomain;

      request.SetReturnUrl(address+"/WebPay/AlipayPayResult");//同步请求

      request.SetNotifyUrl(address +"/WebPay/AsyncPay");//异步请求

      var lstDetail = Context.Data.OrderDetail.Where(x => x.OrderNo == order.OrderNo).ToSelectList(x=>new{ x.SkuName});

      StringBuilder sb =newStringBuilder();

      for(inti = 0; i < lstDetail.Count(); i++)

      {

        sb.Append(lstDetail[i].SkuName +",");

      }

      request.BizContent ="{"+

  "\"body\":\""+sb.ToString().Substring(0,sb.Length-1)+"\","+

  "\"subject\":\"袋鼠巴巴商品支付\","+

  "\"out_trade_no\":\""+order.OrderNo+"\","+

  "\"timeout_express\":\"90m\","+

  "\"total_amount\":"+(order.TotalAmount.Value+order.TotalFreight.Value)+","+

  "\"product_code\":\"QUICK_WAP_PAY\""+

  " }";

  

      AlipayTradeWapPayResponse response = client.pageExecute(request);

       returnresponse.Body;

    }

具体发送给支付宝的参数,自行去查看

执行方法后,买家输入自己的支付宝账号密码进行支付,支付成功的结果,支付宝会以post的方式异步请求你的SetNotifyUrl的地址

这个SetNotifyUrl的地址必须要外网可以访问,支付宝的请求才能进来

买家支付成功,商家修改订单状态和数据库的操作,都在异步请求中执行

同步请求

 代码如下 复制代码

publicActionResult AlipayPayResult()

    {

      ViewBag.result ="success";

      returnView("PayResult");

    }

     ///

    /// 验证通知数据的正确性

    ///

    ///

    ///

    ///

    /// 

privateSortedDictionaryGetRequestPost()

    {

      inti = 0;

      SortedDictionarysArray =newSortedDictionary();

      NameValueCollection coll;

      //Load Form variables into NameValueCollection variable.

      coll = Request.Form;

  

      // Get names of all forms into a string array.

      String[] requestItem = coll.AllKeys;

  

      for(i = 0; i < requestItem.Length; i++)

      {

        sArray.Add(requestItem[i], Request.Form[requestItem[i]]);

      }

  

      returnsArray;

    }

///

   /// 验签

   ///

   ///

   ///

   publicBoolean Verify(SortedDictionaryinputPara)

   {

     DictionarysPara =newDictionary();    

     Boolean verifyResult = AlipaySignature.RSACheckV1(inputPara, alipay_public_key, charset,sign_type,false);

     returnverifyResult;

   }

异步请求:

 代码如下 复制代码

[HttpPost]

   publicvoidAsyncPay()

   {

     SortedDictionarysPara = GetRequestPost();//将post请求过来的参数传化为SortedDictionary

     if(sPara.Count > 0)

     {

       AlipayTradeWayPayServer pay =newAlipayTradeWayPayServer();

       Boolean VerifyResult = pay.Verify(sPara);//验签if (VerifyResult)

       {

         try

         {

            //商户订单号

           stringout_trade_no = Request.Form["out_trade_no"];

           //支付宝交易号

           stringtrade_no = Request.Form["trade_no"];

           //支付金额

           decimaltotal_amount = Request.Form["total_amount"].ConvertType(Decimal.Zero);

           //实收金额

           //decimal receipt_amount = Request.Form["receipt_amount"].ConvertType(Decimal.Zero);

           //交易状态

           stringtrade_status = Request.Form["trade_status"];

           //卖家支付宝账号

           stringseller_id = Request.Form["seller_id"];

 

           //商品描述

           stringbody = Request.Form["body"];

           //交易创建时间

           DateTime gmt_create = DateTime.Parse(Request.Form["gmt_create"]);

           //交易付款时间

           DateTime gmt_payment = DateTime.Parse(Request.Form["gmt_payment"]);

           stringappid = Request.Form["app_id"];

           WriteError("验证参数开始");

           Boolean DataValidity = pay.CheckInform(out_trade_no, total_amount, seller_id, appid);//商家判断参数时候是否匹配if (DataValidity)

           {

             if(Request.Form["trade_status"] =="TRADE_FINISHED")

             {

               AlipayWayPayPO model = CreateAlipayWayPay(out_trade_no, trade_no, trade_status, gmt_create, gmt_payment);

               pay.PaySuccess(out_trade_no, model, Server.MapPath("~/"+ DateTime.Today.ToString("yyMMdd") +".txt"));//修改订单

               //注意:

               //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

             }

             elseif(Request.Form["trade_status"] =="TRADE_SUCCESS")

             {

               AlipayWayPayPO model = CreateAlipayWayPay(out_trade_no, trade_no, trade_status, gmt_create, gmt_payment);

               pay.PaySuccess(out_trade_no, model, Server.MapPath("~/"+ DateTime.Today.ToString("yyMMdd") +".txt"));//修改订单

               //注意:

               //付款完成后,支付宝系统发送该交易状态通知

             }

             else

             {

 

             }

 

             //――请根据您的业务逻辑来编写程序(以上代码仅作参考)――

 

             Response.Write("success");//请不要修改或删除

 

             /////////////////////////////////////////////////////////////////////////////////////////////////////////////

           }

         }

         catch(Exception ex)

         {

             

         }

       }

       else//验证失败

       {

         Response.Write("fail");

       }

     }

     else

     {

       Response.Write("无通知参数");

     }

   }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本网站。


热门栏目