栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > asp

.net接入支付宝的支付接口

asp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.net接入支付宝的支付接口

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

我使用的是SDK开发

引用命名空间

using Aop.Api;
using Aop.Api.Request;
using Aop.Api.Response;
using Aop.Api.Util;

首页需要定义一些常量

 static string serverUrl = "https://openapi.alipaydev.com/gateway.do";
    static string app_id = "**";  //开发者的应用ID
    static string format = "JSON";
    static string charset = "utf-8";
    static string sign_type = "RSA2"; //签名格式
    static string version = "1.0";
    string UID = "2088102169707816";//卖家支付宝账户号
    //商户私钥
    static string merchant_private_key = "***";
    //支付宝公钥
    static string alipay_public_key = "***";

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

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

public string H5RequestPayWay(OrderPO order)
    {
      IAopClient client = new DefaultAopClient(serverUrl, app_id, merchant_private_key, format, version, sign_type, alipay_public_key, charset, false);
      AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
      string address= "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 = new StringBuilder();
      for (int i = 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);
return response.Body;
    }

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

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

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

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

同步请求

public ActionResult AlipayPayResult()
    {
      ViewBag.result = "success";
      return View("PayResult");
    }

     /// 
    /// 验证通知数据的正确性
    /// 
    /// 
    /// 
    /// 
    ///  
private SortedDictionary GetRequestPost()
    {
      int i = 0;
      SortedDictionary sArray = new SortedDictionary();
      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]]);
      }

      return sArray;
    }
 /// 
    /// 验签
    /// 
    /// 
    /// 
    public Boolean Verify(SortedDictionary inputPara)
    {
      Dictionary sPara = new Dictionary();    
      Boolean verifyResult = AlipaySignature.RSACheckV1(inputPara, alipay_public_key, charset,sign_type,false);
      return verifyResult;
    }

异步请求:

 [HttpPost]
    public void AsyncPay()
    {
      SortedDictionary sPara = GetRequestPost();//将post请求过来的参数传化为SortedDictionary
      if (sPara.Count > 0)
      {
 AlipayTradeWayPayServer pay = new AlipayTradeWayPayServer();
 Boolean VerifyResult = pay.Verify(sPara);//验签if (VerifyResult)
 {
   try
   {
      //商户订单号
     string out_trade_no = Request.Form["out_trade_no"];
     //支付宝交易号
     string trade_no = Request.Form["trade_no"];
     //支付金额
     decimal total_amount = Request.Form["total_amount"].ConvertType(Decimal.Zero);
     //实收金额
     //decimal receipt_amount = Request.Form["receipt_amount"].ConvertType(Decimal.Zero);
     //交易状态
     string trade_status = Request.Form["trade_status"];
     //卖家支付宝账号
     string seller_id = Request.Form["seller_id"];

     //商品描述
     string body = Request.Form["body"];
     //交易创建时间
     DateTime gmt_create = DateTime.Parse(Request.Form["gmt_create"]);
     //交易付款时间
     DateTime gmt_payment = DateTime.Parse(Request.Form["gmt_payment"]);
     string appid = 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"));//修改订单
  //注意:
  //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
}
else if (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("无通知参数");
      }
    }

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/55625.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号