public IHttpActionResult WeChatServicesRefundApi([FromBody] JToken json) { return(this.TryReturn <object>(() => { try { WxPayData wxp = new WxPayData(); //插入调用退款接口Json wxp.WriteLogFile("调用退款Json:" + json.ToJsonString()); var arg = json.AsDynamic(); //订单号 string orderNo = arg.orderNo; //查询要退款的单据 var selectOrderSql = string.Format(@"SELECT * FROM B_ORDER WHERE CODE='{0}' AND PAY_STATUS='已支付' AND IS_DELETE=0", orderNo, this.LoginUser.Cid); wxp.WriteLogFile("执行单据退款查询SQL:" + selectOrderSql); var recordList = new DataSet(); using (var x = MySqlProvider.X()) { recordList = x.ExecuteSqlCommand(selectOrderSql); x.Close(); } var recordRows = recordList.Tables[0].DataSet.Rows().FirstOrDefault(); if (recordRows != null) { var item = recordRows; var refundNo = "RFD" + orderNo; //订单金额 string price = item["PRICE"].ToString(); var data = WxPayData.ForRefund(double.Parse(price), double.Parse(price), orderNo, refundNo); var url = GlobalVariableWeChatApplets.REFUND_URL; var xml = data.ToXml(); var response = HttpService.PostByCertificates(xml, url, 6); var preOrder = WxPayData.FromXml(response, "HMAC-SHA256"); var backCode = preOrder.GetValue("return_code"); if (backCode != null && backCode.ToString() == "FAIL") { var returnMsg = preOrder.GetValue("return_msg").ToString(); return new { Table = new { IsSuccess = false, ErroMessage = returnMsg, MSG = "" } }; } else { var payData = WxPayData.ForWechatRefund(preOrder); var orderString = payData.ToJson(); return new { Table = new { IsSuccess = true, ErroMessage = "", MSG = orderString } }; } } else { return new { Table = new { IsSuccess = false, ErroMessage = "未查询到需要退款的数据", MSG = "" } }; } } catch (Exception ex) { return new { Table = new { IsSuccess = false, ErroMessage = ex.Message, Json = "" } }; } })); }
public static WxPayData ForWechatRefund(WxPayData preOrder) { var result = new WxPayData(); result.SetValue("appId", preOrder.GetValue("appid")); //公众账号ID result.SetValue("nonceStr", GenerateNonceStr()); //随机字符串 result.SetValue("timeStamp", ConvertDateTimeInt(DateTime.Now)); //时间戳 result.SetValue("sign_type", "HMAC-SHA256"); //签名类型 result.SetValue("paySign", result.WechatMakeSignByHMAC_SHA256()); //签名 result.WriteLogFile("ForWechatPay:" + result.ToJson()); return(result); }
/// <summary> /// 退款 /// </summary> public static WxPayData ForRefund(double price, double refundPrice, string orderNo, string refundNo) { var url = System.Configuration.ConfigurationManager.AppSettings["notify_url"]; var fee = Convert.ToInt32(price * 100); var refundPriceFee = Convert.ToInt32(refundPrice * 100); var result = new WxPayData(); result.SetValue("appid", GlobalVariableWeChatApplets.APPID); //服务商的APPID result.SetValue("mch_id", GlobalVariableWeChatApplets.MCH_ID); //商户号 result.SetValue("nonce_str", GenerateNonceStr()); //随机字符串 result.SetValue("out_trade_no", orderNo); //订单号 result.SetValue("out_refund_no", refundNo); // "{'cid':" + cid + ",'crt_code':" + loginCode + ",'refNo':" + refundNo + " }");//商户退款单号(拼接CID CODE) result.SetValue("total_fee", fee); //订单金额 result.SetValue("refund_fee", refundPriceFee); //退款金额 result.SetValue("notify_url", url + "/api/_wxp/refundApi"); //退款通知url //签名 result.SetValue("sign_type", "HMAC-SHA256"); //签名类型 result.SetValue("sign", result.WechatMakeSignByHMAC_SHA256()); //签名 result.WriteLogFile("退款Json:" + result.ToJson()); return(result); }
public static WxPayData ForApplets(double price, string openId, string orderNo, string ip, string attach) { var url = System.Configuration.ConfigurationManager.AppSettings["notify_url"]; var fee = Convert.ToInt32(price * 100); var result = new WxPayData(); result.SetValue("trade_type", "JSAPI"); //交易类型 result.SetValue("appid", GlobalVariableWeChatApplets.APPID); result.SetValue("mch_id", GlobalVariableWeChatApplets.MCH_ID); //商户号 result.SetValue("nonce_str", GenerateNonceStr()); //随机字符串 result.SetValue("body", "小程序下单"); //商品描述 result.SetValue("out_trade_no", orderNo); //订单号 result.SetValue("total_fee", fee); //总金额 result.SetValue("openid", openId); //用户openId result.SetValue("attach", attach); //附加数据 result.SetValue("spbill_create_ip", ip); //终端ip result.SetValue("notify_url", url + "/api/_wxp/tenpay_notify"); //异步通知url result.SetValue("sign_type", "HMAC-SHA256"); //签名类型 result.SetValue("sign", result.WechatMakeSignByHMAC_SHA256()); //签名 result.WriteLogFile("ForApplets:" + result.ToJson()); return(result); }
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 } }; } })); }