public string AlipayNotify <T>(PayMointor <T> proc) where T : class { SortedDictionary <string, string> sPara = PayUtil.GetRequestPost(); var request = HttpContext.Current.Request; if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, request.Form["notify_id"], request.Form["sign"]); if (verifyResult)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //商户订单号 string out_trade_no = request.Form["out_trade_no"]; //支付宝交易号 string trade_no = request.Form["trade_no"]; //交易状态 string trade_status = request.Form["trade_status"]; proc.Init(out_trade_no); if (request.Form["trade_status"] == "WAIT_BUYER_PAY") { proc.AsyncState(PaymentAsyncState.WAIT_BUYER_PAY); } else if (request.Form["trade_status"] == "WAIT_SELLER_SEND_GOODS") { proc.PaidSuccess(); //该判断示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } else if (request.Form["trade_status"] == "WAIT_BUYER_CONFIRM_GOODS") {//该判断表示卖家已经发了货,但买家还没有做确认收货的操作 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } else if (request.Form["trade_status"] == "TRADE_FINISHED") {//该判断表示买家已经确认收货,这笔交易完成 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } else { } return("success"); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { proc.PaidFail(); //log.Append("fail:" + request.Form["trade_status"] + "\r\n"); return("fail"); } } else { return("无通知参数"); } }
public string Notify <T>(PayMointor <T> proc) where T : class { /* * http://localhost:8080/pay/notify_1_3.html?body=%d6%a7%b8%b6%b6%a9%b5%a5&[email protected]&buyer_id=2088302384317810&exterface=create_direct_pay_by_user&is_success=T¬ify_id=RqPnCoPT3K9%2Fvwbh3I73%2FBJ%2FCypvvG4k72c8QSXT5yE44%2FMSUK0zqoTBaXxNf4BPOKZI¬ify_time=2013-03-21+11:42:53¬ify_type=trade_status_sync&out_trade_no=20130125033249408&payment_type=1&[email protected]&seller_id=2088801968591818&subject=%E6%94%AF%E4%BB%98%E8%AE%A2%E5%8D%95&total_fee=0.01&trade_no=2013032154249581&trade_status=TRADE_SUCCESS&sign=af01b9aa0bd11df2a723eb5ef52e9298&sign_type=MD5 */ var request = HttpContext.Current.Request; //商户号 string partner = AlipayConfig.Partner; //密钥 string key = AlipayConfig.Key; SortedDictionary <string, string> sPara = PayUtil.GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, request.Form["notify_id"], request.Form["sign"]); if (verifyResult)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 string trade_no = request.Form["trade_no"]; //支付宝交易号 string order_no = request.Form["out_trade_no"]; //获取订单号 string total_fee = request.Form["total_fee"]; //获取总金额 string subject = request.Form["subject"]; //商品名称、订单名称 string body = request.Form["body"]; //商品描述、订单备注、描述 string buyer_email = request.Form["buyer_email"]; //买家支付宝账号 string trade_status = request.Form["trade_status"]; //交易状态 proc.Init(order_no); if (request.Form["trade_status"] == "TRADE_FINISHED") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 } else if (request.Form["trade_status"] == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 } else { } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— proc.PaidSuccess(); //log.Append("success:" + request.Form["trade_status"]+"\r\n"+order_no+"\r\n"); return("success"); //请不要修改或删除 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { proc.PaidFail(); //log.Append("fail:" + request.Form["trade_status"] + "\r\n"); return("fail"); } } else { //log.Append("无通知参数:" + request.Form["trade_status"] + "\r\n"); return("无通知参数"); } }