/// <summary> /// 回调处理 /// </summary> /// <param name="app"></param> /// <param name="data"></param> /// <returns></returns> public PaySysResult CallBack(App app, object data) { string xml = data as string; PayNotifyResponse response = Utility.Get <PayNotifyResponse>(xml, app.Key, app.SignType); return(new WeChatPayNotifyResult { Attach = response.Attach, BankType = response.BankType, CashFee = response.CashFee, CashFeeType = response.CashFeeType, CouponCount = response.CouponCount, CouponFee = response.CouponFee, FeeType = response.FeeType, IsSubscribe = response.IsSubscribe, OutTradeNo = response.OutTradeNo, SettlementTotalFee = response.SettlementTotalFee, TimeEnd = DateTime.ParseExact(response.TimeEnd, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture), TotalFee = response.TotalFee, TradeType = response.TradeType, TransactionId = response.TransactionId }); }
/// <summary> /// 支付结果回调 /// </summary> /// <param name="payNotifyResponse"></param> public void PayNotify(PayNotifyResponse payNotifyResponse) { var tbl_Order = Get(payNotifyResponse.OutTradeNo); if (tbl_Order == null || tbl_Order.OrderStatus != (int)OrderStatusType.NoPay) { return; } if (tbl_Order.OrderType == (int)OrderType.Recharge) { UpdateOrder(tbl_Order, payNotifyResponse.TransactionId); _orderDetailService.UpdateForPay(payNotifyResponse.OutTradeNo); _weiXinUserService.UpdateForBalanceRecharge(tbl_Order); _integralDetailsService.AddForRecharge(tbl_Order); } else { UpdateOrder(tbl_Order, payNotifyResponse.TransactionId); _orderDetailService.UpdateForPay(payNotifyResponse.OutTradeNo); _weiXinUserService.UpdateForSaleMoney(tbl_Order); _integralDetailsService.AddForWechatConsumption(tbl_Order); } }
/// <summary> /// 支付通知 /// </summary> /// <param name="xml">xml</param> /// <returns>结果</returns> public static PayNotifyResponse ConvertToPayNotifyRresult(string xml) { PayNotifyResponse payNotifyResponse = new PayNotifyResponse(); PayNotifyResult payNotifyRresult = new PayNotifyResult(); SortedDictionary <string, string> signParanmeters = new SortedDictionary <string, string>(); xml = xml.Replace("coupon_id_$n", "coupon_id_xmln").Replace("coupon_fee_$n", "coupon_fee_xmln"); XElement doc = XElement.Parse(xml); if (doc.Element("return_code").GetString() == "SUCCESS") { if (doc.Element("result_code").GetString() == "SUCCESS") { payNotifyRresult.IsSuccess = true; payNotifyRresult.Appid = doc.Element("appid").GetString(); payNotifyRresult.MchId = doc.Element("mch_id").GetString(); payNotifyRresult.DeviceInfo = doc.Element("device_info").GetString(); payNotifyRresult.NonceStr = doc.Element("nonce_str").GetString(); payNotifyRresult.Sign = doc.Element("sign").GetString(); payNotifyRresult.TradeType = doc.Element("trade_type").GetString(); payNotifyRresult.BankType = doc.Element("bank_type").GetString(); payNotifyRresult.TotalFee = doc.Element("total_fee").GetInt(); payNotifyRresult.TransactionId = doc.Element("transaction_id").GetString(); payNotifyRresult.OutTradeNo = doc.Element("out_trade_no").GetString(); payNotifyRresult.TimeEnd = doc.Element("time_end").GetString(); signParanmeters.Add("return_code", doc.Element("result_code").GetString()); signParanmeters.Add("appid", doc.Element("appid").GetString()); signParanmeters.Add("mch_id", doc.Element("mch_id").GetString()); if (!string.IsNullOrEmpty(doc.Element("device_info").GetString())) { signParanmeters.Add("device_info", doc.Element("device_info").GetString()); } signParanmeters.Add("nonce_str", doc.Element("nonce_str").GetString()); signParanmeters.Add("sign", doc.Element("sign").GetString()); signParanmeters.Add("result_code", doc.Element("result_code").GetString()); signParanmeters.Add("openid", doc.Element("openid").GetString()); if (!string.IsNullOrEmpty(doc.Element("is_subscribe").GetString())) { signParanmeters.Add("is_subscribe", doc.Element("is_subscribe").GetString()); } signParanmeters.Add("trade_type", doc.Element("trade_type").GetString()); signParanmeters.Add("bank_type", doc.Element("bank_type").GetString()); signParanmeters.Add("total_fee", doc.Element("total_fee").GetString()); if (!string.IsNullOrEmpty(doc.Element("fee_type").GetString())) { signParanmeters.Add("fee_type", doc.Element("fee_type").GetString()); } signParanmeters.Add("cash_fee", doc.Element("cash_fee").GetString()); if (!string.IsNullOrEmpty(doc.Element("coupon_fee").GetString())) { signParanmeters.Add("coupon_fee", doc.Element("coupon_fee").GetString()); } if (!string.IsNullOrEmpty(doc.Element("coupon_count").GetString())) { signParanmeters.Add("coupon_count", doc.Element("coupon_count").GetString()); } if (!string.IsNullOrEmpty(doc.Element("coupon_id_xmln").GetString())) { signParanmeters.Add("coupon_id_$n", doc.Element("coupon_id_xmln").GetString()); } if (!string.IsNullOrEmpty(doc.Element("coupon_fee_xmln").GetString())) { signParanmeters.Add("coupon_fee_$n", doc.Element("coupon_fee_xmln").GetString()); } signParanmeters.Add("transaction_id", doc.Element("transaction_id").GetString()); signParanmeters.Add("out_trade_no", doc.Element("out_trade_no").GetString()); if (!string.IsNullOrEmpty(doc.Element("attach").GetString())) { signParanmeters.Add("attach", doc.Element("attach").GetString()); } signParanmeters.Add("time_end", doc.Element("time_end").GetString()); } else { payNotifyRresult.IsSuccess = false; payNotifyRresult.Message = doc.Element("err_code_des").GetString(); } } else { payNotifyRresult.IsSuccess = false; payNotifyRresult.Message = doc.Element("return_msg").GetString(); } payNotifyResponse.PayNotifyRresult = payNotifyRresult; payNotifyResponse.SignParanmeters = signParanmeters; return(payNotifyResponse); }