public ApiCallbackResponse(Uri endpoint, PlainResponse plain)
        {
            Ensure.ArgumentNotNull(endpoint, nameof(endpoint));
            Ensure.ArgumentNotNull(plain, nameof(plain));

            Endpoint = endpoint;
            Plain    = plain;
        }
Beispiel #2
0
        public void RenderPlainResponse(RenderContext context, PlainResponse resposne)
        {
            if (resposne == null)
            {
                return;
            }
            context.Response.ContentType = resposne.ContentType;
            context.Response.StatusCode  = resposne.statusCode;

            context.Response.Body = System.Text.Encoding.UTF8.GetBytes(resposne.Content);
        }
Beispiel #3
0
        // To be used for above method.
        public IResponse Callback(ApiCall call)
        {
            log(call);

            string name = call.Command.Method;

            int index = name.IndexOf("_");

            if (index == -1)
            {
                return(null);
            }
            var paymentname = name.Substring(0, index);
            var methodname  = name.Substring(index + 1);

            var paymentmethod = PaymentManager.GetMethod(paymentname, call.Context);

            if (paymentmethod != null)
            {
                var method = paymentmethod.GetType().GetMethod(methodname);
                if (method != null)
                {
                    object[] para = new object[1];
                    para[0] = call.Context;
                    var result = method.Invoke(paymentmethod, para) as PaymentCallback;

                    if (result != null)
                    {
                        PaymentManager.CallBack(result, call.Context);

                        if (result.CallbackResponse != null)
                        {
                            var response = new PlainResponse();
                            response.ContentType = result.CallbackResponse.ContentType;
                            response.Content     = result.CallbackResponse.Content;
                            response.statusCode  = result.CallbackResponse.StatusCode;
                            return(response);
                        }

                        else
                        {
                            var response = new PlainResponse();
                            response.ContentType = "text/html";
                            response.Content     = "";
                            return(response);
                        }
                    }
                }
            }

            return(null);
        }
Beispiel #4
0
        public IResponse WrapMethod(ApiCall call)
        {
            var name       = call.Command.Method;
            var handleType = OAuth2Handles.Value.FirstOrDefault(f => f.Name == name);

            if (handleType == null)
            {
                throw new Exception("Can't find handle type");
            }
            var response = new PlainResponse();
            var instance = Activator.CreateInstance(handleType, new[] { call.Context }) as IOAuth2;
            var query    = new Dictionary <string, object>();

            foreach (var item in call.Context.Request.QueryString.AllKeys)
            {
                query.Add(item, call.Context.Request.QueryString.Get(item));
            }

            response.Content     = instance.Callback(query);
            response.ContentType = call.Context.Response.ContentType;
            response.statusCode  = call.Context.Response.StatusCode;
            return(response);
        }
Beispiel #5
0
        public PaymentCallback Notify(RenderContext context)
        {
            string postdata = context.Request.Body;

            var result = new PaymentCallback();

            if (context.Request.Method == "GET")
            {
                result.RawData = context.Request.RawRelativeUrl;
            }
            else
            {
                result.RawData = postdata;
            }


            WxPayData data = new WxPayData();

            try
            {
                data.FromXml(postdata);
            }
            catch (WxPayException ex)
            {
                //若签名错误,则立即返回结果给微信支付后台
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", ex.Message);
                // Log.Error(this.GetType().ToString(), "Sign check error : " + res.ToXml());
                // page.Response.Write(res.ToXml());
                // page.Response.End();
                var response = new PlainResponse();
                response.ContentType    = "Application/Xml";
                response.Content        = res.ToXml();
                result.CallbackResponse = response;
                return(result);
            }

            //  Log.Info(this.GetType().ToString(), "Check sign success");
            // return data;


            //检查支付结果中transaction_id是否存在
            if (!data.IsSet("transaction_id"))
            {
                //若transaction_id不存在,则立即返回结果给微信支付后台
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "支付结果中微信订单号不存在");
                // Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
                // page.Response.Write(res.ToXml());
                // page.Response.End();

                var response = new PlainResponse();
                response.ContentType    = "Application/Xml";
                response.Content        = res.ToXml();
                result.CallbackResponse = response;
                return(result);
            }

            var obj = data.GetValue("out_trade_no");

            Guid RequestId;

            if (obj == null || !System.Guid.TryParse(obj.ToString(), out RequestId))
            {
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "订单查询失败");
                var response = new PlainResponse();
                response.ContentType    = "Application/Xml";
                response.Content        = res.ToXml();
                result.CallbackResponse = response;
                return(result);
            }
            else
            {
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "SUCCESS");
                res.SetValue("return_msg", "OK");
                var response = new PlainResponse();
                response.ContentType = "Application/Xml";
                response.Content     = res.ToXml();

                result.CallbackResponse = response;

                result.PaymentRequestId = RequestId;

                var objcode = data.GetValue("result_code");

                bool IsPaid   = false;
                bool IsCancel = false;

                if (objcode != null)
                {
                    string code = objcode.ToString().ToUpper();
                    if (code == "SUCCESS")
                    {
                        IsPaid = true;
                    }

                    if (code == "FAIL")
                    {
                        IsCancel = true;
                    }
                    //业务结果 result_code 是 String(16)	SUCCESS SUCCESS/ FAIL
                }

                result.IsPaid   = IsPaid;
                result.IsCancel = IsCancel;
                return(result);
            }
        }