public ApiCallbackResponse(Uri endpoint, PlainResponse plain) { Ensure.ArgumentNotNull(endpoint, nameof(endpoint)); Ensure.ArgumentNotNull(plain, nameof(plain)); Endpoint = endpoint; Plain = plain; }
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); }
// 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); }
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); }
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); } }