/// <summary>
        /// 处理用户消息
        /// </summary>
        /// <param name="webChatAuthConfig"></param>
        /// <param name="wxConfig"></param>
        /// <param name="xml"></param>
        /// <param name="errCode">错误码</param>
        public WebChatMessage ProcessRequest(WebChatAuthConfig webChatAuthConfig, WxConfig wxConfig, string xml,
                                             int?errCode = null)
        {
            WebChatMessage refundReponse = null;

            try
            {
                if (!string.IsNullOrEmpty(Auth(webChatAuthConfig, wxConfig)))
                {
                    throw new BusinessException("签名错误", HttpStatus.Err.Id);
                }

                refundReponse = _xmlProvider.Deserialize <WebChatMessage>(xml);
                if (refundReponse == null)
                {
                    throw new BusinessException("参数错误", HttpStatus.Err.Id);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("接受用户信息错误:", ex.ExtractAllStackTrace());
            }

            return(refundReponse);
        }
        /// <summary>
        /// 处理用户消息
        /// </summary>
        /// <param name="webChatAuthConfig"></param>
        /// <param name="wxConfig"></param>
        /// <param name="xml"></param>
        /// <param name="errCode">错误码</param>
        public WebChatMessage ProcessRequest(WebChatAuthConfig webChatAuthConfig, WxConfig wxConfig, string xml,
                                             int?errCode = null)
        {
            WebChatMessage refundReponse = null;

            try
            {
                if (!string.IsNullOrEmpty(Auth(webChatAuthConfig, wxConfig)))
                {
                    throw new BusinessException("签名错误");
                }

                refundReponse = _xmlProvider.Deserialize <WebChatMessage>(xml);
                if (refundReponse == null)
                {
                    throw new BusinessException("参数错误");
                }
            }
            catch (System.Exception e)
            {
                _logService.Error("接受用户信息错误:", e);
            }

            return(refundReponse);
        }
Esempio n. 3
0
        public CommEntityUpdater(WxConfig wxConfig, JzDbContext db)
        {
            _wxConfig  = wxConfig;
            this.db    = db;
            basicToken = db.BasicTokens.FirstOrDefault();
            if (basicToken == null)
            {
                LogService.GetInstance().AddLog("CommEntityUpdater:ctor", null, "Create a new basic token record", "", "Info");
                basicToken = new BasicToken();
                db.BasicTokens.Add(basicToken);
                db.SaveChanges();
            }
            else if (string.IsNullOrEmpty(ComponentKeys.GetInstance().VerifyData.Ticket))
            {
                //load token from db to memory when component ticket is null
                ComponentKeys.GetInstance().VerifyData.Ticket = basicToken.Ticket;
                ComponentKeys.GetInstance().VerifyData.RefreshOn = basicToken.TicketRefreshOn;

                ComponentKeys.GetInstance().AccessData.AccessCode = basicToken.AccessToken;
                ComponentKeys.GetInstance().AccessData.ExpiresIn = basicToken.AccessTokenExpiresIn;
                ComponentKeys.GetInstance().AccessData.RefreshOn = basicToken.AccessTokenRefreshOn;

                ComponentKeys.GetInstance().PreAuthData.PreAuthCode = basicToken.PreAuthCode;
                ComponentKeys.GetInstance().PreAuthData.RefreshOn = basicToken.PreAuthCodeRefreshOn;
                ComponentKeys.GetInstance().PreAuthData.ExpiresIn = basicToken.PreAuthCodeExpiresIn;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 微信配置信息
        /// </summary>
        public static void GetSysConfig()
        {
            AliSmsConfig AliSms = new AliSmsConfig();
            ComSmsConfig ComSms = new ComSmsConfig();
            WxConfig     wx     = new WxConfig();
            EmailConfig  em     = new EmailConfig();

            //
            System.Reflection.PropertyInfo[] AliSmsInfo = AliSms.GetType().GetProperties();
            System.Reflection.PropertyInfo[] ComSmsInfo = ComSms.GetType().GetProperties();
            System.Reflection.PropertyInfo[] wxInfo     = wx.GetType().GetProperties();
            System.Reflection.PropertyInfo[] emInfo     = em.GetType().GetProperties();
            DataTable dtConfig = YDS6000.BLL.WholeBLL.GetSysConfig(WebConfig.Ledger, "");

            foreach (DataRow dr in dtConfig.Rows)
            {
                foreach (System.Reflection.PropertyInfo f_key in AliSmsInfo)
                {
                    if (CommFunc.ConvertDBNullToString(dr["CfKey"]).Equals(f_key.Name))
                    {
                        f_key.SetValue(AliSms, dr["CfValue"], null);
                    }
                }
                foreach (System.Reflection.PropertyInfo f_key in ComSmsInfo)
                {
                    if (CommFunc.ConvertDBNullToString(dr["CfKey"]).Equals(f_key.Name))
                    {
                        f_key.SetValue(ComSms, dr["CfValue"], null);
                    }
                }
                foreach (System.Reflection.PropertyInfo f_key in wxInfo)
                {
                    if (CommFunc.ConvertDBNullToString(dr["CfKey"]).Equals(f_key.Name))
                    {
                        f_key.SetValue(wx, dr["CfValue"], null);
                    }
                }
                foreach (System.Reflection.PropertyInfo f_key in emInfo)
                {
                    if (CommFunc.ConvertDBNullToString(dr["CfKey"]).Equals(f_key.Name))
                    {
                        f_key.SetValue(em, dr["CfValue"], null);
                    }
                }
            }
            //SmsFun.ComSmsConfig = ComSms;
            WebConfig.ComSmsConfig  = ComSms;
            SmsFun.AliSmsConfig     = AliSms;
            EmailUtilities.EmConfig = em;
            WebConfig.WxConfig      = wx;
            //
            WxPayAPI.WxPayConfig.APPID        = wx.WxAPPID;
            WxPayAPI.WxPayConfig.MCHID        = wx.WxMCHID;
            WxPayAPI.WxPayConfig.KEY          = wx.WxKEY;
            WxPayAPI.WxPayConfig.APPSECRET    = wx.WxAPPSECRET;
            WxPayAPI.WxPayConfig.Redirect_uri = wx.WxRedirect_uri;
            WxPayAPI.WxPayConfig.LOG_LEVENL   = 3;
        }
Esempio n. 5
0
        public async Task <WxConfig> GetConfig(string url)
        {
            string ticket = await TicketFactory.GetTicketAsync();

            if (string.IsNullOrEmpty(ticket))
            {
                return(null);
            }
            return(WxConfig.Create(_options, ticket, url));
        }
Esempio n. 6
0
        public WxPayApi(IHttpClientFactory httpClientFactory, ILogger <WxPayApi> logger, WxConfig config)
        {
            httpClientFactory.Should().NotBeNull();
            logger.Should().NotBeNull();
            config.Should().NotBeNull();

            this._client = httpClientFactory.CreateClient("wx_pay_api");
            this._logger = logger;
            this._config = config;

            this.chars = this.__chars__();
        }
Esempio n. 7
0
        /// <summary>
        /// 微信分享
        /// </summary>
        /// <param name="context"></param>
        private void Share(HttpContext context)
        {
            JsonHelper jsonHelper = new JsonHelper(context);

            string   url  = context.Request["page_url"];
            Encoding utf8 = Encoding.UTF8;

            url = HttpUtility.UrlDecode(url, utf8);

            WxConfig config = service.GetShareConfig(url);

            jsonHelper.Success("查询成功", config);
        }
Esempio n. 8
0
        public void GetShopperHistory_Returns_ShopperHistory()
        {
            var wxConfig = new WxConfig()
            {
                Token            = "c8e0d9d2-7d0d-4aa4-8cf1-a48c40384988",
                WolliesXEndPoint = "http://dev-wooliesx-recruitment.azurewebsites.net/api/"
            };

            var service = new WooliesXService(wxConfig);

            var result = service.GetShopperHistory();

            Assert.NotNull(result);
        }
Esempio n. 9
0
        public UserWxLoginService(
            WxConfig config,
            ILogger <UserWxLoginService> logger,
            IHttpClientFactory httpClientFactory)
        {
            this._logger = logger;

            this._client = httpClientFactory.CreateClient("wx_login");

            this.wx_appid = config.AppID;
            this.wx_appid.Should().NotBeNullOrEmpty("请配置微信appid");

            this.wx_appsecret = config.AppSecret;
            this.wx_appsecret.Should().NotBeNullOrEmpty("请配置微信appsecret");
        }
Esempio n. 10
0
        protected override LoginOAuthData GetOAuthResult(CoreContext coreContext, IDictionary <string, object> parameter)
        {
            LoginOAuthData data = new LoginOAuthData();

            var Code = parameter["code"] as string;

            if (string.IsNullOrEmpty(Code))
            {
                data.ErrorCode    = 1;
                data.ErrorMessage = "授权失败";
                return(data);
            }
            var      Endata     = parameter["EncryptedData"] as string;
            var      IV         = parameter["IV"] as string;
            var      Appid      = parameter["Appid"] as string;
            WxConfig config     = coreContext.WxConfig.Where(w => w.OwnerAccount == "xcx" && w.Status == "1").FirstOrDefault();
            string   appId      = config.AppId;
            string   appSecretd = config.AppSecret;
            JObject  keyData    = GetKey(appId, appSecretd, Code);

            if (!string.IsNullOrEmpty(keyData["openid"].Value <string>()))
            {
                JObject user = JsonConvert.DeserializeObject <JObject>(new AESCUtil(keyData["session_key"].Value <string>(), IV.Replace(" ", "+")).AESDecrypt(Endata.Replace(" ", "+")));
                data.NickName = ConvertString(user["nickName"].Value <string>());
                data.OpenId   = user["openId"].Value <string>();
                data.PhotoUrl = user["avatarUrl"].Value <string>();
                data.UnionId  = user["unionId"].Value <string>();
                data.Sex      = user["gender"].Value <string>();

                var member = coreContext.MemberInfo.Where(m => m.WxUnionid == data.UnionId).Select(m => new { m.AccountId, m.NickName, m.PhotoUrl, m.Sex, m.WxUnionid }).FirstOrDefault();
                if (member != null && !string.IsNullOrEmpty(member.AccountId))
                {
                    data.NickName = member.NickName;
                    data.PhotoUrl = member.PhotoUrl;
                    data.UnionId  = member.WxUnionid;
                    data.Sex      = member.Sex;

                    coreContext.Database.ExecuteSqlCommand($"update member_info set xcx_open_id={data.OpenId} where wx_unionid={data.UnionId}");
                }
            }
            else
            {
                data.ErrorCode    = keyData["errcode"].Value <int>();
                data.ErrorMessage = keyData["errmsg"].Value <string>();
            }

            return(data);
        }
Esempio n. 11
0
        protected override LoginOAuthData GetOAuthResult(CoreContext coreContext, IDictionary <string, object> parameter)
        {
            LoginOAuthData data = new LoginOAuthData();

            if (!string.IsNullOrEmpty(parameter["code"] as string))
            {
                WxConfig config            = coreContext.WxConfig.Where(w => w.OwnerAccount == "wx" && w.Status == "1").FirstOrDefault();
                string   appId             = config.AppId;
                string   appSecretd        = config.AppSecret;
                var      weixinAccessToken = Senparc.Weixin.MP.AdvancedAPIs.OAuthApi.GetAccessTokenAsync(appId, appSecretd, parameter["code"] as string).Result;
                //WeixinAccessToken weixinAccessToken = GetAccessToken(appId, appSecretd, parameter["code"] as string);
                if (weixinAccessToken.errcode == 0)
                {
                    data.OpenId  = weixinAccessToken.openid;
                    data.UnionId = weixinAccessToken.unionid;

                    var member = coreContext.MemberInfo.Where(m => m.WxUnionid == data.UnionId).Select(m => new { m.AccountId, m.NickName, m.PhotoUrl, m.Sex, m.WxUnionid }).FirstOrDefault();
                    if (member != null && !string.IsNullOrEmpty(member.AccountId))
                    {
                        data.NickName = member.NickName;
                        data.PhotoUrl = member.PhotoUrl;
                        data.UnionId  = member.WxUnionid;
                        data.Sex      = member.Sex;

                        coreContext.Database.ExecuteSqlCommand($"update member_info set wx_open_id={data.OpenId} where wx_unionid={data.UnionId}");
                    }
                    else
                    {
                        if (parameter["state"] as string == "snsapi_userinfo")
                        {
                            OAuthUserInfo user = OAuthApi.GetUserInfoAsync(weixinAccessToken.access_token, weixinAccessToken.openid).Result;
                            data.NickName = ConvertString(user.nickname);
                            data.PhotoUrl = user.headimgurl;
                            data.Sex      = string.Format("{0}", user.sex);
                        }
                    }
                }
            }
            else
            {
                data.ErrorCode    = 1;
                data.ErrorMessage = "授权失败";
            }

            return(data);
        }
        /// <summary>
        /// 授权认证
        /// </summary>
        /// <returns></returns>
        public string Auth(WebChatAuthConfig chatAuthConfig, WxConfig wxConfig)
        {
            string encodingAesKey = wxConfig.EncodingAesKey; //根据自己后台的设置保持一致
            string appId          = wxConfig.AppId;          //根据自己后台的设置保持一致
            string token          = wxConfig.Token;          //从配置文件获取Token

            if (string.IsNullOrEmpty(token))
            {
                _logService.Error("WeixinToken 配置项没有配置!");
            }

            if (CheckSignature(token, chatAuthConfig.Signature, chatAuthConfig.Timestamp, chatAuthConfig.Nonce) &&
                !string.IsNullOrEmpty(chatAuthConfig.EchoString))
            {
                return(chatAuthConfig.EchoString);
            }

            return("");
        }
Esempio n. 13
0
        public void RequestTrolleyPrice_Returns_Correct_Value()
        {
            var wxConfig = new WxConfig()
            {
                Token            = "c8e0d9d2-7d0d-4aa4-8cf1-a48c40384988",
                WolliesXEndPoint = "http://dev-wooliesx-recruitment.azurewebsites.net/api/"
            };

            var service            = new WooliesXService(wxConfig);
            var exampleRequestJson = @"{
                  'products': [
                    {
                      'name': 'product1',
                      'price': 100
                    }
                  ],
                  'specials': [
                    {
                      'quantities': [
                        {
                          'name': 'sepcial',
                          'quantity': 13
                        }
                      ],
                      'total': 15
                    }
                  ],
                  'quantities': [
                    {
                      'name': 'string',
                      'quantity': 10
                    }
                  ]
                }";

            var req = JsonConvert.DeserializeObject <TrolleyCalculatorRequest>(exampleRequestJson);

            var result = service.RequestTrolleyPrice(req);

            var expected = 0;

            Assert.Equal <decimal>(expected, result);
        }
Esempio n. 14
0
 public MpAccountController(IOptions <WxConfig> wxConfig, JzDbContext db)
 {
     this.db   = db;
     _wxConfig = wxConfig.Value;
 }
        /// <summary>
        /// 获取用户信息
        /// </summary>
        /// <param name="config"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        /// <exception cref="BusinessException"></exception>
        public LoginResultConfig Login(WxConfig config, string code)
        {
            LoginResultConfig loginResult = new LoginResultConfig();

            if (config.Type == WebChatTypeEnum.ThirdPartyLogins)
            {
                if (string.IsNullOrEmpty(code))
                {
                    throw new BusinessException("登录失败,授权异常");
                }

                WxUserInfo wxUserInfo = JsonConvert.DeserializeObject <WxUserInfo>(code);
                if (wxUserInfo == null)
                {
                    throw new BusinessException("登录失败,授权异常");
                }

                loginResult.Success = !string.IsNullOrEmpty(wxUserInfo.Openid) &&
                                      !string.IsNullOrEmpty(wxUserInfo.Unionid);

                loginResult.Error    = "";
                loginResult.OpenId   = wxUserInfo.Openid;
                loginResult.Unionid  = wxUserInfo.Unionid;
                loginResult.AppId    = config.AppId;
                loginResult.UserInfo = wxUserInfo;
            }
            else
            {
                //                string getAccessTokenUrl = "sns/oauth2/access_token?appid=" + appConfig.AppId + "&secret=" +
                //                                           appConfig.AppSecret + "&code=" +
                //                                           code + "&grant_type=authorization_code";

                string getAccessTokenUrl;
                if (config.Type == WebChatTypeEnum.Mweb)
                {
                    getAccessTokenUrl = "sns/oauth2/access_token?appid=" + config.AppId + "&secret=" +
                                        config.AppSecret + "&code=" +
                                        code + "&grant_type=authorization_code";
                }
                else
                {
                    getAccessTokenUrl =
                        $"sns/jscode2session?appid={config.AppId}&secret={config.AppSecret}&js_code={code}&grant_type=authorization_code";
                }

                string getAccessTokenResponse = WebChatJsSdkCommon.RestClient
                                                .Execute(new RestRequest(getAccessTokenUrl
                                                                         ))
                                                .Content;


                GetAccessTokenResultConfig getAccessTokenResult =
                    JsonConvert.DeserializeObject <GetAccessTokenResultConfig>(getAccessTokenResponse);


                loginResult.Success = !string.IsNullOrEmpty(getAccessTokenResult.Openid) &&
                                      !string.IsNullOrEmpty(getAccessTokenResult.Unionid);

                loginResult.Error   = getAccessTokenResult.Errmsg;
                loginResult.OpenId  = getAccessTokenResult.Openid;
                loginResult.Unionid = getAccessTokenResult.Unionid;
                loginResult.AppId   = config.AppId;


                if (loginResult.Success)
                {
                    string getUserInfoResponse = WebChatJsSdkCommon.RestClient
                                                 .Execute(new RestRequest("sns/userinfo?access_token=" + getAccessTokenResult.AccessToken +
                                                                          "&openid=" + loginResult.OpenId + "")).Content;


                    WxUserInfo wxUserInfo = JsonConvert.DeserializeObject <WxUserInfo>(getUserInfoResponse);

                    if (string.IsNullOrEmpty(wxUserInfo.Errmsg) && string.IsNullOrEmpty(wxUserInfo.Errcode))
                    {
                        loginResult.UserInfo = wxUserInfo;
                    }
                    else
                    {
                        loginResult.UserInfo = null;
                    }
                }

                if (!loginResult.Success)
                {
                    _logService.Warn("[微信登陆失败]\r\n请求参数:" + getAccessTokenUrl + "\r\n返回参数:" +
                                     new JsonCommon().Serializer(getAccessTokenResult, true));
                }
            }

            return(loginResult);
        }
Esempio n. 16
0
        public static WxConfig GetWxConfig(Store store, string url)
        {
            LogHelper.WriteLog("GetWxConfig start");
            WxConfig wxConfig = new WxConfig();

            LogHelper.WriteLog("store.appid:" + store.appid.Trim());
            LogHelper.WriteLog("store.accessToken:" + store.accessToken);
            LogHelper.WriteLog("store.jsapi_ticket:" + store.jsapi_ticket);
            LogHelper.WriteLog("store.accessTokenCreateTime:" + store.accessTokenCreateTime);
            if (store.accessToken != null && store.jsapi_ticket != null && store.accessTokenCreateTime > DateTime.Now.AddHours(-1))
            {
                url = url.Split('#')[0];
                var jsapi_ticket = store.jsapi_ticket;
                wxConfig.appId     = store.appid.Trim();
                wxConfig.debug     = true;
                wxConfig.nonceStr  = WxPayApi.GenerateNonceStr();
                wxConfig.timestamp = WxPayApi.GenerateTimeStamp();
                wxConfig.jsApiList = new List <string>();
                wxConfig.signature = signature(jsapi_ticket, wxConfig.nonceStr, wxConfig.timestamp, url);
            }
            else
            {
                var accessToken = wxAccessToken(store.appid.Trim(), store.secret.Trim());
                if (accessToken != null)
                {
                    if (!string.IsNullOrEmpty(accessToken.access_token))
                    {
                        var wt = wxticket(accessToken.access_token);
                        if (wt != null)
                        {
                            if (!string.IsNullOrEmpty(wt?.ticket))
                            {
                                IStoreService _stoeservice = new StoreService();
                                store.accessToken           = accessToken.access_token;
                                store.jsapi_ticket          = wt?.ticket;
                                store.accessTokenCreateTime = DateTime.Now;
                                LogHelper.WriteLog("store.accessToken:" + store.accessToken);
                                LogHelper.WriteLog("store.jsapi_ticket:" + store.jsapi_ticket);
                                LogHelper.WriteLog("store.accessTokenCreateTime:" + store.accessTokenCreateTime);
                                var api_ticketwx = apiticket(accessToken.access_token);
                                store.api_ticket = api_ticketwx?.ticket;
                                LogHelper.WriteLog("store.api_ticket:" + store.api_ticket);
                                _stoeservice.UpdateStoreaccessToken(store);
                                url = url.Split('#')[0];
                                var jsapi_ticket = wt?.ticket;
                                wxConfig.appId     = store.appid.Trim();
                                wxConfig.debug     = true;
                                wxConfig.nonceStr  = WxPayApi.GenerateNonceStr();
                                wxConfig.timestamp = WxPayApi.GenerateTimeStamp();
                                wxConfig.jsApiList = new List <string>();


                                wxConfig.signature = signature(jsapi_ticket, wxConfig.nonceStr, wxConfig.timestamp, url);
                            }
                            else

                            {
                                return(null);
                            }
                        }
                        else

                        {
                            return(null);
                        }
                    }
                    else

                    {
                        return(null);
                    }
                }
                else

                {
                    return(null);
                }
            }
            LogHelper.WriteLog("GetWxConfig end");
            return(wxConfig);
        }
Esempio n. 17
0
 public InsideMsgHandler(JzDbContext db, Stream inputStream, WxConfig wxConfig, PostModel postmodel = null)
     : base(inputStream, postmodel)
 {
     this.db   = db;
     _wxConfig = wxConfig;
 }
Esempio n. 18
0
 public UserController(IOptionsMonitor <WxConfig> wxConfig)
 {
     this.config = wxConfig.CurrentValue;
 }
Esempio n. 19
0
        private string OnPay(DataRow row)
        {
            #region 获取基本参数
            string CommunityId = string.Empty;
            if (row.Table.Columns.Contains("CommunityId"))
            {
                CommunityId = row["CommunityId"].ToString();
            }
            string RoomID = string.Empty;
            if (row.Table.Columns.Contains("RoomID"))
            {
                RoomID = row["RoomID"].ToString();
            }
            string CustID = string.Empty;
            if (row.Table.Columns.Contains("CustID"))
            {
                CustID = row["CustID"].ToString();
            }
            string OpenID = string.Empty;
            if (row.Table.Columns.Contains("OpenID"))
            {
                OpenID = row["OpenID"].ToString();
            }
            if (!row.Table.Columns.Contains("PayChannel") || string.IsNullOrEmpty(row["PayChannel"].ToString()))
            {
                return(new ApiResult(false, "参数PayChannel有误").toJson());
            }
            var community = GetCommunity(CommunityId);
            if (community == null)
            {
                return(JSONHelper.FromString(false, "未查询到小区信息"));
            }

            int CommID = AppGlobal.StrToInt(community.CommID);
            PubConstant.hmWyglConnectionString = GetConnectionStr(community);

            var payChannel = row["PayChannel"].ToString();
            var payType    = 0;

            switch (payChannel.ToLower())
            {
            case PayChannelString.Alipay:
                payType = 1;
                break;

            case PayChannelString.WechatPay:
                payType = 2;
                break;

            case PayChannelString.AllInPay_Alipay:
                payType = 1;
                break;

            case PayChannelString.AllInPay_WechatPay:
                payType = 2;
                break;

            default:
                return(new ApiResult(false, "参数payChannel有误").toJson());
            }
            if (payType == 2)
            {
                if (payChannel.ToLower().Equals(PayChannelString.AllInPay_WechatPay) && string.IsNullOrEmpty(OpenID))
                {
                    return(new ApiResult(false, "参数OpenID不能为空").toJson());
                }
            }

            #endregion

            using (IDbConnection erpConn = new SqlConnection(PubConstant.hmWyglConnectionString))
            {
                dynamic tb_Payment_Config = erpConn.QueryFirstOrDefault <dynamic>("SELECT * FROM Tb_Payment_Config WITH(NOLOCK) WHERE CommID = @CommID", new { CommID });
                if (null == tb_Payment_Config)
                {
                    return(new ApiResult(false, "该项目未开通对应支付方式").toJson());
                }
                // 旧方式获取对应支付配置
                AllinConfig allinConfig = null;
                // 新方式获取支付配置
                PaymentConfig paymentConfig = null;
                if (payChannel == PayChannelString.AllInPay_Alipay || payChannel == PayChannelString.AllInPay_WechatPay)
                {
                    try
                    {
                        allinConfig = JsonConvert.DeserializeObject <AllinConfig>(tb_Payment_Config.Config);
                        if (null == allinConfig)
                        {
                            return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                        }
                    }
                    catch (Exception)
                    {
                        return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                    }
                }
                else
                {
                    // 新的方式,Config存储多个配置
                    try
                    {
                        // ERP的配置表,要求存储一个Json数组,用于配置支持不同支付方式
                        // 配置项要求存储一个
                        List <PaymentConfig> configs = JsonConvert.DeserializeObject <List <PaymentConfig> >(tb_Payment_Config.Config);
                        if (null == configs || configs.Count <= 0)
                        {
                            return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                        }
                        if (payChannel == PayChannelString.Alipay)
                        {
                            paymentConfig = configs.Find(item => item.type == "AliPay");
                        }
                        if (payChannel == PayChannelString.WechatPay)
                        {
                            paymentConfig = configs.Find(item => item.type == "WChatPay");
                        }
                        if (null == paymentConfig)
                        {
                            return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
                #region 计算金额
                if (!row.Table.Columns.Contains("PayData") || string.IsNullOrEmpty(row["PayData"].ToString()))
                {
                    return(new ApiResult(false, "缺少参数PayData").toJson());
                }
                string PayData = row["PayData"].ToString();
                if (!CheckPayData(Global_Fun.BurstConnectionString(CommID, Global_Fun.BURST_TYPE_CHARGE), Convert.ToInt64(CustID), Convert.ToInt64(RoomID), PayData, out decimal Amt, out string errMsg, true, false, !"1940".Equals(Global_Var.LoginCorpID)))
                {
                    return(new ApiResult(false, errMsg).toJson());
                }
                if (Amt <= 0.00M)
                {
                    return(new ApiResult(false, "金额必须大于0").toJson());
                }
                #endregion

                JObject PayDataObj = JObject.Parse(PayData);
                int     Type       = (int)PayDataObj["Type"];

                #region 查询项目名称和房屋编号,拼接费用备注
                string FeesMemo = string.Empty;
                string RoomSign = string.Empty;
                if (Type == 1)
                {
                    FeesMemo = "物业综合费用缴纳";
                    string CommName = erpConn.QueryFirstOrDefault <string>("SELECT CommName FROM Tb_HSPR_Community WHERE CommID = @CommID", new { CommID });
                    if (string.IsNullOrEmpty(CommName))
                    {
                        CommName = Convert.ToString(CommID);
                    }
                    RoomSign = erpConn.QueryFirstOrDefault <string>("SELECT ISNULL(RoomSign,RoomName) AS RoomSign FROM Tb_HSPR_Room WHERE RoomID = @RoomID", new { RoomID });
                    if (string.IsNullOrEmpty(RoomSign))
                    {
                        RoomSign = Convert.ToString(RoomID);
                    }

                    FeesMemo += string.Format("-{0}-{1}", CommName, RoomSign);
                }
                else
                {
                    FeesMemo = "物业综合费用预存";
                    string CommName = erpConn.QueryFirstOrDefault <string>("SELECT CommName FROM Tb_HSPR_Community WHERE CommID = @CommID", new { CommID });
                    if (string.IsNullOrEmpty(CommName))
                    {
                        CommName = Convert.ToString(CommID);
                    }
                    RoomSign = erpConn.QueryFirstOrDefault <string>("SELECT ISNULL(RoomSign,RoomName) AS RoomSign FROM Tb_HSPR_Room WHERE RoomID = @RoomID", new { RoomID });
                    if (string.IsNullOrEmpty(RoomSign))
                    {
                        RoomSign = Convert.ToString(RoomID);
                    }

                    FeesMemo += string.Format("-{0}-{1}", CommName, RoomSign);
                }
                #endregion

                string NoticeId = Guid.NewGuid().ToString();

                // 生成订单
                if (erpConn.Execute("INSERT INTO Tb_Notice(Id, CommID, RoomID, CustID, PayData, CreateTime) VALUES(@Id, @CommID, @RoomID, @CustID, @PayData, @CreateTime)", new { Id = NoticeId, CommID, RoomID, CustID, PayData, CreateTime = DateTime.Now.ToString() }) <= 0)
                {
                    return(new ApiResult(false, "创建收款订单失败,请重试").toJson());
                }
                string ChargeMode = "业主APP缴费";
                if (payChannel == PayChannelString.AllInPay_Alipay)
                {
                    ChargeMode = "通联_业主APP(支付宝)";
                }
                else if (payChannel == PayChannelString.AllInPay_WechatPay)
                {
                    ChargeMode = "通联_业主APP(微信)";
                }
                else
                {
                    ChargeMode = "通联_业主APP";
                }
                #region 修改收款方式
                if (erpConn.QueryFirstOrDefault <int>("SELECT COUNT(1) FROM syscolumns WHERE id=object_id('Tb_Notice') AND name = 'ChargeMode'") > 0)
                {
                    erpConn.Execute("UPDATE Tb_Notice SET ChargeMode = @ChargeMode WHERE Id = @Id", new { ChargeMode, Id = NoticeId });
                }
                #endregion
                DateTime dateNow          = DateTime.Now;
                string   OrderSN          = dateNow.ToString("yyyyMMddHHmmssfff") + Utils.BuildRandomStr(3);
                string   PaymentNotifyUrl = string.Empty;

                Dictionary <string, string> param = null;
                if (payChannel == PayChannelString.AllInPay_Alipay || payChannel == PayChannelString.AllInPay_WechatPay)
                {
                    #region 请求通联支付
                    #region 获取对应类型的下账地址
                    if (Type == 1)
                    {
                        PaymentNotifyUrl = AppGlobal.GetAppSetting("AllinPay_Notify_Url") + "?CommID=" + CommID;
                    }
                    else
                    {
                        PaymentNotifyUrl = AppGlobal.GetAppSetting("AllinPay_Prec_Notify_Url") + "?CommID=" + CommID;
                    }
                    #endregion
                    try
                    {
                        param = SybWxPayService.Pay(Convert.ToInt64(Amt * 100), OrderSN, payChannel == PayChannelString.AllInPay_Alipay ? "A01" : "W06", FeesMemo, RoomSign, OpenID, "", PaymentNotifyUrl, "", "", "", "", allinConfig.orgid, allinConfig.appid, allinConfig.custid, allinConfig.appkey, allinConfig.subbranch);

                        if (param == null || !param.ContainsKey("payinfo"))
                        {
                            GetLog().Error("OnPay:" + JsonConvert.SerializeObject(param));
                            return(new ApiResult(false, "生成支付订单失败,请重试").toJson());
                        }
                    }
                    catch (Exception ex)
                    {
                        GetLog().Error("OnPay", ex);
                        return(new ApiResult(false, "生成支付订单失败,请重试").toJson());
                    }
                    if (erpConn.Execute(@"INSERT INTO Tb_Payment_Order(PayType, OrderSN, NoticeId, Amt, CreateTime) 
                                            VALUES(@PayType, @OrderSN, @NoticeId, @Amt, @CreateTime)",
                                        new { PayType = payType, OrderSN = OrderSN, NoticeId = NoticeId, Amt = Amt, CreateTime = dateNow }) <= 0)
                    {
                        return(new ApiResult(false, "生成支付订单失败,请重试(1003)").toJson());
                    }
                    return(new ApiResult(true, new { OrderSN = OrderSN, QrCode = param["payinfo"].ToString() }).toJson());

                    #endregion
                }
                if (payChannel == PayChannelString.Alipay)
                {
                    AliConfig aliConfig = null;
                    try
                    {
                        aliConfig = Config.GetConfig <AliConfig>(paymentConfig.config);
                        if (null == aliConfig)
                        {
                            return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                        }
                    }
                    catch (Exception)
                    {
                        return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                    }
                    #region 请求支付宝官方支付
                    #region 获取对应类型的下账地址
                    PaymentNotifyUrl = AppGlobal.GetAppSetting("AliPay_Notify_Url");
                    #endregion
                    AlipayTradeAppPayResponse response = null;
                    try
                    {
                        JObject BizContent = new JObject();
                        //要求15分钟内支付
                        BizContent.Add("timeout_express", "15m");
                        BizContent.Add("total_amount", Amt);
                        BizContent.Add("body", FeesMemo);
                        BizContent.Add("subject", FeesMemo);
                        BizContent.Add("out_trade_no", OrderSN);
                        IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", aliConfig.appid, aliConfig.app_private_key, "json", "1.0", "RSA2", aliConfig.alipay_public_key, "UTF-8", false);
                        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest
                        {
                            BizContent = JsonConvert.SerializeObject(BizContent),
                        };
                        request.SetNotifyUrl(PaymentNotifyUrl);
                        response = client.SdkExecute(request);
                    }
                    catch (Exception ex)
                    {
                        Log(ex.Message, "AliPayLogs\\");
                        GetLog().Error(ex.Message + Environment.CommandLine + ex.StackTrace);
                        return(new ApiResult(false, "请求订单失败,请重试").toJson());
                    }
                    if (erpConn.Execute("INSERT INTO Tb_Payment_Order(PayType, OrderSN, NoticeId, Amt, CreateTime) VALUES(@PayType, @OrderSN, @NoticeId, @Amt, @CreateTime)", new { PayType = 1, OrderSN, NoticeId = NoticeId, Amt = Amt, CreateTime = dateNow }) <= 0)
                    {
                        return(new ApiResult(false, "生成订单失败").toJson());
                    }
                    return(new ApiResult(true, new { OrderSN = OrderSN, QrCode = response.Body }).toJson());

                    #endregion
                }
                if (payChannel == PayChannelString.WechatPay)
                {
                    WxConfig wxConfig = null;
                    try
                    {
                        wxConfig = Config.GetConfig <WxConfig>(paymentConfig.config);
                        if (null == wxConfig)
                        {
                            return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                        }
                    }
                    catch (Exception)
                    {
                        return(new ApiResult(false, "该项目支付类型对应配置有误").toJson());
                    }

                    #region 请求微信官方支付
                    #region 获取对应类型的下账地址
                    PaymentNotifyUrl = AppGlobal.GetAppSetting("WxPay_Notify_Url");
                    #endregion
                    WxPayData wxPayData = new WxPayData();
                    wxPayData.SetValue("appid", wxConfig.appid);
                    wxPayData.SetValue("body", FeesMemo);
                    wxPayData.SetValue("mch_id", wxConfig.mch_id);
                    wxPayData.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
                    wxPayData.SetValue("notify_url", PaymentNotifyUrl);
                    wxPayData.SetValue("out_trade_no", OrderSN);
                    wxPayData.SetValue("spbill_create_ip", "8.8.8.8");
                    wxPayData.SetValue("total_fee", Convert.ToInt32(Amt * 100));
                    wxPayData.SetValue("trade_type", "APP");
                    wxPayData.SetValue("sign_type", wxpay.utils.WxPayData.SIGN_TYPE_HMAC_SHA256);
                    wxPayData.SetValue("sign", wxPayData.MakeSign(wxConfig.appkey));
                    try
                    {
                        wxPayData = WxPayApi.UnifiedOrder(wxPayData);
                    }
                    catch (Exception)
                    {
                        return(new ApiResult(false, "请求超时,请重试").toJson());
                    }
                    if (!wxPayData.IsSet("return_code") || !"SUCCESS".Equals(wxPayData.GetValue("return_code").ToString()))
                    {
                        return(new ApiResult(false, "请求支付订单失败").toJson());
                    }
                    if (!wxPayData.IsSet("result_code") || !"SUCCESS".Equals(wxPayData.GetValue("result_code").ToString()))
                    {
                        return(new ApiResult(false, "请求支付订单失败").toJson());
                    }
                    if (!wxPayData.IsSet("prepay_id"))
                    {
                        return(new ApiResult(false, "请求支付订单失败").toJson());
                    }
                    string prepay_id = wxPayData.GetValue("prepay_id").ToString();
                    if (erpConn.Execute("INSERT INTO Tb_Payment_Order(PayType, OrderSN, NoticeId, Amt, CreateTime) VALUES(@PayType, @OrderSN, @NoticeId, @Amt, @CreateTime)", new { PayType = 2, OrderSN, NoticeId = NoticeId, Amt = Amt, CreateTime = dateNow }) <= 0)
                    {
                        return(new ApiResult(false, "生成订单失败").toJson());
                    }
                    WxPayData result = new WxPayData();
                    result.SetValue("appid", wxPayData.GetValue("appid").ToString());
                    result.SetValue("partnerid", wxPayData.GetValue("mch_id").ToString());
                    result.SetValue("prepayid", prepay_id);
                    result.SetValue("package", "Sign=WXPay");
                    result.SetValue("noncestr", wxPayData.GetValue("nonce_str").ToString());
                    result.SetValue("timestamp", WxPayApi.GenerateTimeStamp());
                    result.SetValue("sign", result.MakeSign(wxpay.utils.WxPayData.SIGN_TYPE_HMAC_SHA256, wxConfig.appkey));
                    JObject jObj = JObject.Parse(result.ToJson());
                    return(new ApiResult(true, new { OrderSN = OrderSN, QrCode = jObj }).toJson());

                    #endregion
                }
                return(new ApiResult(false, "不支持的支付方式").toJson());
            }
        }
Esempio n. 20
0
        public WooliesXService(WxConfig wxConfig)
        {
            _config = wxConfig;

            _url = _config.WolliesXEndPoint;
        }
Esempio n. 21
0
 public HomeController(IOptions <WxConfig> wxConfig, JzDbContext context)
 {
     _wxConfig = wxConfig.Value;
     db        = context;
 }
Esempio n. 22
0
 /// <summary>
 /// 判断accessTokenOrAppId参数是否是AppId(或对应企业微信的AppKey)
 /// </summary>
 /// <param name="accessTokenOrAppId">AccessToken或AppId(推荐使用AppId,需要先注册)</param>
 /// <returns></returns>
 public static bool IsAppId(string accessTokenOrAppId, PlatformType platFormType)
 {
     return(WxConfig.DefaultAppIdCheckFunc(accessTokenOrAppId, platFormType));
 }
Esempio n. 23
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="config"></param>
 /// <param name="cacheService"></param>
 public WebChatJsSdkCommon(WxConfig config, ICacheProvider cacheService)
 {
     _config       = config;
     _cacheService = cacheService;
 }