Maison >développement back-end >Tutoriel C#.Net >Exemple détaillé de la façon d'accéder à l'interface de paiement d'Alipay en utilisant .net
Cet article présente principalement en détail l'interface de paiement de l'accès .net à Alipay, et l'interface de paiement de l'accès au site Web H5 Alipay. Les amis intéressés peuvent se référer au
Site Web mobile H5 pour se connecter à l'interface de paiement d'Alipay. Il est recommandé d'utiliser le SDK fourni par Alipay pour un développement rapide
J'utilise le développement SDK
using Aop.Api; using Aop.Api.Request; using Aop.Api.Response; using Aop.Api.Util;
La page d'accueil doit définir des constantes
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 ici, Je n'ai pas listé alipay_public_key. Pour l'obtenir, il faut se rendre sur la plateforme Alipay pour effectuer quelques opérations pour l'obtenir
Lorsque l'utilisateur clique sur le site pour payer, il faut réveiller Alipay pour faire le paiement
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; }
Veuillez vérifier vous-même les paramètres spécifiques envoyés à Alipay
Après avoir exécuté la méthode, l'acheteur saisit le mot de passe de son compte Alipay pour payer. Si le paiement réussit, Alipay. demandera de manière asynchrone votre adresse SetNotifyUrl sous forme de courrier.
L'adresse de cette SetNotifyUrl doit être accessible depuis le réseau externe pour que les demandes Alipay puissent arriver.
L'acheteur paie avec succès, le le commerçant modifie le statut de la commande et les opérations de base de données sont toutes en Exécuter
requête synchrone en requête asynchrone
public ActionResult AlipayPayResult() { ViewBag.result = "success"; return View("PayResult"); }
/// <summary> /// 验证通知数据的正确性 /// </summary> /// <param name="out_trade_no"></param> /// <param name="total_amount"></param> /// <param name="seller_id"></param> /// <returns></returns> private SortedDictionary<string, string> GetRequestPost() { int i = 0; SortedDictionary<string, string> sArray = new SortedDictionary<string, string>(); 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; }
/// <summary> /// 验签 /// </summary> /// <param name="inputPara"></param> /// <returns></returns> public Boolean Verify(SortedDictionary<string, string> inputPara) { Dictionary<string, string> sPara = new Dictionary<string, string>(); Boolean verifyResult = AlipaySignature.RSACheckV1(inputPara, alipay_public_key, charset,sign_type,false); return verifyResult; }
Requête asynchrone :
[HttpPost] public void AsyncPay() { SortedDictionary<string, string> 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("无通知参数"); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!