Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }