/// <summary> /// 微信支付 /// </summary> /// <param name="context"></param> /// <returns></returns> private string BrandWcPayRequest(HttpContext context) { if (!bllPay.IsWeiXinBrowser) { resp.errcode = 1; resp.errmsg = "请用微信客户端访问"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } string orderId = context.Request["order_id"]; var orderInfo = bll.Get <CrowdFundRecord>(string.Format(" RecordID={0}", orderId)); if (orderInfo == null) { resp.errcode = 1; resp.errmsg = "订单号不存在"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfo.UserID != currentUserInfo.UserID) { resp.errcode = 1; resp.errmsg = "订单号无效"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfo.Status == 1) { resp.errcode = 1; resp.errmsg = "订单已经支付,不需重复支付"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } string appId = ""; //appid string mchId = ""; //mch_id string key = ""; //key string openId = ""; //openid string ip = ""; //ip string notifyUrl = baseUrl + "/WxPayNotify/NotifyCrowdFundV2.aspx"; //支付通知地址 string body = ""; //订单内容 PayConfig payConfig = bllPay.GetPayConfig(); appId = payConfig.WXAppId; mchId = payConfig.WXMCH_ID; key = payConfig.WXPartnerKey; openId = currentUserInfo.WXOpenId; ip = context.Request.UserHostAddress; string payReqStr = bllPay.GetBrandWcPayRequest(orderInfo.RecordID.ToString(), orderInfo.Amount, appId, mchId, key, openId, ip, notifyUrl, body); WXPayReq payReqModel = ZentCloud.Common.JSONHelper.JsonToModel <WXPayReq>(payReqStr); if (!string.IsNullOrEmpty(payReqModel.paySign)) { return(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 0, pay_req = payReqModel })); } resp.errcode = 1; resp.errmsg = "fail"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
/// <summary> 微信支付 </summary> public static void SendReqWXPay(WXPayReq r_payReq) { try { if (r_payReq != null) { if (IsAndroid) { string payReq = JsonUtility.ToJson(r_payReq); Android.Current.Call("sendReqWXPay", payReq); } } } catch (Exception e) { Debug.LogError(e); } }
/// <summary> /// 微信支付 /// </summary> /// <param name="context"></param> /// <returns></returns> private string BrandWcPayRequest(HttpContext context) { if (!bllPay.IsWeiXinBrowser) { resp.errcode = 1; resp.errmsg = "请在微信中打开"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } string orderId = context.Request["order_id"]; string orderType = context.Request["order_type"]; if (string.IsNullOrEmpty(orderId)) { resp.errcode = 1; resp.errmsg = "order_id 必传"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (string.IsNullOrEmpty(orderType)) { resp.errcode = 1; resp.errmsg = "order_type 参数必传"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } string appId = ""; //appid string mchId = ""; //mchid string key = ""; //key string openId = ""; //openid string ip = ""; //ip string body = ""; //订单内容 decimal totalAmount = 0; //订单金额 PayConfig payConfig = bllPay.GetPayConfig(); if (payConfig == null) { resp.errcode = 1; resp.errmsg = "请先填写支付配置信息"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if ((string.IsNullOrEmpty(payConfig.WXAppId)) || (string.IsNullOrEmpty(payConfig.WXMCH_ID)) || (string.IsNullOrEmpty(payConfig.WXPartnerKey))) { resp.errcode = 1; resp.errmsg = "请先完善支付配置信息"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } appId = payConfig.WXAppId; mchId = payConfig.WXMCH_ID; key = payConfig.WXPartnerKey; openId = currentUserInfo.WXOpenId; ip = context.Request.UserHostAddress; string notifyUrl = baseUrl + "/WxPayNotify/NotifyV2.aspx";//支付通知地址//默认商城 switch (orderType) { case "mall": #region 商城 var orderInfo = bllMall.GetOrderInfo(orderId); if (orderInfo == null) { resp.errcode = 1; resp.errmsg = "订单号不存在"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfo.OrderUserID != currentUserInfo.UserID) { resp.errcode = 1; resp.errmsg = "订单号无效"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfo.PaymentStatus == 1) { resp.errcode = 1; resp.errmsg = "订单已经支付,不需重复支付"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } totalAmount = orderInfo.TotalAmount; #endregion break; case "crowdfund": #region 众筹 notifyUrl = baseUrl + "/WxPayNotify/NotifyCrowdFundV2.aspx"; var orderInfoCrowd = bllMall.Get <CrowdFundRecord>(string.Format(" RecordID={0}", orderId)); if (orderInfoCrowd == null) { resp.errcode = 1; resp.errmsg = "订单号不存在"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfoCrowd.UserID != currentUserInfo.UserID) { resp.errcode = 1; resp.errmsg = "订单号无效"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfoCrowd.Status == 1) { resp.errcode = 1; resp.errmsg = "订单已经支付,不需重复支付"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } totalAmount = orderInfoCrowd.Amount; #endregion break; default: resp.errcode = 1; resp.errmsg = "order_type 不支持"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } string payReqStr = bllPay.GetBrandWcPayRequest(orderId, totalAmount, appId, mchId, key, openId, ip, notifyUrl, body); WXPayReq payReqModel = ZentCloud.Common.JSONHelper.JsonToModel <WXPayReq>(payReqStr); if (!string.IsNullOrEmpty(payReqModel.paySign)) { return(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 0, pay_req = payReqModel })); } resp.errcode = 1; resp.errmsg = "fail"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
/// <summary> /// 微信支付 /// </summary> /// <param name="context"></param> /// <returns></returns> private string BrandWcPayRequest(HttpContext context) { if (!bllPay.IsWeiXinBrowser) { resp.errcode = 1; resp.errmsg = "请在微信中打开"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } string orderId = context.Request["order_id"]; decimal totalAmount = 0; //订单金额 string appId = ""; //微信AppId string mchId = ""; //商户号 string key = ""; //api密钥 string openId = ""; //openid string ip = ""; //ip string notifyUrl = baseUrl + "/WxPayNotify/NotifyV2.aspx"; //支付通知地址 string body = ""; //订单内容 if (string.IsNullOrEmpty(orderId)) { resp.errcode = 1; resp.errmsg = "order_id 必传"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } var orderInfo = bllMall.GetOrderInfo(orderId); if (orderInfo != null) { totalAmount = orderInfo.TotalAmount; //if (orderInfo.OrderUserID != CurrentUserInfo.UserID) //{ // resp.errcode = 1; // resp.errmsg = "订单号无效"; // return ZentCloud.Common.JSONHelper.ObjectToJson(resp); //} if (orderInfo.PaymentStatus == 1) { resp.errcode = 1; resp.errmsg = "该订单已经支付,不需重复支付"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } //更改支付方式 bllMall.Update(orderInfo, " PaymentType=2 ", string.Format(" (OrderID = '{0}' Or ParentOrderId='{0}') ", orderInfo.OrderID)); //resp.errcode = 1; //resp.errmsg = "订单号不存在"; //return ZentCloud.Common.JSONHelper.ObjectToJson(resp); } else { #region 众筹 var orderInfoCrowd = bllMall.Get <CrowdFundRecord>(string.Format(" RecordID={0}", orderId)); if (orderInfoCrowd == null) { resp.errcode = 1; resp.errmsg = "订单号不存在"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfoCrowd.UserID != currentUserInfo.UserID) { resp.errcode = 1; resp.errmsg = "订单号无效"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfoCrowd.Status == 1) { resp.errcode = 1; resp.errmsg = "订单已经支付,不需重复支付"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } totalAmount = orderInfoCrowd.Amount; notifyUrl = baseUrl + "/WxPayNotify/NotifyCrowdFundV2.aspx"; #endregion } PayConfig payConfig = bllPay.GetPayConfig(); if (payConfig == null) { resp.errcode = 1; resp.errmsg = "该商户微信支付还没有配置"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if ((string.IsNullOrEmpty(payConfig.WXAppId)) || (string.IsNullOrEmpty(payConfig.WXMCH_ID)) || (string.IsNullOrEmpty(payConfig.WXPartnerKey))) { resp.errcode = 1; resp.errmsg = "该商户微信支付还没有配置"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } appId = payConfig.WXAppId; mchId = payConfig.WXMCH_ID; key = payConfig.WXPartnerKey; openId = currentUserInfo.WXOpenId; ip = context.Request.UserHostAddress; string payReqStr = bllPay.GetBrandWcPayRequest(orderId, totalAmount, appId, mchId, key, openId, ip, notifyUrl, body); WXPayReq payReqModel = ZentCloud.Common.JSONHelper.JsonToModel <WXPayReq>(payReqStr); if (!string.IsNullOrEmpty(payReqModel.paySign)) { return(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 0, pay_req = payReqModel })); } resp.errcode = 1; resp.errmsg = "获取配置失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
protected void Page_Load(object sender, EventArgs e) { try { #region 检查订单是否可以支付 if (Request["oid"] == null) { Response.Write("订单无效"); Response.End(); } int OrderId; if (!int.TryParse(Request["oid"], out OrderId)) { Response.Write("订单无效"); Response.End(); } Order = bllOrder.GetOrderPay(OrderId.ToString()); if (Order == null) { Response.Write("订单无效"); Response.End(); } if (!Order.Status.Equals(0)) { Response.Write("订单不是未付款状态"); Response.End(); } #endregion #region 生成预支付ID BLLJIMP.Model.PayConfig PayConfig = bllPay.GetPayConfig(); var non_str = Payment.WeiXin.CommonUtil.CreateNoncestr();//随机串 // Dictionary <string, string> Dic = new Dictionary <string, string>(); Dic.Add("appid", PayConfig.WXAppId); Dic.Add("body", "订单号" + Order.OrderId); Dic.Add("mch_id", PayConfig.WXMCH_ID); Dic.Add("nonce_str", non_str); Dic.Add("out_trade_no", Order.OrderId); Dic.Add("openid", bllPay.GetCurrentUserInfo().WXOpenId); Dic.Add("spbill_create_ip", Request.UserHostAddress); Dic.Add("total_fee", (Order.Total_Fee * 100).ToString("F0")); Dic.Add("notify_url", string.Format("http://{0}/WxPayNotify/NotifyVote.aspx", Request.Url.Host)); Dic.Add("trade_type", "JSAPI"); string strtemp = Payment.WeiXin.CommonUtil.FormatBizQueryParaMap(Dic, false); string sign = MD5SignUtil.Sign(strtemp, PayConfig.WXPartnerKey); Dic = (from entry in Dic orderby entry.Key ascending select entry).ToDictionary(pair => pair.Key, pair => pair.Value); Dic.Add("sign", sign); string postdata = Payment.WeiXin.CommonUtil.ArrayToXml(Dic); string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); byte[] requestBytes = System.Text.Encoding.UTF8.GetBytes(postdata); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = requestBytes.Length; Stream requestStream = req.GetRequestStream(); requestStream.Write(requestBytes, 0, requestBytes.Length); requestStream.Close(); HttpWebResponse res = (HttpWebResponse)req.GetResponse(); StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8); string backstr = sr.ReadToEnd(); sr.Close(); res.Close(); var result = XDocument.Parse(backstr); var return_code = result.Element("xml").Element("return_code").Value; //if (!return_code.ToUpper().Equals("SUCCESS")) //{ // Response.Write(backstr); // return; //} var rusult_code = result.Element("xml").Element("result_code").Value; string prepay_id = ""; if (return_code.ToUpper().Equals("SUCCESS") && (rusult_code.ToUpper().Equals("SUCCESS"))) { prepay_id = result.Element("xml").Element("prepay_id").Value; } #endregion #region 生成支付请求 WXPayReq reqwx = new WXPayReq(); string timeStamp = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString(); reqwx.appId = PayConfig.WXAppId; reqwx.nonceStr = non_str; reqwx.package = "prepay_id=" + prepay_id; reqwx.signType = "MD5"; reqwx.timeStamp = timeStamp; Dictionary <string, string> DicNew = new Dictionary <string, string>(); DicNew.Add("appId", reqwx.appId); DicNew.Add("timeStamp", reqwx.timeStamp); DicNew.Add("nonceStr", reqwx.nonceStr); DicNew.Add("package", reqwx.package); DicNew.Add("signType", "MD5"); string strtemp1 = Payment.WeiXin.CommonUtil.FormatQueryParaMap(DicNew); string PaySign = MD5SignUtil.Sign(strtemp1, PayConfig.WXPartnerKey); reqwx.paySign = PaySign; WxPayReq = ZentCloud.Common.JSONHelper.ObjectToJson(reqwx); #endregion } catch (Exception ex) { Response.Write(ex.Message); Response.End(); } }