[ValidateInput(false)] //支付宝post的notify_data的数据为xml格式 public ActionResult Notify(string notify_data, string sign, string cbUrl) { if (!VerifySignature(notify_data, sign)) { Logger.Info(">>>>>>>> sign error <<<<<<<<"); return(Content("fail")); } //获取交易状态 XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.LoadXml(notify_data); } catch { Logger.Info(">>>>>>>> xml parse error <<<<<<<<"); return(Content("fail")); } string trade_status = AlipayFunction.GetStrForXmlDoc(xmlDoc, "notify/trade_status"); if (!trade_status.Equals(BillingConsts.ALIPAY_TRADE_FINISHED)) { return(Content("fail")); } else { PaymentsService.AlipaySDKCallback(xmlDoc, cbUrl); //成功必须在页面上输出success,支付宝才不会再发送通知 return(Content("success")); } }
private bool VerifySignature(string notify_data, string sign) { if (!ConfigKeys.NEED_VERIFY_SIG.ConfigValue().ToBoolean()) { return(true); } //获取notify_data数据,需要添加notify_data= //不需要解密,直接是明文xml格式 string notifyData = "notify_data=" + notify_data; // self sign //sign = Alipay.Class.RSAFromPkcs8.sign(notify_data, ConfigKeys.MERCHANT_PRIVATE_KEY.ConfigValue(), "utf-8"); //验证签名 return(AlipayFunction.Verify(notifyData, sign, ConfigKeys.ALI_PUBLIC_KEY.ConfigValue(), "utf-8")); }