コード例 #1
0
        public override BaseResult VerifyCallBack(HttpRequest request)
        {
            var mwItem = new MwAlipayResult()
            {
                State = false
            };

            var sPara    = GetRequestGet(request);
            var isNotify = (request.HttpMethod.ToLower() == "post");

            var sign = sPara["sign"];

            if (sPara.Count > 0)
            {
                var mySign = (isNotify
                                     ? Common.Utils.BuildNotifyParas(sPara, Config.GetKey(), Config.Charset)["sign"]
                                     : Common.Utils.BuildParas(sPara, Config.GetKey(), Config.Charset)["sign"]);
                if (mySign == sign)
                {
                    if (!isNotify)
                    {
                        mwItem.TradeNum = sPara["out_trade_no"];
                        mwItem.trade_no = sPara["trade_no"];
                        mwItem.State    = sPara["result"] == "success";
                    }
                    else
                    {
                        var xml = new Function.XmlDoc(sPara["notify_data"]);
                        //验证是否为支付宝发起的请求
                        string notify_id = xml.GetNode("/notify/notify_id");
                        if (GetResponseTxt(notify_id) != "true")
                        {
                            mwItem.State  = false;
                            mwItem.ErrMsg = "非支付宝发起请求";
                            return(mwItem);
                        }

                        string tradeStatus = xml.GetNode("notify/trade_status");
                        if (tradeStatus != Config.TRADEFINISHED && tradeStatus != Config.TRADESUCCESS)
                        {
                            mwItem.State  = false;
                            mwItem.ErrMsg = "交易状态:" + tradeStatus;
                            return(mwItem);
                        }
                        mwItem.Amount   = Convert.ToDecimal(xml.GetNode("notify/total_fee"));
                        mwItem.TradeNum = xml.GetNode("notify/out_trade_no");
                        mwItem.trade_no = xml.GetNode("notify/trade_no");
                        mwItem.State    = true;
                    }
                }
            }

            return(mwItem);
        }
コード例 #2
0
        public override BaseResult VerifyCallBack(HttpRequest request)
        {
            var result = new MAlipayResult();

            var    coll       = (request.HttpMethod.ToLower() == "post" ? request.Form : request.QueryString);
            string notifyData = coll["notify_data"],
                   sign       = coll["sign"];

            if (string.IsNullOrEmpty(notifyData) || string.IsNullOrEmpty(sign))
            {
                result.State  = false;
                result.ErrMsg = "notify_data或sign参数为空";
                return(result);
            }
            var verify = Function.Verify("notify_data=" + notifyData, sign, Config.PublicKey);

            if (!verify)
            {
                result.State  = false;
                result.ErrMsg = "签名验证失败";
                return(result);
            }
            var    xml         = new Function.XmlDoc(notifyData);
            string tradeStatus = xml.GetNode("notify/trade_status");

            if (tradeStatus != Config.TRADEFINISHED && tradeStatus != Config.TRADESUCCESS)
            {
                result.State  = false;
                result.ErrMsg = "交易状态:" + tradeStatus;
                return(result);
            }
            result.State       = true;
            result.Amount      = Convert.ToDecimal(xml.GetNode("notify/total_fee"));
            result.TradeNum    = xml.GetNode("notify/out_trade_no");
            result.TradeNo     = xml.GetNode("notify/trade_no");
            result.TradeStatus = tradeStatus;
            result.BuyerEmail  = xml.GetNode("notify/buyer_email");
            return(result);
        }