public void ProcessNotify() { SceneryDomain sceneryDomain = new SceneryDomain(); try { WxPayData notifyData = null; WxPayData res = null; try { notifyData = GetNotifyData(sceneryDomain); } catch (WxPayException ex) { //若签名错误,则立即返回结果给微信支付后台 res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", ex.Message); LogHelper.WeChatLog("Sign check error : " + res.ToXml()); ResponseMessage.Content = new StringContent(res.ToXml()); return; } //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); LogHelper.WeChatLog("The Pay result is error : " + res.ToXml()); ResponseMessage.Content = new StringContent(res.ToXml()); return; } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 var queryResult = QueryOrder(transaction_id, sceneryDomain.WeChat); if (queryResult == null) { //若订单查询失败,则立即返回结果给微信支付后台 res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); LogHelper.WeChatLog("Order query failure : " + res.ToXml()); ResponseMessage.Content = new StringContent(res.ToXml()); return; } //查询订单成功 else { //业务处理 var detailDao = new WeChatDetailDao(); var qrCodeDao = new WeChatQRCodeDao(); //支付成功 查询交易信息 WeChatDetailDomain detail = new WeChatDetailDomain(); detail.Out_trade_no = queryResult.GetValue("out_trade_no").ToString(); detail.Total_fee = Convert.ToInt32(queryResult.GetValue("total_fee")); //需要检查数据库中是否有改数据 有的话 直接返回 var QRCodeDetail = qrCodeDao.IsExistOut_trade_no(detail.Out_trade_no, detail.Total_fee, sceneryDomain.WeChat.APPID); if (QRCodeDetail == null || QRCodeDetail.SceneryName == "-1") { LogHelper.WeChatLog("论寻:无通知参数"); res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "无通知参数"); LogHelper.WeChatLog("Order query failure : " + res.ToXml()); ResponseMessage.Content = new StringContent(res.ToXml()); return; } if (QRCodeDetail.SceneryName != "-2") { //保存微信信息 detail.SceneryName = QRCodeDetail.SceneryName; detail.Creater = sceneryDomain.WeChat.APPID; detail.Updater = ""; detail.AppId = sceneryDomain.WeChat.APPID; detail.BatchNumber = QRCodeDetail.BatchNumber; detail.SceneryRate = QRCodeDetail.SceneryRate; detail.Time_end = DateTime.ParseExact(queryResult.GetValue("time_end").ToString(), "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); detail.WeChatPlayDate = Convert.ToDateTime(detail.Time_end.ToString("yyyy-MM-dd")); detail.Err_code = "Success"; detail.Err_code_des = "异步"; detail.Openid = queryResult.GetValue("openid").ToString(); detail.Trade_type = queryResult.GetValue("trade_type").ToString(); detail.Bank_type = queryResult.GetValue("bank_type").ToString(); detail.Settlement_total_fee = Convert.ToInt32(queryResult.GetValue("settlement_total_fee")); detail.Transaction_id = queryResult.GetValue("transaction_id").ToString(); detailDao.Add(detail); } else { //论寻:数据已经存在,不需要插入 LogHelper.WeChatLog("论寻:数据已经存在,不需要插入"); } res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); LogHelper.WeChatLog("order query success : " + res.ToXml()); ResponseMessage.Content = new StringContent(res.ToXml()); } } catch (Exception ex) { LogHelper.WeChatLog("Notify 异常:" + ex.Message); WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "系统异常"); LogHelper.WeChatLog("Sign check error : " + res.ToXml()); ResponseMessage.Content = new StringContent(res.ToXml()); } }
/** * * 统一下单 * @param WxPaydata inputObj 提交给统一下单API的参数 * @param int timeOut 超时时间 * @throws WxPayException * @return 成功时返回,其他抛异常 */ public static WxPayData UnifiedOrder(WxPayData inputObj, WxPayConfigDomain WxPayConfig, int timeOut = 6) { string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //检测必填参数 if (!inputObj.IsSet("out_trade_no")) { throw new WxPayException("缺少统一支付接口必填参数out_trade_no!"); } else if (!inputObj.IsSet("body")) { throw new WxPayException("缺少统一支付接口必填参数body!"); } else if (!inputObj.IsSet("total_fee")) { throw new WxPayException("缺少统一支付接口必填参数total_fee!"); } else if (!inputObj.IsSet("trade_type")) { throw new WxPayException("缺少统一支付接口必填参数trade_type!"); } //关联参数 if (inputObj.GetValue("trade_type").ToString() == "JSAPI" && !inputObj.IsSet("openid")) { throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); } if (inputObj.GetValue("trade_type").ToString() == "NATIVE" && !inputObj.IsSet("product_id")) { throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); } //异步通知url未设置,则使用配置文件中的url if (!inputObj.IsSet("notify_url")) { inputObj.SetValue("notify_url", "http://alipayapi.zhilvtx.com/API/WeChat/Notify");//异步通知url } inputObj.SetValue("appid", WxPayConfig.APPID); //公众账号ID inputObj.SetValue("mch_id", WxPayConfig.MCHID); //商户号 //inputObj.SetValue("spbill_create_ip", WxPayConfig.IP);//终端ip inputObj.SetValue("nonce_str", GenerateNonceStr()); //随机字符串 //签名 inputObj.SetValue("sign", inputObj.MakeSign(WxPayConfig.PAYKEY)); string xml = inputObj.ToXml(); var start = DateTime.Now; LogHelper.WeChatLog(string.Format("商户订单号:{0} 请求:{1}", inputObj.GetValue("out_trade_no"), xml)); string response = HttpService.Post(xml, url, false, timeOut); LogHelper.WeChatLog(string.Format("WxPayApi:UnfiedOrder response :", response)); var end = DateTime.Now; int timeCost = (int)((end - start).TotalMilliseconds); WxPayData result = new WxPayData(); result.FromXml(response, WxPayConfig.PAYKEY); ReportCostTime(url, timeCost, result, WxPayConfig);//测速上报 return(result); }