public HttpResponseMessage RefundApi() { var response = new HttpResponseMessage(); try { var result = Request.Content.ReadAsStringAsync().Result; WriteLogFile("回调参数:" + result); var bizJson = WxPayData.RefundJson(result); var bizObj = JsonConvert.DeserializeObject<WxPayData.REFUND_NOTIFY>(bizJson); var status = bizObj.refund_status; var out_refund_no = bizObj.out_refund_no; var orderNo = bizObj.out_trade_no; if (status == "SUCCESS") { Cache c = HttpRuntime.Cache; var isExit = c.Get(out_refund_no); if (isExit != null) { this.WriteLogFile("已收到回调"); response.Content = new StringContent(WxPayData.NotifySuccess()); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"); } else { //插入缓存,标识已收到微信回调 c.Insert(out_refund_no, orderNo); //执行单据退款逻辑 var isRefund = this.Refund(orderNo); if (isRefund) { WriteLogFile("TenpayOK!"); response.Content = new StringContent(WxPayData.NotifySuccess()); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"); } else { WriteLogFile("TenpaySysEx:" + "单据退款失败"); response.Content = new StringContent(WxPayData.NotifyFail()); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"); } } } else { WriteLogFile("TenpayEx:" + "回调失败"); response.Content = new StringContent(WxPayData.NotifyFail()); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"); return response; } } catch (Exception ex) { WriteLogFile("TenpayEx:" + ex.Message); response.Content = new StringContent(WxPayData.NotifyFail()); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"); return response; } WriteLogFile("TenpayOK!"); response.Content = new StringContent(WxPayData.NotifySuccess()); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"); return response; }
public IHttpActionResult WeChatServicesPayApi([FromBody] JToken json) { return(this.TryReturn <object>(() => { try { WxPayData wxp = new WxPayData(); wxp.WriteLogFile("调用支付Json:" + json.ToJsonString()); var arg = json.AsDynamic(); var ip = GetClientIpAddress(); //金额 string price = arg.price; //订单号 string orderNo = arg.orderNo; //产品ID string productId = arg.productId; //买家ID string buyUserId = arg.buyUserId; //JsCode string jsCode = arg.jsCode; //获取OpenId var openId = WxPayData.GetOpenId(jsCode).openid; if (openId == "" || openId == null) { var msg = "JSCODE " + jsCode + "获取不到openId"; wxp.WriteLogFile(msg); return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = msg } }; } #region 锁定产品状态 //执行sql using (var x = Join.Dal.MySqlProvider.X()) { //获取产品ID 查询产品是否在上架时间并且状态为上架中 var nowDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var selectProductSql = "select * from B_PRODUCT_LIST where status='上架中' and kid='" + productId + "' and OFF_SHELF_TIME > '" + nowDate + "'"; var selectProductTables = x.ExecuteSqlCommand(selectProductSql); if (selectProductTables.Tables[0].Rows.Count > 0) { //执行调用付款 //构造附加数据 string attach = productId + "|" + buyUserId; var url = GlobalVariableWeChatApplets.UNIFIEDORDER_URL; var data = WxPayData.ForApplets(double.Parse(price), openId, orderNo, ip, attach); var xml = data.ToXml(); var response = HttpService.Post(xml, url, 6); var preOrder = WxPayData.FromXml(response, "HMAC-SHA256"); var errCode = preOrder.GetValue("err_code"); if (errCode != null) { var errMsg = preOrder.GetValue("err_code_des"); return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = errMsg } }; } else { //如果调起支付成功,锁定产品状态为已锁定 var updateProductSql = "update b_product_list set status='已锁定',LOCK_TIME='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' where kid = '" + productId + "'"; x.ExecuteSqlCommand(updateProductSql); var payData = WxPayData.ForWechatPay(preOrder); var orderString = payData.ToJson(); return new { Table = new { MSG = orderString, IsSuccess = true, ErroMessage = string.Empty } }; } } else { return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = "产品已下架。" } }; } } #endregion } catch (Exception ex) { return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = ex.Message } }; } })); }