/// <summary> /// 保存微信账号 /// </summary> /// <param name="user_id"></param> /// <param name="account"></param> /// <param name="account_ent"></param> /// <param name="merchant"></param> /// <param name="imgmsg"></param> /// <returns></returns> public StateCode Save(long user_id, WeChatAccount account, WeChatAccountEnt account_ent, WeChatMerchant merchant, string imgmsg) { using (ISession s = SessionFactory.Instance.CreateSession()) { try { s.StartTransaction(); WeChatAccount wx_account = s.Get <WeChatAccount>("where id != @0", 0); if (wx_account != null) { account.id = wx_account.id; account.updated_user_id = user_id; account.updated_date = DateTime.Now; s.Update <WeChatAccount>(account); } else { int rand; char code; string randomcode = String.Empty; //生成一定长度的ToKen System.Random random = new Random(); for (int i = 0; i < 8; i++) { rand = random.Next(); if (rand % 3 == 0) { code = (char)('A' + (char)(rand % 26)); } else { code = (char)('0' + (char)(rand % 10)); } randomcode += code.ToString(); } //设置账号ToKen account.token = randomcode; account.created_user_id = user_id; account.created_date = DateTime.Now; s.Insert <WeChatAccount>(account); } //企业号信息 WeChatAccountEnt wx_account_ent = s.Get <WeChatAccountEnt>("where id > 0"); if (wx_account_ent == null) { account_ent.created_user_id = user_id; account_ent.created_date = DateTime.Now; s.Insert(account_ent); } else { account_ent.id = wx_account_ent.id; s.Update(account_ent); } WeChatMerchant mh = s.Get <WeChatMerchant>("where id > 0"); if (mh == null) { s.Insert <WeChatMerchant>(merchant); } else { merchant.id = mh.id; s.Update <WeChatMerchant>(merchant); } //判断是否存在图片信息 if (!string.IsNullOrEmpty(imgmsg) && imgmsg.IndexOf("#") != -1) { //图片名称 string filename = imgmsg.Split('#')[0]; //图片类型 string biztype = imgmsg.Split('#')[1]; //去除重复图片 s.ExcuteUpdate("update tb_img set biz_id = 0 where biz_type = @0 and biz_type = @1 ", biztype, wx_account.id); Img img = s.Get <Img>("where file_name = @0 and biz_type = @1 ", filename, biztype); if (img != null) { img.biz_id = wx_account.id; s.Update <Img>(img); } } s.Commit(); return(StateCode.State_200); } catch (Exception ex) { s.RollBack(); return(StateCode.State_500); } } }
/// <summary> /// 公众号设置 /// </summary> /// <param name="user"></param> /// <param name="auth_code"></param> /// <param name="expires_in"></param> /// <returns></returns> public IActionResult AccountSetting(SysUser user, string auth_code = "", string expires_in = "") { //当前用户加密ID ViewBag.Ticket = StringHelper.GetEncryption(bid.ToString()); //用户图片路径 ViewBag.imgurl = string.Empty; ViewBag.OpenToken = ""; ViewBag.AscKey = ""; //缺省图片路劲 ViewBag.defimgurl = ResXmlConfig.Instance.DefaultImgSrc(AppGlobal.Res, ImgType.WX_Account); ViewBag.wx_account_imgurl = ViewBag.defimgurl; WeChatAccount account = ServiceIoc.Get <WeChatAccountService>().Get(); if (account != null) { Img img = ServiceIoc.Get <ImgService>().GetImg(ImgType.WX_Account, account.id); if (img != null) { ViewBag.wx_account_imgurl = string.IsNullOrEmpty(img.getImgUrl()) ? ViewBag.defimgurl : img.getImgUrl(); } ViewBag.account = JsonConvert.SerializeObject(account); } else { ViewBag.Token = StringHelper.CreateRandomCode(10); } WeChatMerchant merchant = ServiceIoc.Get <WeChatMerchantService>().Get(); if (merchant != null) { ViewBag.merchant = JsonConvert.SerializeObject(merchant); } WXOpenAccount openAcount = ServiceIoc.Get <WXOpenAccountService>().Get(); if (openAcount != null) { ViewBag.openAcount = JsonConvert.SerializeObject(openAcount); } WXOpenSetting openSetting = ServiceIoc.Get <WXOpenSettingService>().Get(); if (openSetting != null) { ViewBag.opensetting = JsonConvert.SerializeObject(openSetting); } else { ViewBag.OpenToken = StringHelper.GetRandomCode(10); ViewBag.AscKey = StringHelper.GetRandomCode(43); } ViewBag.AuthTitle = "待微信推送票据"; ViewBag.url = "javascript:;"; //获取当前凭据 WXOpenCmptVerifyTicket ticket = ServiceIoc.Get <WXOpenAuthService>().GetCmptVerifyTicket(); if (ticket != null && ConfigManage.AppSettings <bool>("WeChatSettings:IsOpenAuthUrl")) { if (ticket.ComponentVerifyTicket != null) { ViewBag.WXOpenTicket = ticket.ComponentVerifyTicket.Value; string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ViewBag.WXOpenTicket); string pre_auth_code = ServiceIoc.Get <WXOpenAuthService>().GetOpenPreAuthCode(cmpt_access_token, openSetting.component_appid); string redirect_uri = AppGlobal.Admin + "WeChat/AccountSetting"; ViewBag.AuthTitle = "授权公众号"; //授权地址 ViewBag.url = WeChatOpenHelper.GetOpenOuthUrl(openSetting.component_appid, pre_auth_code, redirect_uri); } } //授权回调 if (!string.IsNullOrEmpty(auth_code) && !string.IsNullOrEmpty(expires_in)) { //组件Token string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value); //使用授权码换取公众号的接口调用凭据和授权信息 WXOpenAuthFun auth_fun = ServiceIoc.Get <WXOpenAuthService>().GetAuthInfo(cmpt_access_token, openSetting.component_appid, auth_code); //组件ID string cmpt_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value); //成功 if (auth_fun != null && !string.IsNullOrEmpty(cmpt_token)) { ServiceIoc.Get <WXOpenAccountService>().AuthWeChatAccount(user.id, cmpt_token, openSetting.component_appid, auth_fun.authorization_info.authorizer_appid); } return(Redirect(AppGlobal.Admin + "WeChat/AccountSetting")); } return(View()); }
/// <summary> /// 保存公众账号 /// </summary> /// <param name="user"></param> /// <param name="account"></param> /// <param name="account_ent"></param> /// <param name="merchant"></param> /// <param name="imgmsg"></param> /// <returns></returns> public JsonResult SaveAccount(SysUser user, WeChatAccount account, WeChatAccountEnt account_ent, WeChatMerchant merchant, string imgmsg) { //微信公众号类型验证 if (account.type != WXAccountType.Subscription) { AccessToken token = WeChatBaseHelper.GetAccessToken(account.appid, account.app_secret); if (token.access_token == null) { return(Json(GetResult(StateCode.State_11001, token.errcode.ToString()))); } } StateCode state = ServiceIoc.Get <WeChatAccountService>().Save(user.id, account, account_ent, merchant, imgmsg); return(Json(GetResult(state))); }
public JsonResult SubmitRefundOrder(string no, decimal refund_amount, IHostingEnvironment host) { try { //退款状态码 StateCode state = StateCode.State_500; #region 订单基本状态判断 //退款单 OrderRefund orderRefund = ServiceIoc.Get <OrderRefundService>().Get(no); //订单 ProductOrder order = ServiceIoc.Get <ProductOrderService>().GetById(orderRefund.order_id); //是否存在订单 if (order == null) { return(Json(GetResult(StateCode.State_551))); } //订单是否未支付 if (!order.is_pay) { return(Json(GetResult(StateCode.State_552))); } //退款金额是否大于实际支付金额 if (refund_amount > order.actual_amount) { return(Json(GetResult(StateCode.State_554))); } //订单状态和退款单状态是可以退款的情况 if (order.refund_status != 1 || orderRefund.status != 1) { return(Json(GetResult(StateCode.State_553))); } #endregion //返回信息 string msg = string.Empty; bool PayStatus = ConfigManage.AppSettings <bool>("AppSettings:WXPayStatus"); //支付宝支付 if (PayMethod.AliPay == order.pay_method) { //商户号ID string app_id = ConfigManage.AppSettings <string>("AppSettings:ALIPAY_APP_ID"); //AliRefundPayBizContent bizContent = new AliRefundPayBizContent(); //bizContent.out_trade_no = orderRefund.order_serial_no; //bizContent.refund_amount = PayStatus ? refund_amount : decimal.Parse("0.01"); ////string webRootPath = host.WebRootPath; //string privateKeyPem = host.ContentRootPath + "Config\\alipay_cret\\rsa_private_key.pem"; //string publicKeyPem = host.ContentRootPath + "Config\\alipay_cret\\rsa_public_key.pem"; //IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app_id, privateKeyPem, "json", "1.0", "RSA2", publicKeyPem, "utf-8", true); //AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); //request.BizContent = JsonConvert.SerializeObject(bizContent); //AlipayTradeRefundResponse response = client.Execute(request); //if (!response.IsError) //{ // state = ServiceIoc.Get<OrderRefundService>().AliPayConfirmRefund(orderRefund.order_serial_no, order.id); //} //else { } }//微信app支付 else if (PayMethod.WeChat_App == order.pay_method) { RefundPay refundParam = new RefundPay(); //证书路径 DirectoryInfo Dir = Directory.GetParent(ConfigManage.AppSettings <string>("AppSettings:WeChat_App_CertPath")); string certPath = Dir.Parent.Parent.FullName; //证书密钥 //string certPwd = Settings.AppSettings("CertPwd"); //商户信息 WeChatMerchant merchant = ServiceIoc.Get <WeChatMerchantService>().Get(); refundParam.appid = merchant.app_id; //商户号 refundParam.mch_id = merchant.mch_id; //随机数 refundParam.nonce_str = StringHelper.CreateNoncestr(16); //商户侧传给微信的订单号 refundParam.out_trade_no = orderRefund.order_serial_no; //商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 refundParam.out_refund_no = orderRefund.refund_serial_no; //订单总金额,单位为分 refundParam.total_fee = PayStatus ? (int)(refund_amount * 100) : 1; //订单总金额,单位为分 refundParam.refund_fee = PayStatus ? (int)(refund_amount * 100) : 1; //操作员帐号, 默认为商户号 refundParam.op_user_id = merchant.mch_id; //退款 state = ServiceIoc.Get <OrderRefundService>().WeChatConfirmRefund(refundParam, order.id, certPath, merchant.mch_id, merchant.pay_key, out msg); }//微信公众号支付 else if (PayMethod.WeChat_JsApi == order.pay_method || PayMethod.WeChat_Native == order.pay_method) { RefundPay refundParam = new RefundPay(); //证书路径 DirectoryInfo Dir = Directory.GetParent(ConfigManage.AppSettings <string>("AppSettings:WeChat_App_CertPath")); string certPath = Dir.Parent.Parent.FullName; //证书密钥 //string certPwd = Settings.AppSettings("CertPwd"); //开放平台授权公众号信息 WeChatAccount weChatAccount = ServiceIoc.Get <WeChatAccountService>().Get(); refundParam.appid = weChatAccount.appid; //商户号 refundParam.mch_id = weChatAccount.mch_id; //随机数 refundParam.nonce_str = StringHelper.CreateNoncestr(16); //商户侧传给微信的订单号 refundParam.out_trade_no = orderRefund.order_serial_no; //商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 refundParam.out_refund_no = orderRefund.refund_serial_no; //订单总金额,单位为分 refundParam.total_fee = PayStatus ? (int)(refund_amount * 100) : 1; //订单总金额,单位为分 refundParam.refund_fee = PayStatus ? (int)(refund_amount * 100) : 1; //操作员帐号, 默认为商户号 refundParam.op_user_id = weChatAccount.mch_id; //退款 state = ServiceIoc.Get <OrderRefundService>().WeChatConfirmRefund(refundParam, order.id, certPath, weChatAccount.mch_id, weChatAccount.pay_key, out msg); } return(Json(GetResult(state, msg))); } catch (Exception ex) { ServiceIoc.Get <APILogsService>().Save("提交退款SubmitRefundOrder==>" + ex.ToString()); return(Json(GetResult(StateCode.State_500))); } }