public ResultModel <WeChatPayData> WeChatPay(PayParamModel model) { //统一下单 WeChatPayData data = new WeChatPayData(); data.SetValue("body", model.title); data.SetValue("attach", model.title); //data.SetValue("detail", model.title); data.SetValue("out_trade_no", model.out_trade_osn); data.SetValue("total_fee", ((int)(model.price * 100)).ToString()); data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss")); data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); data.SetValue("goods_tag", model.title); data.SetValue("trade_type", "JSAPI"); data.SetValue("openid", model.openid); WeChatPayData result = UnifiedOrder(data); if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "") { throw new Exception("UnifiedOrder response error!"); } return(new ResultModel <WeChatPayData>() { code = 1, msg = "微信支付平台接口调用成功", data = result }); }
public ResultModel <WeChatPayResultModel> H5Pay(PayParamModel model) { var return_Url = WrapConfig.WeChatCallBackUrl; //统一下单 WeChatPayData data = new WeChatPayData(); if (string.IsNullOrEmpty(model.title)) { model.title = "订单充值"; } var orderamount = ((int)(model.price * 100)).ToString(); data.SetValue("body", model.title); //商品描述 data.SetValue("attach", model.title); //附加数据 data.SetValue("out_trade_no", model.out_trade_osn); //随机字符串 data.SetValue("total_fee", orderamount); //总金额 data.SetValue("trade_type", "MWEB"); //交易类型 data.SetValue("product_id", model.out_trade_osn); //商品ID data.SetValue("notify_url", return_Url); //回调URL data.SetValue("scene_info", model.scene_info); //H5支付格式 data.SetValue("spbill_create_ip", model.spbill_create_ip); //支付发起端IP地址 WeChatPayData result = UnifiedOrder(data); if (result == null) { return(new ResultModel <WeChatPayResultModel>() { code = 0, msg = "微信支付平台接口调用异常", data = null }); } WeChatPayResultModel payResult = new WeChatPayResultModel { prepay_id = result.GetValue("prepay_id") == null ? "" : result.GetValue("prepay_id").ToString(), sign = result.GetValue("sign") == null ? "" : result.GetValue("sign").ToString(), qrcodeurl = result.GetValue("code_url") == null ? "" : result.GetValue("code_url").ToString(), mch_id = result.GetValue("mch_id") == null ? "" : result.GetValue("mch_id").ToString(), mweb_url = result.GetValue("mweb_url") == null ? "" : result.GetValue("mweb_url").ToString() }; if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "") { if (result.GetValue("return_code") != null && result.GetValue("return_code").ToString() != "") { if (result.GetValue("return_code").ToString() == "FAIL") { var return_msg = result.GetValue("return_msg").ToString(); return(new ResultModel <WeChatPayResultModel>() { code = 0, msg = return_msg, data = payResult }); } } if (result.GetValue("err_code_des") != null && result.GetValue("err_code_des").ToString() != "") { if (result.GetValue("err_code_des").ToString() == "该订单已支付") { return(new ResultModel <WeChatPayResultModel>() { code = 0, msg = "该订单已支付", data = payResult }); } else if (result.GetValue("err_code_des").ToString() == "余额不足") { return(new ResultModel <WeChatPayResultModel>() { code = 0, msg = "余额不足", data = payResult }); } else if (result.GetValue("err_code_des").ToString() == "商户订单号重复") { return(new ResultModel <WeChatPayResultModel>() { code = 0, msg = "商户订单号重复", data = payResult }); } else if (result.GetValue("err_code_des").ToString() == "订单已关闭") { return(new ResultModel <WeChatPayResultModel>() { code = 0, msg = "订单已关闭", data = payResult }); } } return(new ResultModel <WeChatPayResultModel>() { code = 0, msg = "微信支付平台接口调用失败", data = payResult }); } var ApiResult = JsonConvert.DeserializeObject <ShareParaModel>(GetJsApiParameters(BasicConfig.WeChat_AppKey, result.GetValue("appid") == null ? "" : result.GetValue("appid").ToString(), result.GetValue("prepay_id") == null ? "" : result.GetValue("prepay_id").ToString())); payResult.timeStamp = ApiResult.timeStamp; payResult.nonceStr = ApiResult.nonceStr; payResult.package = ApiResult.package; payResult.signType = ApiResult.signType; payResult.paySign = ApiResult.paySign; payResult.appid = data.GetValue("appid").ToString(); return(new ResultModel <WeChatPayResultModel>() { code = 1, msg = "微信支付平台接口调用成功", data = payResult }); }
public IHttpActionResult Pay([FromUri] PayParamModel paramModel) { var model = new PayModel(); try { lock (PayLock) { var baseSetting = _baseSettingService.GetLast(); if (baseSetting == null) { throw new MyProException("无效的基础设置"); } var paySetting = _PaySettingService.GetLast(); if (paySetting == null) { throw new MyProException("无效的支付设置"); } if (string.IsNullOrEmpty(paramModel.OpenId)) { throw new MyProException("openId不能为空"); } var userInfo = _userInfoService.GetByOpenId(paramModel.OpenId); if (userInfo == null) { throw new MyProException("openId 无效"); } decimal totalFee; if (!decimal.TryParse(paramModel.Amount, out totalFee)) { throw new MyProException("支付金额有误"); } var logStr = new StringBuilder(); var body = _payHelper.GetUtf8Str(paySetting.ShortName + "-美发/美容/美甲店"); var random = new Random(); Dictionary <string, string> resultDic = null; var serialNumber = DateTime.Now.ToString("yyyyMMddHHmmssfff") + random.Next(999); var dic = new Dictionary <string, string> { { "appid", baseSetting.AppId }, { "mch_id", paySetting.MchId }, { "nonce_str", _payHelper.GetRandomString(20) }, { "body", body }, { "out_trade_no", serialNumber }, { "total_fee", paramModel.Amount }, { "spbill_create_ip", paySetting.IpAddress }, { "notify_url", paySetting.PayResulturl }, { "trade_type", "JSAPI" }, { "openid", paramModel.OpenId } }; dic.Add("sign", _payHelper.GetSignString(dic, paySetting.PayKey)); var strB = new StringBuilder(); strB.Append("<xml>"); foreach (var d in dic) { strB.AppendFormat("<{0}>{1}</{0}>", d.Key, d.Value); } strB.Append("</xml>"); logStr.AppendLine("支付请求的xml" + strB); var xml = new XmlDocument(); var en = Encoding.GetEncoding("UTF-8"); var response = _payHelper.CreatePostHttpResponse("https://api.mch.weixin.qq.com/pay/unifiedorder", strB.ToString(), en); if (response != null) { //打印返回值 var stream = response.GetResponseStream(); //获取响应的字符串流 if (stream != null) { var sr = new StreamReader(stream); //创建一个stream读取流 var html = sr.ReadToEnd(); //从头读到尾,放到字符串html logStr.AppendLine("请求返回的结果:" + html); xml.LoadXml(html); //对请求返回值 进行处理 var root = xml.DocumentElement; var ds = new DataSet(); var stram = new StringReader(html); var reader = new XmlTextReader(stram); ds.ReadXml(reader); var returnCode = ds.Tables[0].Rows[0]["return_code"].ToString(); if (returnCode.ToUpper() == "SUCCESS") { resultDic = new Dictionary <string, string> { { "appId", baseSetting.AppId }, { "timeStamp", _payHelper.GetTimeStamp() }, { "nonceStr", dic["nonce_str"] }, { "package", "prepay_id=" + ds.Tables[0].Rows[0]["prepay_id"] }, { "signType", "MD5" } }; //在服务器上签名 resultDic.Add("paySign", _payHelper.GetSignString(resultDic, paySetting.PayKey)); model.TimeStamp = resultDic["timeStamp"]; model.NonceStr = resultDic["nonceStr"]; model.Package = resultDic["package"]; model.SignType = resultDic["signType"]; model.PaySign = resultDic["paySign"]; var requestStr = JsonConvert.SerializeObject(resultDic); logStr.AppendLine("返回的结果:" + requestStr); var payInfo = new PayInfo() { UserInfoId = userInfo.Id, Amount = decimal.Parse(paramModel.Amount) / 100, IsPay = false, TradeNo = serialNumber, Body = body, CreateOn = DateTime.Now }; _payInfoService.Insert(payInfo); } else { var returnMsg = ds.Tables[0].Rows[0]["return_msg"].ToString(); model.IsSuccess = false; model.ReturnMsg = returnMsg; logStr.AppendLine("返回的结果:" + JsonConvert.SerializeObject(model)); } } else { model.IsSuccess = false; model.ReturnMsg = "response.GetResponseStream() is null"; logStr.AppendLine("返回的结果:" + JsonConvert.SerializeObject(model)); } } else { model.IsSuccess = false; model.ReturnMsg = "CreatePostHttpResponse is null"; logStr.AppendLine("返回的结果:" + JsonConvert.SerializeObject(model)); } WebLogHelper.WebLog(logStr.ToString()); model.IsSuccess = true; model.ReturnMsg = "调用成功"; } } catch (Exception ex) { model.IsSuccess = false; model.ReturnMsg = ex.Message; } return(Json(model)); }