/// <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); }
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; } }
/// <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; }
public async Task <WxConfig> GetConfig(string url) { string ticket = await TicketFactory.GetTicketAsync(); if (string.IsNullOrEmpty(ticket)) { return(null); } return(WxConfig.Create(_options, ticket, url)); }
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__(); }
/// <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); }
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); }
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"); }
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); }
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(""); }
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); }
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); }
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); }
public InsideMsgHandler(JzDbContext db, Stream inputStream, WxConfig wxConfig, PostModel postmodel = null) : base(inputStream, postmodel) { this.db = db; _wxConfig = wxConfig; }
public UserController(IOptionsMonitor <WxConfig> wxConfig) { this.config = wxConfig.CurrentValue; }
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()); } }
public WooliesXService(WxConfig wxConfig) { _config = wxConfig; _url = _config.WolliesXEndPoint; }
public HomeController(IOptions <WxConfig> wxConfig, JzDbContext context) { _wxConfig = wxConfig.Value; db = context; }
/// <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)); }
/// <summary> /// /// </summary> /// <param name="config"></param> /// <param name="cacheService"></param> public WebChatJsSdkCommon(WxConfig config, ICacheProvider cacheService) { _config = config; _cacheService = cacheService; }