private WeiXinPayResponse ConvertToPayResponse(string postResult) { var xmlParams = XmlToDic(postResult); if (xmlParams["return_code"] == Fail) { return(new WeiXinPayResponse { RetCode = Fail, RetMsg = xmlParams["return_msg"] }); } if (xmlParams["result_code"] == Fail) { return(new WeiXinPayResponse { RetCode = xmlParams["err_code"], RetMsg = xmlParams["err_code_des"] }); } if (xmlParams.ContainsKey("trade_state") && xmlParams["trade_state"] != "SUCCESS") { return(new WeiXinPayResponse { RetCode = xmlParams["trade_state"], RetMsg = xmlParams["trade_state_desc"] }); } var tmpParam = CommonUtil.FilterPara(xmlParams); if (!IsMD5Sign(tmpParam, xmlParams["sign"])) { return(new WeiXinPayResponse { RetCode = Fail, RetMsg = "MD5签名验证失败", OriginalParams = xmlParams }); } var openid = xmlParams.ContainsKey("sub_openid") ? xmlParams["sub_openid"] : ""; if (string.IsNullOrEmpty(openid)) { openid = xmlParams.ContainsKey("openid") ? xmlParams["openid"] : ""; } WeiXinPayResponse result = new WeiXinPayResponse() { RetCode = Success, RetMsg = "ok", BankType = xmlParams.ContainsKey("bank_type") ? xmlParams["bank_type"] : "", TradeMode = xmlParams.ContainsKey("trade_type") ? xmlParams["trade_type"] : "", PartnerId = xmlParams["mch_id"], PayAmount = xmlParams.ContainsKey("total_fee") ? decimal.Parse(xmlParams["total_fee"]) / 100 : 0, TransactionID = xmlParams["transaction_id"], OrderNO = xmlParams["out_trade_no"], OpenId = openid, OriginalParams = xmlParams, }; result.Buyer = result.OpenId; if (xmlParams.ContainsKey("attach")) { result.Attach = xmlParams["attach"]; } String paytime = xmlParams["time_end"]; paytime = paytime.Insert(4, "-"); paytime = paytime.Insert(7, "-"); paytime = paytime.Insert(10, " "); paytime = paytime.Insert(13, ":"); paytime = paytime.Insert(16, ":"); result.PayTime = DateTime.Parse(paytime); return(result); }
/// <summary> /// 支付通知 /// </summary> /// <param name="context">通知上下文</param> /// <returns></returns> public WeiXinPayResponse PayNotify(HttpContext context) { SortedDictionary <String, String> xmlParams; SortedDictionary <String, String> param = CommonUtil.GetRequest(context, out xmlParams); if (xmlParams["return_code"] == Fail) { return(new WeiXinPayResponse { RetCode = Fail, RetMsg = xmlParams["return_msg"], OriginalParams = xmlParams }); } var tmpParam = CommonUtil.FilterPara(xmlParams); if (!IsMD5Sign(tmpParam, xmlParams["sign"])) { return(new WeiXinPayResponse { RetCode = Fail, RetMsg = "MD5签名验证失败", OriginalParams = xmlParams }); } if (xmlParams["result_code"] == Fail) { var errMsg = ""; if (!xmlParams.TryGetValue("err_code_des", out errMsg)) { errMsg = GetErrMsg(xmlParams["err_code"]); } return(new WeiXinPayResponse { RetCode = Fail, RetMsg = errMsg, OriginalParams = xmlParams }); } var openid = xmlParams.ContainsKey("sub_openid") ? xmlParams["sub_openid"] : ""; if (string.IsNullOrEmpty(openid)) { openid = xmlParams.ContainsKey("openid") ? xmlParams["openid"] : ""; } WeiXinPayResponse result = new WeiXinPayResponse() { RetCode = Success, RetMsg = "ok", BankType = xmlParams.ContainsKey("bank_type") ? xmlParams["bank_type"] : "", TradeMode = xmlParams["trade_type"], PartnerId = xmlParams["mch_id"], PayAmount = decimal.Parse(xmlParams["total_fee"]) / 100, TransactionID = xmlParams["transaction_id"], OrderNO = xmlParams["out_trade_no"], IsSubscribe = xmlParams["is_subscribe"] == "Y" ? "1" : "0", OpenId = openid, OriginalParams = xmlParams }; result.Buyer = result.OpenId; if (xmlParams.ContainsKey("attach")) { result.Attach = xmlParams["attach"]; } String paytime = xmlParams["time_end"]; paytime = paytime.Insert(4, "-"); paytime = paytime.Insert(7, "-"); paytime = paytime.Insert(10, " "); paytime = paytime.Insert(13, ":"); paytime = paytime.Insert(16, ":"); result.PayTime = DateTime.Parse(paytime); return(result); }