/** * * 获取收货地址js函数入口参数,详情请参考收货地址共享接口:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_9 * @return string 共享收货地址js函数需要的参数,json格式可以直接做参数使用 */ public string GetEditAddressParameters(string AdminHotelid, int Hotelid = 0) { string parameter = ""; try { string host = page.Request.Url.Host; string path = page.Request.Path; string queryString = page.Request.Url.Query; //这个地方要注意,参与签名的是网页授权获取用户信息时微信后台回传的完整url string url = "http://" + host + path + queryString; //构造需要用SHA1算法加密的数据 WxPayData signData = new WxPayData(); signData.SetValue("appid", WxPayConfig.APPID(AdminHotelid, Hotelid)); signData.SetValue("url", url); signData.SetValue("timestamp", WxPayApi.GenerateTimeStamp()); signData.SetValue("noncestr", WxPayApi.GenerateNonceStr()); signData.SetValue("accesstoken", access_token); string param = signData.ToUrl(); //Log.Debug(this.GetType().ToString(), "SHA1 encrypt param : " + param); //SHA1加密 string addrSign = FormsAuthentication.HashPasswordForStoringInConfigFile(param, "SHA1"); //Log.Debug(this.GetType().ToString(), "SHA1 encrypt result : " + addrSign); //获取收货地址js函数入口参数 WxPayData afterData = new WxPayData(); afterData.SetValue("appId", WxPayConfig.APPID(AdminHotelid, Hotelid)); afterData.SetValue("scope", "jsapi_address"); afterData.SetValue("signType", "sha1"); afterData.SetValue("addrSign", addrSign); afterData.SetValue("timeStamp", signData.GetValue("timestamp")); afterData.SetValue("nonceStr", signData.GetValue("noncestr")); //转为json格式 parameter = afterData.ToJson(); //Log.Debug(this.GetType().ToString(), "Get EditAddressParam : " + parameter); } catch (Exception ex) { Log.Error(this.GetType().ToString(), ex.ToString()); throw new WxPayException(ex.ToString()); } return(parameter); }
/// <summary> /// 获取扫码支付的Html /// </summary> /// <param name="transaction">支付交易</param> /// <returns></returns> public virtual HtmlString GetQRCodePaymentHtml(PaymentTransaction transaction) { // 获取商户Id等设置 var apiData = transaction.Api.ExtraData .GetOrDefault <WechatApiHandler.ApiData>("ApiData") ?? new WechatApiHandler.ApiData(); var config = new WxPayConfig(apiData); // 获取货币信息,目前仅支持人民币支付 var templateManager = Application.Ioc.Resolve <TemplateManager>(); var currencyManager = Application.Ioc.Resolve <CurrencyManager>(); var info = currencyManager.GetCurrency(transaction.CurrencyType); if (info == null || info.Type != "CNY") { return(new HtmlString(templateManager.RenderTemplate( "finance.payment/error_text.html", new { error = new T("WeChat pay only support CNY") }))); } // 通过微信Api获取二维码Url var request = new WxPayData(); request.SetValue("body", transaction.Description); // 交易描述 request.SetValue("out_trade_no", transaction.Serial); // 交易流水号 request.SetValue("total_fee", ((int)(transaction.Amount * 100)).ToString()); // 总金额,单位分 request.SetValue("trade_type", "NATIVE"); // 扫码支付 request.SetValue("product_id", transaction.Id.ToString()); // 商品Id, 这里设置交易id var response = WxPayApi.UnifiedOrder(config, request); if (response.IsError) { return(new HtmlString(templateManager.RenderTemplate( "finance.payment/error_text.html", new { error = response.ErrMsg }))); } // 生成二维码图片 var generator = new QRCodeGenerator(); var qrCodeUrl = response.GetValue("code_url") as string; var qrCodeData = generator.CreateQrCode(qrCodeUrl, QRCodeGenerator.ECCLevel.Q); var qrCode = new Base64QRCode(qrCodeData); var qrCodeBase64 = qrCode.GetGraphic(20); // 返回模板 return(new HtmlString(templateManager.RenderTemplate( "finance.payment.wechat/qrcode_pay.html", new { transactionId = transaction.Id, qrCodeBase64 }))); }
protected bool IsWeixinSeverIp(ILogger <GameController> logger) { string clientIp = httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString(); var weixinIps = WxPayConfig.GetWeixinIps(); var ips = weixinIps.ip_list; logger.LogWarning("客户端Ip:" + clientIp); for (int i = 0; i < ips.Length; i++) { logger.LogWarning("微信severIps:" + ips[i]); if (ips[i] == clientIp) { return(true); } } return(false); }
public WxPayData ReceiveSign(WxPayData res, string city = "") { string plan_id = res.GetValue("plan_id").ToString(); city = (plan_id == "107402") ? "杭州市2" : city; Log.Write("recesion" + city, res.ToXml()); var openid = res.GetValue("openid").ToString(); string mch_id = res.GetValue("mch_id").ToString(); if (res.IsSet("return_code") && res.IsSet("result_code")) { string return_code = res.GetValue("return_code").ToString().ToLower().Trim(); string result_code = res.GetValue("result_code").ToString().ToLower().Trim(); if (return_code.Equals("success") && result_code.Equals("success")) { var Entrustinfo = this.GetEntrustinfo(openid, WxPayConfig.APPID(city), mch_id); if (Entrustinfo != null) { Entrustinfo.DataDriver = this.DataSource; Entrustinfo.FldSigndata = res.ToXml(); string change_type = res.GetValue("change_type").ToString().ToLower(); Entrustinfo.FldChangeType = change_type.Equals("add") ? 1 : 0; Entrustinfo.FldContractId = res.GetValue("contract_id").ToString(); Entrustinfo.FldMchId = res.GetValue("mch_id").ToString(); try { Entrustinfo.FldOperateTime = DateTime.Parse(res.GetValue("operate_time").ToString()); Entrustinfo.FldContractExpiredTime = DateTime.Parse(res.GetValue("contract_expired_time").ToString()); } catch { Entrustinfo.FldRequestSerial = res.GetValue("request_serial").ToString(); } Entrustinfo.Store(); } } } WxPayData pres = new WxPayData(); pres.SetValue("return_code", "SUCCESS"); pres.SetValue("return_msg", "回调成功"); return(pres); }
/// <summary> /// 查询订单 /// </summary> /// <param name="wxPayConfig"></param> /// <param name="transaction_id"></param> /// <returns></returns> public static bool QueryOrder(WxPayConfig wxPayConfig, string transaction_id) { WxPayData req = new WxPayData(); req.SetValue("transaction_id", transaction_id); WxPayData res = WxPayApi.OrderQuery(wxPayConfig, req); if (res.GetValue("return_code").ToString() == "SUCCESS" && res.GetValue("result_code").ToString() == "SUCCESS") { return(true); } else { return(false); } }
/** * 生成扫描支付模式一URL * @param productId 商品ID * @return 模式一URL */ public string GetPrePayUrl(string productId, string AdminHotelid, int Hotelid = 0) { Log.Info(this.GetType().ToString(), "Native pay mode 1 url is producing..."); WxPayData data = new WxPayData(); data.SetValue("appid", WxPayConfig.APPID(AdminHotelid, Hotelid)); //公众帐号id data.SetValue("mch_id", WxPayConfig.MCHID(AdminHotelid, Hotelid)); //商户号 data.SetValue("time_stamp", WxPayApi.GenerateTimeStamp()); //时间戳 data.SetValue("nonce_str", WxPayApi.GenerateNonceStr()); //随机字符串 data.SetValue("product_id", productId); //商品ID data.SetValue("sign", data.MakeSign(AdminHotelid, Hotelid)); //签名 string str = ToUrlParams(data.GetValues()); //转换为URL串 string url = "weixin://wxpay/bizpayurl?" + str; Log.Info(this.GetType().ToString(), "Get native pay mode 1 url : " + url); return(url); }
public WxPayConfig GenerateConfigModelW(string machineId) { WxPayConfig payConfig = new WxPayConfig(); List <ConfigModel> lstConfig = GetConfig(machineId); if (lstConfig.Count > 0) { ConfigModel cModel = lstConfig[0]; payConfig.APPID = cModel.WxAppId; payConfig.MCHID = cModel.WxMchId; payConfig.KEY = cModel.WxKey; payConfig.APPSECRET = cModel.WxAppSecret; payConfig.SSLCERT_PATH = cModel.WxSslcertPath; payConfig.SSLCERT_PASSWORD = cModel.WxSslcertPassword; } return(payConfig); }
/// <summary> /// 绑定手机号 /// </summary> /// <param name="openid"></param> /// <param name="mobile"></param> /// <param name="code"></param> /// <returns></returns> public JsonResult BindMobile(string openid, string mobile, string code, string nickname, string city) { bool result = false, needCheck = (ConfigurationManager.AppSettings["RNameNeedCheck"] == "1")?true:false; string msg = string.Empty; var bus = new Bus(this.DataSource); var user = bus.GetEntrustinfo(openid, WxPayConfig.APPID(city), WxPayConfig.getMCHID(city)); var wxuser = bus.GetUserInfo(openid, WxPayConfig.APPID(city)); var isSign = bus.isSign(openid, WxPayConfig.APPID(city), city); exterData exdata = null; var dc = new Tb_Wx_Mobilecode(this.DataSource); var obilecode = dc.FindFirst <Tb_Wx_Mobilecode>(string.Format("lower(FLD_Code)='{0}' and fld_mobile='{1}' and USED=0 order by id desc", code.ToLower(), mobile)); if (obilecode != null) { obilecode.Used = 1; obilecode.DataDriver = this.DataSource; obilecode.Store(); if (obilecode.FldExpiredTime.CompareTo(DateTime.Now) < 0) { result = false; msg = "验证码过期!"; } else { exdata = bus.Sign(openid, nickname, Request.UserHostAddress, city); user.DataDriver = this.DataSource; user.FldMobile = mobile; user.Store(); wxuser.DataDriver = this.DataSource; wxuser.Mobile = mobile; wxuser.Store(); result = true; } } else { msg = "无效验证码!"; } if (!string.IsNullOrEmpty(wxuser.Mobile) && needCheck == false) { needCheck = (wxuser.Mobile.iEqualsArr(ConfigurationManager.AppSettings["RNameCheckPhones"])) ? true : false; } return(Json(new { result = result, msg = msg, exdata = exdata, isSign = isSign, needCheck = needCheck, RNameChecked = wxuser.RNameChecked }, JsonRequestBehavior.AllowGet)); }
public WxPayData getToken(string contract_id, string city, string qrcode_hashs, int token_count = 1) { string url = "https://api.mch.weixin.qq.com/transit/gettoken"; WxPayData data = new WxPayData(); data.SetValue("appid", WxPayConfig.APPID(city)); data.SetValue("mch_id", WxPayConfig.getMCHID(city)); data.SetValue("nonce_str", WxPayApi.GenerateNonceStr()); data.SetValue("contract_id", contract_id); data.SetValue("sign_type", "HMAC-SHA256"); data.SetValue("sign", data.MakeSign_SHA256()); data.SetValue("token_count", token_count); data.SetValue("qrcode_hashs", qrcode_hashs); string xml = HttpService.Post(data.ToXml(), url, false, 10); WxPayData res = new WxPayData(); res.FromXml(xml); return(res); }
public IActionResult GetWxOpenid(string code) { WxPayConfig wxPayConfig = new WxPayConfig(); //首先构造微信请求授权url,重定向到该url中,其中redirectUrl是回调地址,必须保证该地址在公网上能访问,本例子构造的是返回到本控制器的方法。 //若是从微信授权返回进入该方法,则会带上一个参数,code就不为空,若code为空则跳转微信授权 if (string.IsNullOrEmpty(code)) { var redirectUrl = OAuth.GetAuthorizeUrl(wxPayConfig.appid, wxPayConfig.notify_url); return(Redirect(redirectUrl)); } else { //根据code和微信参数得到openid var openId = OAuth.GetOpenid(wxPayConfig.appid, wxPayConfig.appSecret, code); //业务处理 } return(View()); }
/// <summary> /// 上传图片或文件 不能大于2M /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static string Upfile(string filePath) { FileStream file = new FileStream(filePath, FileMode.Open); byte[] bb = new byte[file.Length]; file.Read(bb, 0, (int)file.Length); file.Close(); string fileName = Path.GetFileName(filePath); MsMultiPartFormData form = new MsMultiPartFormData(); string decodeName = HttpUtility.UrlDecode(Path.GetFileName(fileName));//最终服务器会按原文件名保存文件,所以需要将文件名编码下,防止中文乱码 string fileKeyName = "media"; form.AddStreamFile(fileKeyName, fileName, bb); String hashMd5 = Lib.HashHelper.ComputeMD5(filePath); WxPayData inputObj = new WxPayData(); inputObj.SetValue("mch_id", WxPayConfig.GetConfig().GetMchID()); inputObj.SetValue("media_hash", hashMd5); inputObj.SetValue("sign_type", "HMAC-SHA256"); //inputObj.SetValue("sign", inputObj.MakeSign());//签名 form.AddFormField("mch_id", WxPayConfig.GetConfig().GetMchID()); form.AddFormField("media_hash", hashMd5); form.AddFormField("sign_type", "HMAC-SHA256"); form.AddFormField("sign", inputObj.MakeSign()); //签名 string SERVICE_URL = "https://api.mch.weixin.qq.com/secapi/mch/uploadmedia"; //最终接收文件上传的服务接口 string rst = Lib.HttpService.Post(inputObj.ToXml(), SERVICE_URL, form, true, 10); inputObj = new WxPayData(); inputObj.FromXml(rst); if (inputObj.GetValue("return_code").ToString() == "SUCCESS") { return(inputObj.GetValue("media_id").ToString()); } return(inputObj.GetValue("return_msg").ToString()); }
/// <summary> /// 配置支付请求参数,根据当前商家获取 /// </summary> /// <param name="BussId"></param> public WxPayConfig GenerateConfig(string BussId) { WxPayConfig wxPayConfig = null; IDbConnection conn = new SqlConnection(ConnectionDb.GetBusinessConnection()); string query = "SELECT * FROM Tb_WeiXinPayCertificate WHERE BussId=@BussId"; Model.Model.Buss.Tb_WeiXinPayCertificate T = conn.Query <Model.Model.Buss.Tb_WeiXinPayCertificate>(query, new { BussId = BussId }).SingleOrDefault(); if (T != null) { wxPayConfig = new WxPayConfig(); wxPayConfig.APPID = T.appid.ToString(); wxPayConfig.MCHID = T.mch_id.ToString(); wxPayConfig.KEY = T.appkey.ToString(); wxPayConfig.APPSECRET = T.appsecret.ToString(); wxPayConfig.SSLCERT_PATH = T.SSLCERT_PATH; wxPayConfig.SSLCERT_PASSWORD = T.SSLCERT_PASSWORD; wxPayConfig.NOTIFY_URL = Global_Fun.AppWebSettings("WechatPayBuss_Notify_Url").ToString(); } return(wxPayConfig); }
public async Task <Tuple <bool, string> > AppPay(string body, string outTradeNo, int totalFee) { try { var appId = "XX"; var mchId = "XX"; var key = "XX"; WxPayConfig.Config(appId, mchId, key); var appPay = new AppPay(); var result = await appPay.Run(body, outTradeNo, totalFee); return(result == null ? new Tuple <bool, string>(false, "返回数据为空!") : new Tuple <bool, string>(true, AppSign(result.ToJson()))); } catch (Exception e) { return(new Tuple <bool, string>(false, e.Message)); } }
/// <summary> /// 配置支付请求参数,根据当前小区获取 /// </summary> /// <param name="Row"></param> public WxPayConfig GenerateConfig(string CommunityId) { WxPayConfig wxPayConfig = null; IDbConnection conn = new SqlConnection(PubConstant.UnifiedContionString.ToString()); string query = "SELECT * FROM Tb_WeiXinPayCertificate WHERE CommunityId=@CommunityId"; Tb_WeiXinPayCertificate T = conn.Query <Tb_WeiXinPayCertificate>(query, new { CommunityId = CommunityId }).SingleOrDefault(); if (T != null) { wxPayConfig = new WxPayConfig(); wxPayConfig.APPID = T.appid.ToString(); wxPayConfig.MCHID = T.mch_id.ToString(); wxPayConfig.KEY = T.appkey.ToString(); wxPayConfig.APPSECRET = T.appsecret.ToString(); wxPayConfig.SSLCERT_PATH = T.SSLCERT_PATH; wxPayConfig.SSLCERT_PASSWORD = T.SSLCERT_PASSWORD; wxPayConfig.NOTIFY_URL = Global_Fun.AppWebSettings("WechatPay_Notify_Url").ToString(); } return(wxPayConfig); }
public bool isSign(string openid, string appid, string city) { bool _isSign = false; var edc = new Tb_Wx_Entrustinfo(this.DataSource); var Entrustinfo = GetEntrustinfo(openid, appid, WxPayConfig.getMCHID(city)); if (Entrustinfo != null) { if (Entrustinfo.FldQuerydate.ToString("yyyy-MM-dd") == ("1753-01-01")) { //一天调一次 string outxml = string.Empty; _isSign = this.QueryContract(city, Entrustinfo.FldContractId, out outxml); if (_isSign) { Entrustinfo.DataDriver = this.DataSource; Entrustinfo.FldQuerydate = DateTime.Now; Entrustinfo.FldChangeType = 1; Entrustinfo.Store(); } else { if (Entrustinfo.FldChangeType == 1) { Entrustinfo.DataDriver = this.DataSource; Entrustinfo.FldChangeType = 0; Entrustinfo.Store(); } } } else { if (Entrustinfo.FldChangeType == 1 && DateTime.Compare(Entrustinfo.FldContractExpiredTime, DateTime.Now) > 0) { _isSign = true; } } } return(_isSign); }
/*** * 申请退款完整业务流程逻辑 * @param transaction_id 微信订单号(优先使用) * @param out_trade_no 商户订单号 * @param total_fee 订单总金额 * @param refund_fee 退款金额 * @return 退款结果(xml格式) */ public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee, string AdminHotelid, int hotelid) { WxPayData data = new WxPayData(); if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准 { data.SetValue("transaction_id", transaction_id); } else//微信订单号不存在,才根据商户订单号去退款 { data.SetValue("out_trade_no", out_trade_no); } data.SetValue("total_fee", int.Parse(total_fee)); //订单总金额 data.SetValue("refund_fee", int.Parse(refund_fee)); //退款金额 data.SetValue("out_refund_no", WxPayApi.GenerateOutTradeNo(AdminHotelid, hotelid)); //随机生成商户退款单号 data.SetValue("op_user_id", WxPayConfig.MCHID(AdminHotelid, hotelid)); //操作员,默认为商户号 WxPayData result = WxPayApi.Refund(data, AdminHotelid, hotelid); //提交退款申请给API,接收返回数据 //Log.Info("Refund", "Refund process complete, result : " + result.ToXml()); return(result.ToXml()); }
/// <summary> /// 配置支付请求参数,根据当前小区获取 /// </summary> /// <param name="Row"></param> public WxPayConfig GenerateConfig(string CommunityId) { WxPayConfig wxPayConfig = null; string strcon = PubConstant.GetConnectionString("APPConnection"); IDbConnection conn = new SqlConnection(strcon); string query = "SELECT * FROM Tb_WeiXinPayCertificate WHERE CommunityId=@CommunityId"; Tb_WeiXinPayCertificate T = conn.Query <Tb_WeiXinPayCertificate>(query, new { CommunityId = CommunityId }).SingleOrDefault(); if (T != null) { wxPayConfig = new WxPayConfig(); wxPayConfig.APPID = T.appid.ToString(); wxPayConfig.MCHID = T.mch_id.ToString(); wxPayConfig.KEY = T.appkey.ToString(); wxPayConfig.APPSECRET = T.appsecret.ToString(); wxPayConfig.SSLCERT_PATH = T.SSLCERT_PATH; wxPayConfig.SSLCERT_PASSWORD = T.SSLCERT_PASSWORD; wxPayConfig.NOTIFY_URL = PubConstant.GetConnectionString("WeiXinPayBackURL"); } return(wxPayConfig); }
public JsonResult GetPaySign(string openid) { string nonceStr = WxPayApi.GenerateNonceStr(); //随机字符串,不长于32位 string outTradeNo = WxPayApi.GenerateOutTradeNo(); //订单号:32个字符内、不得重复 string spbillCreateIp = WxPayConfig.GetIP(System.Web.HttpContext.Current); //用户端IP int total_fee = 1; //订单金额(单位:分),整数 string trade_type = "JSAPI"; //JSAPI,NATIVE,APP,WAP #region 调用统一支付接口获得prepay_id(预支付交易会话标识) WxPayData wxPayData = new WxPayData(); wxPayData.SetValue("appid", WxPayConfig.APPID); //appid wxPayData.SetValue("body", WxPayConfig.BODY); //支付描述 wxPayData.SetValue("mch_id", WxPayConfig.MCHID); //商户id wxPayData.SetValue("nonce_str", nonceStr); //随机字符串 wxPayData.SetValue("notify_url", WxPayConfig.NOTIFY_URL); //回调地址 wxPayData.SetValue("openid", openid); //openid wxPayData.SetValue("out_trade_no", outTradeNo); //订单号 wxPayData.SetValue("spbill_create_ip", spbillCreateIp); //客户端ip地址 wxPayData.SetValue("total_fee", total_fee.ToString()); //订单金额(单位:分),整数 wxPayData.SetValue("trade_type", trade_type); //交易类型 wxPayData.SetValue("sign", wxPayData.MakeSign()); //签名 string data = wxPayData.ToXml(); string prepayId = WeChatTools.UnifiedOrder(data); #endregion #region 支付参数 string timeStamp = WxPayApi.GenerateTimeStamp(); nonceStr = WxPayApi.GenerateNonceStr(); WxPayData wxPaySign = new WxPayData(); wxPaySign.SetValue("appId", WxPayConfig.APPID); wxPaySign.SetValue("timeStamp", timeStamp); wxPaySign.SetValue("nonceStr", nonceStr); wxPaySign.SetValue("package", string.Format("prepay_id={0}", prepayId)); wxPaySign.SetValue("signType", "MD5"); string paysign = wxPaySign.MakeSign(); wxPaySign.SetValue("paySign", paysign); #endregion return(Json(new { data = wxPaySign.GetValues(), openid = openid }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 获取小程序openId /// </summary> /// <param name="code"></param> /// <returns></returns> public AuthCode2Session authCode2Session(string code) { try { #region 获取小程序授权信息 WxPayData data = new WxPayData(); data.SetValue("appid", WxPayConfig.GetConfig().GetAppIDmini()); data.SetValue("secret", WxPayConfig.GetConfig().GetAppSecretmini()); data.SetValue("code", code); data.SetValue("grant_type", "authorization_code"); string url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl(); AuthCode2Session auth = wxPageApi.authCode2Session(data.GetValue("appid").ToString(), data.GetValue("secret").ToString(), data.GetValue("code").ToString(), data.GetValue("grant_type").ToString()); #endregion return(auth); } catch (Exception ex) { Log.Error(this.GetType().ToString(), ex.ToString()); throw new WxPayException(ex.ToString()); } }
protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["code"] != null) { string state = ""; string AdminHotelid = "1"; int Hotelid = 0; if (Request["state"] != null) { state = Server.UrlDecode(Request["state"]); string[] urlid = state.Split('?'); //dh.sewa-power.com/Reservation/HotelDetails.aspx?AdminHotelid=SEWA006637&hotelid=36 string[] a = urlid[1].Split('&'); //AdminHotelid=SEWA006637&hotelid=36 string[] b = a[0].Split('='); //AdminHotelid=SEWA006637 string[] c = a[1].Split('='); //hotelid=36 AdminHotelid = b[1]; Hotelid = Convert.ToInt32(c[1]); } string code = Request["code"].ToString(); string postUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code"; postUrl = string.Format(postUrl, WxPayConfig.APPID(AdminHotelid, Hotelid), WxPayConfig.APPSECRET(AdminHotelid, Hotelid), code); string returnJason = GetJson(postUrl); //获取返回信息 JavaScriptSerializer serializer = new JavaScriptSerializer(); Dictionary <string, object> json = (Dictionary <string, object>)serializer.DeserializeObject(returnJason); object value; string openid = ""; if (json.TryGetValue("openid", out value)) { openid = value.ToString(); Session["zfzdyopenid" + AdminHotelid + Hotelid] = openid.ToString(); Session.Timeout = 60 * 60 * 24; } Log.Info("获取支付到店zfzdyopenid:" + openid + ",URL:", state); Response.Redirect(state, false); } }
/// <summary> /// 整个验证的核心 /// </summary> /// <param name="model"></param> //可以给WeChatRequestModel 加东西,比如我加了Code。 //登录的时候我就可以从微信拿到Code public async Task <GetUser> Valid(WeChatRequestModel model) { //获取请求来的 echostr 参数 string echoStr = model.echostr; //通过验证,出于安全考虑。(也可以跳过) if (CheckSignature(model)) { if (!string.IsNullOrEmpty(echoStr)) { //将随机生成的 echostr 参数 原样输出 await Response.WriteAsync(echoStr); //截止输出流 //Response.end(); } } //解析连接的类 WxPayConfig wxPayConfig = new WxPayConfig(); //通过code换取网页授权access_token string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + wxPayConfig.appid + "&secret=" + wxPayConfig.appSecret + "&code=" + model.code + "&grant_type=authorization_code"; HttpClient httpClient = new HttpClient(); var getParameter = await httpClient.GetStringAsync(url); //getHttp.GetJson(url); //把结果字符串反序列化成List对象。 var parameter = JsonConvert.DeserializeObject <GetToken>(getParameter); //拉取用户信息 //如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。 string Userurl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + parameter.access_token + "&openid=" + parameter.openid + "&lang=zh_CN"; //获得连接字符串的数据 var getUser = await httpClient.GetStringAsync(Userurl); //把结果字符串反序列化成List对象。1 var User = JsonConvert.DeserializeObject <GetUser>(getUser); return(User); }
/// <summary> /// 微信支付异步回调 /// </summary> /// <returns></returns> public string WxNotify() { try { //使用微信工具获取ResponseHandler ResponseHandler wxResponseHandler = new ResponseHandler(HttpContext); string out_trade_no = wxResponseHandler.GetParameter("1010"); //订单号 string total_fee = wxResponseHandler.GetParameter("total_fee"); //订单金额,单位分 total_fee = (Convert.ToDecimal(total_fee) / 100).ToString("9.00"); //订单金额,单位元 Console.WriteLine("微信测试收到数据,订单号:" + out_trade_no + "订单金额:" + total_fee, "【微信支付回调】"); //验证订单是否有支付过逻辑 //验证订单信息,获取支付配置 WxPayConfig payConfigModel = new WxPayConfig();//后面去可以去配置或者数据库中获取<br> //验证是否通过微信安全认证 WxPayService wxPayService = new WxPayService(); //还没开始写 bool vxCheck = wxPayService.WxPayCheck(wxResponseHandler);//使用sdk去验证 if (vxCheck) { //更新订单 //ProcessOrder(out_trade_no); Log.Info("微信验证成功" + out_trade_no, "【微信支付回调】"); return("成功"); } else { Log.Info("微信测试失败" + out_trade_no, "【微信支付回调】"); return("微信测试失败"); } } catch (Exception ex) { Log.Error("微信测试回调异常", ex, "【微信支付回调】"); return("微信测试回调异常"); } }
/** * * 通过code换取网页授权access_token和openid的返回数据,正确时返回的JSON数据包如下: * { * "access_token":"ACCESS_TOKEN", * "expires_in":7200, * "refresh_token":"REFRESH_TOKEN", * "openid":"OPENID", * "scope":"SCOPE", * "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" * } * 其中access_token可用于获取共享收货地址 * openid是微信支付jsapi支付接口统一下单时必须的参数 * 更详细的说明请参考网页授权获取用户基本信息:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html * @失败时抛异常WxPayException */ public UserInfo GetOpenidAndAccessTokenFromCode(string code) { try { #region 构造获取openid及access_token的url WxPayData data = new WxPayData(); data.SetValue("appid", WxPayConfig.GetConfig().GetAppID()); data.SetValue("secret", WxPayConfig.GetConfig().GetAppSecret()); data.SetValue("code", code); data.SetValue("grant_type", "authorization_code"); string url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl(); //请求url以获取数据 string result = HttpService.Get(url); Log.Debug(this.GetType().ToString(), "GetOpenidAndAccessTokenFromCode response : " + result); //保存access_token,用于收货地址获取 JsonData jd = JsonMapper.ToObject(result); #endregion string access_token = (string)jd["access_token"]; string openid = (string)jd["openid"]; #region 记录用户授权授,模式必须为snsapi_userinfo,保存用户基本信息 UserInfo info = wxPageApi.GetUserInfo(access_token, openid, WxPayConfig.GetConfig().GetLang()); info.accesstoken = access_token; Log.UserAuthorizeInfo("GetUserInfo", "UserInfo : " + Newtonsoft.Json.JsonConvert.SerializeObject(info)); //记录用户授权后的用户信息 Log.UserAuthorizeInfo("GetUserInfo", "oauthrizeInfo : " + result); //记录用户授权后的用户信息 Log.UserAuthorizeInfo("GetUserInfo", "end~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : " + result); //记录用户授权后的用户信息 #endregion return(info); } catch (Exception ex) { Log.Error(this.GetType().ToString(), ex.ToString()); throw new WxPayException(ex.ToString()); } }
public WxPayConfig GenerateConfigModelWByClientId(string clientId) { var conditions = new List <Condition>(); WxPayConfig payConfig = new WxPayConfig(); if (string.IsNullOrEmpty(clientId)) { return(payConfig); } conditions.Add(new Condition { LeftBrace = " AND ", ParamName = "ClientId", DbColumnName = "client_id", ParamValue = clientId, Operation = ConditionOperate.Equal, RightBrace = "", Logic = "" }); List <ConfigModel> lstConfig = GenerateDal.LoadByConditions <ConfigModel>(CommonSqlKey.GetPayConfigByClientId, conditions); if (lstConfig.Count > 0) { ConfigModel cModel = lstConfig[0]; payConfig.APPID = cModel.WxAppId; payConfig.MCHID = cModel.WxMchId; payConfig.KEY = cModel.WxKey; payConfig.APPSECRET = cModel.WxAppSecret; payConfig.SSLCERT_PATH = cModel.WxSslcertPath; payConfig.SSLCERT_PASSWORD = cModel.WxSslcertPassword; } return(payConfig); }
/// <summary> /// 实名认证 回调 /// </summary> /// <returns></returns> public ViewResult Paycallback() { var notify = new Notify(this.Request); var res = notify.GetNotifyData(); string return_code = res.GetValue("return_code").ToString(); string result_code = res.GetValue("result_code").ToString(); WxPayData wres = new WxPayData(); if (return_code.iEquals("success") && return_code.iEquals("success")) { var openid = res.GetValue("openid").ToString(); var bus = new Bus(this.DataSource); var userinfo = bus.GetUserInfo(openid, WxPayConfig.APPID("")); if (userinfo != null) { userinfo.RNameChecked = 1; userinfo.DataDriver = this.DataSource; userinfo.Store(); } } wres.SetValue("return_code", "SUCCESS"); wres.SetValue("return_msg", "回调成功"); return(View("callback", wres)); }
public string SearchBankOrder(string CommunityId, string out_trade_no) { string Result = ""; WxPayConfig wxPayConfig = GenerateConfig(CommunityId); string strcon = PubConstant.GetConnectionString("APPConnection"); IDbConnection conn = new SqlConnection(strcon); string query = "SELECT * FROM Tb_OL_WeiXinPayOrder WHERE out_trade_no=@out_trade_no"; Tb_OL_WeiXinPayOrder T_Order = conn.Query <Tb_OL_WeiXinPayOrder>(query, new { out_trade_no = out_trade_no }).SingleOrDefault(); if (T_Order == null) { Result = "未找到该物业订单"; return(Result); } WxPayData data = new WxPayData(); data.SetValue("out_trade_no", out_trade_no); WxPayData BankResult = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据 Result = BankResult.GetValue("trade_state").ToString(); return(Result); }
/// <summary> /// 查询签约关系 /// </summary> /// <param name="contract_id"></param> /// <returns></returns> public bool QueryContract(string city, string contract_id, out string outxml) { WxPayData inputObj = new WxPayData(city); inputObj.SetValue("appid", WxPayConfig.APPID(city)); inputObj.SetValue("mch_id", WxPayConfig.getMCHID(city)); inputObj.SetValue("contract_id", contract_id); inputObj.SetValue("version", "1.0"); inputObj.SetValue("sign", inputObj.MakeSign()); string url = "https://api.mch.weixin.qq.com/papay/querycontract"; string xml = inputObj.ToXml(); string result = HttpService.Post(xml, url, false, 10); WxPayData data = new WxPayData(); data.FromXml(result); outxml = result; bool isSign = false; if (data.IsSet("contract_state") && data.GetValue("contract_state").ToString() == "0") { isSign = true; } return(isSign); }
/// <summary> /// 获取审核结果 /// </summary> /// <param name="business_code"></param> /// <returns></returns> public static string Getstate(string business_code) { WxPayData inputObj = new WxPayData(); inputObj.SetValue("version", "1.0"); //接口版本号 inputObj.SetValue("mch_id", WxPayConfig.GetConfig().GetMchID()); //商户号 inputObj.SetValue("nonce_str", WxPayApi.GenerateNonceStr()); //随机字符串 inputObj.SetValue("business_code", business_code); // inputObj.SetValue("sign_type", WxPayData.SIGN_TYPE_HMAC_SHA256); //签名类型 inputObj.SetValue("sign", inputObj.MakeSign()); //签名 string xml = inputObj.ToXml(); string url = "https://api.mch.weixin.qq.com/applyment/micro/getstate"; int timeOut = 10; Log.Debug("申请入驻", "request : " + xml); string response = HttpService.Post(xml, url, true, timeOut);//调用HTTP通信接口以提交数据到API Log.Debug("申请入驻", "response : " + response); return(response); }
public JsonResult EncryptedBindPhone(string code, string iv, string data, string nickname, string city) { var bus = new Bus(this.DataSource); var pay = new JsApiPay(this.Request); pay.GetOpenidAndSession(code, city); Phone phone = new Phone(); bool state = false; exterData exdata = null; var wxuser = bus.GetUserInfo(pay.openid, WxPayConfig.APPID(city)); var isSign = bus.isSign(pay.openid, WxPayConfig.APPID(city), city); if (!string.IsNullOrEmpty(pay.session_key)) { string result = bus.AESDecrypt(iv, pay.session_key, data); phone = Bus.JsonDeserialize <Phone>(result); state = true; wxuser.Mobile = phone.phoneNumber; wxuser.DataDriver = this.DataSource; wxuser.Store(); exdata = bus.Sign(pay.openid, nickname, Request.UserHostAddress, city); } return(Json(new { exdata = exdata, isSign = isSign, state = state, phone = phone }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 发起统一支付(Demo) /// </summary> /// <param name="wxPayConfig"></param> /// <param name="out_trade_no">商户订单号</param> /// <param name="body">标题</param> /// <param name="total_fee">金额(分)</param> /// <param name="openid">wx openid</param> /// <returns></returns> public static WxPayData JSAPIOrder(WxPayConfig wxPayConfig, string out_trade_no, string body, int total_fee, string openid) { WxPayData data = new WxPayData(); data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss")); data.SetValue("time_expire", DateTime.Now.AddMinutes(30).ToString("yyyyMMddHHmmss")); data.SetValue("device_info", "WEB"); data.SetValue("body", body); data.SetValue("out_trade_no", out_trade_no); data.SetValue("total_fee", total_fee); data.SetValue("trade_type", "JSAPI"); data.SetValue("openid", openid); WxPayData result = WxPayApi.UnifiedOrder(wxPayConfig, data); if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "") { Log.Error("WeiXinMPPayHelper.UnifiedOrder", "UnifiedOrder response error!"); throw new WxPayException("UnifiedOrder response error!" + result.ToJson()); } return(result); }