コード例 #1
0
 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;
 }
コード例 #2
0
        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 } };
                }
            }));
        }