コード例 #1
0
ファイル: PayMentService.cs プロジェクト: hexihuang54/CCShop
        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
            });
        }
コード例 #2
0
ファイル: PayMentService.cs プロジェクト: hexihuang54/CCShop
        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
            });
        }
コード例 #3
0
        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));
        }