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

作者:袖梨 2022-06-29

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

{

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

{

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("无通知参数");

}

}

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


相关文章

精彩推荐