/** * * 获取收货地址js函数入口参数,详情请参考收货地址共享接口:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_9 * @return string 共享收货地址js函数需要的参数,json格式可以直接做参数使用 */ public string GetEditAddressParameters() { 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); 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); 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> /// 从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数 /// </summary> /// <remarks> /// 微信浏览器调起JSAPI时的输入参数格式如下: /// { /// "appId" : "wx2421b1c4370ec43b", //公众号名称,由商户传入 /// "timeStamp":" 1395712654", //时间戳,自1970年以来的秒数 /// "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串 /// "package" : "prepay_id=u802345jgfjsdfgsdg888", /// "signType" : "MD5", //微信签名方式: /// "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 /// } /// 更详细的说明请参考网页端调起支付API:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7 /// </remarks> /// <returns>微信浏览器调起JSAPI时的输入参数,json格式可以直接做参数用</returns> public string GetJsApiParameters() { Log.Debug(this.GetType().ToString(), "JsApiPay::GetJsApiParam is processing..."); WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appId", UnifiedOrderResult.GetValue("appid")); jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp()); jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr()); jsApiParam.SetValue("package", "prepay_id=" + UnifiedOrderResult.GetValue("prepay_id")); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign()); string parameters = jsApiParam.ToJson(); Log.Debug(this.GetType().ToString(), "Get jsApiParam : " + parameters); return(parameters); }
/** * * 从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数, * 微信浏览器调起JSAPI时的输入参数格式如下: * { * "appId" : "wx2421b1c4370ec43b", //公众号名称,由商户传入 * "timeStamp":" 1395712654", //时间戳,自1970年以来的秒数 * "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串 * "package" : "prepay_id=u802345jgfjsdfgsdg888", * "signType" : "MD5", //微信签名方式: * "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 * } * @return string 微信浏览器调起JSAPI时的输入参数,json格式可以直接做参数用 * 更详细的说明请参考网页端调起支付API:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7 * */ public string GetJsApiParameters() { log.Info("GetJsApiParameters------>JsApiPay::GetJsApiParam is processing..."); WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appId", unifiedOrderResult.GetValue("appid")); jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp()); jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr()); jsApiParam.SetValue("package", "prepay_id=" + unifiedOrderResult.GetValue("prepay_id")); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign()); string parameters = jsApiParam.ToJson(); return(parameters); }
/** * * 从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数, * 微信浏览器调起JSAPI时的输入参数格式如下: * { * "appId" : "wx2421b1c4370ec43b", //公众号名称,由商户传入 * "timeStamp":" 1395712654", //时间戳,自1970年以来的秒数 * "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串 * "package" : "prepay_id=u802345jgfjsdfgsdg888", * "signType" : "MD5", //微信签名方式: * "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 * } * @return string 微信浏览器调起JSAPI时的输入参数,json格式可以直接做参数用 * 更详细的说明请参考网页端调起支付API:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7 * */ private static string GetJsOrder(WxPayData data) { try { WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appId", data.GetValue("appid")); jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp()); jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr()); jsApiParam.SetValue("package", "prepay_id=" + data.GetValue("prepay_id")); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign()); return(jsApiParam.ToJson()); } catch (Exception) { } return(null); }
/*** * 订单查询完整业务流程逻辑 * @param transaction_id 微信订单号(优先使用) * @param out_trade_no 商户订单号 * @return 订单查询结果(xml格式) */ public static string Run(string transaction_id, string out_trade_no) { Log.Info("OrderQuery", "OrderQuery is processing..."); WxPayData data = new WxPayData(); if (!string.IsNullOrEmpty(transaction_id))//如果微信订单号存在,则以微信订单号为准 { data.SetValue("transaction_id", transaction_id); } else//微信订单号不存在,才根据商户订单号去查单 { data.SetValue("out_trade_no", out_trade_no); } WxPayData result = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据 Log.Info("OrderQuery", "OrderQuery process complete, result : " + result.ToXml()); return(result.ToJson()); }
/// <summary> /// 接收从微信支付后台发送过来的数据并验证签名 /// </summary> /// <returns>微信支付后台返回的数据</returns> public Tuple <bool, WxPayData> GetNotifyData() { //接收从微信后台POST过来的数据 System.IO.Stream s = context.Request.Body; int count = 0; byte[] buffer = new byte[1024]; StringBuilder builder = new StringBuilder(); while ((count = s.Read(buffer, 0, 1024)) > 0) { builder.Append(Encoding.UTF8.GetString(buffer, 0, count)); } s.Flush(); s.Close(); s.Dispose(); Log.Info(this.GetType().ToString(), "Receive data from WeChat : " + builder.ToString()); //转换数据格式并验证签名 WxPayData data = new WxPayData(); try { data.FromXml(builder.ToString()); } catch (WxPayException ex) { //若签名错误,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", ex.Message); Log.Error(this.GetType().ToString(), "Sign check error : " + res.ToXml()); //page.Response.Write(res.ToXml()); //page.Response.End(); return(Tuple.Create(false, res)); } Log.Info(this.GetType().ToString(), "Check sign success"); Log.Info(this.GetType().ToString(), "转换格式后 : " + data.ToJson()); return(Tuple.Create(true, data)); }
public override string ProcessNotify() { WxPayData notifyData = GetNotifyData(); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml()); return(res.ToJson()); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml()); return(res.ToJson()); } //查询订单成功 else { WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml()); return(res.ToJson()); } }
/** * * 获取收货地址js函数入口参数,详情请参考收货地址共享接口:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_9 * @return string 共享收货地址js函数需要的参数,json格式可以直接做参数使用 */ public string GetEditAddressParameters() { 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); 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); 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; }
/** * * 从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数, * 微信浏览器调起JSAPI时的输入参数格式如下: * { * "appId" : "wx2421b1c4370ec43b", //公众号名称,由商户传入 * "timeStamp":" 1395712654", //时间戳,自1970年以来的秒数 * "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串 * "package" : "prepay_id=u802345jgfjsdfgsdg888", * "signType" : "MD5", //微信签名方式: * "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 * } * @return string 微信浏览器调起JSAPI时的输入参数,json格式可以直接做参数用 * 更详细的说明请参考网页端调起支付API:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7 * */ public string GetJsApiParameters() { Log.Debug(this.GetType().ToString(), "JsApiPay::GetJsApiParam is processing..."); WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appId", unifiedOrderResult.GetValue("appid")); jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp()); jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr()); jsApiParam.SetValue("package", "prepay_id=" + unifiedOrderResult.GetValue("prepay_id")); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign()); string parameters = jsApiParam.ToJson(); Log.Debug(this.GetType().ToString(), "Get jsApiParam : " + parameters); return parameters; }
/// <summary> /// 微信支付专用逻辑 /// </summary> /// <returns></returns> public ActionResult WxPay() { string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; ViewBag.OrderNo = Request.QueryString["orderNo"].ToString(); ViewBag.TotalPrice = double.Parse(Request.QueryString["totalprice"].ToString()); OrderResultModel orm = new OrderResultModel(); orm.openid = System.Web.HttpContext.Current.Session["member"].ToString(); orm.total_fee = double.Parse(Request.QueryString["totalprice"].ToString()) * 100; orm.trade_type = "JSAPI"; orm.spbill_create_ip = Request.QueryString["ip"].ToString(); orm.out_trade_no = Request.QueryString["orderNo"].ToString(); orm.appid = WxPayAPI.WxPayConfig.APPID; orm.body = "捷诚宝商城"; orm.mch_id = WxPayAPI.WxPayConfig.MCHID; orm.nonce_str = WxPayAPI.WxPayApi.GenerateNonceStr(); orm.notify_url = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Host + ":" + HttpContext.Request.Url.Port + "/Pay/WxPayResult"; WxPayAPI.WxPayData data = new WxPayAPI.WxPayData(); data.SetValue("openid", orm.openid); data.SetValue("total_fee", orm.total_fee); data.SetValue("trade_type", orm.trade_type); data.SetValue("spbill_create_ip", orm.spbill_create_ip); data.SetValue("out_trade_no", orm.out_trade_no); data.SetValue("appid", orm.appid); data.SetValue("body", orm.body); data.SetValue("mch_id", orm.mch_id); data.SetValue("nonce_str", orm.nonce_str); data.SetValue("notify_url", orm.notify_url); orm.sign = data.MakeSign(); data.SetValue("sign", orm.sign); foreach (var item in data.GetValues()) { LogHelper.Log.Write(item.Key + ":" + item.Value); } string xml = data.ToXml(); string response = WxPayAPI.HttpService.Post(xml, url, false, 5); WxPayAPI.WxPayData result = new WxPayAPI.WxPayData(); result.FromXml(response); WxPayAPI.WxPayData jsApiParam = new WxPayAPI.WxPayData(); jsApiParam.SetValue("appId", result.GetValue("appid")); jsApiParam.SetValue("timeStamp", WxPayAPI.WxPayApi.GenerateTimeStamp()); jsApiParam.SetValue("nonceStr", WxPayAPI.WxPayApi.GenerateNonceStr()); jsApiParam.SetValue("package", "prepay_id=" + result.GetValue("prepay_id")); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign()); string jsonParam = jsApiParam.ToJson(); ViewData["Result"] = result; ViewData["JsonResult"] = jsonParam; return(View()); }
public ActionResult RechargePay(double money, string ip) { string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; string orderNo = Guid.NewGuid().ToString().Replace("-", "").ToUpper().Substring(0, 6) + TimeManager.GetCurrentTimestamp(); ViewBag.OrderNo = orderNo; ViewBag.TotalPrice = money; OrderResultModel orm = new OrderResultModel(); orm.openid = System.Web.HttpContext.Current.Session["member"].ToString(); orm.total_fee = money * 100; orm.trade_type = "JSAPI"; orm.spbill_create_ip = ip; orm.out_trade_no = orderNo; orm.appid = WxPayAPI.WxPayConfig.APPID; orm.body = "捷诚宝个人中心充值"; orm.mch_id = WxPayAPI.WxPayConfig.MCHID; orm.nonce_str = WxPayAPI.WxPayApi.GenerateNonceStr(); orm.notify_url = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Host + ":" + HttpContext.Request.Url.Port + "/Pay/RechargePayResult"; LogHelper.Log.Write(orm.notify_url); WxPayAPI.WxPayData data = new WxPayAPI.WxPayData(); data.SetValue("openid", orm.openid); data.SetValue("total_fee", orm.total_fee); data.SetValue("trade_type", orm.trade_type); data.SetValue("spbill_create_ip", orm.spbill_create_ip); data.SetValue("out_trade_no", orm.out_trade_no); data.SetValue("appid", orm.appid); data.SetValue("body", orm.body); data.SetValue("mch_id", orm.mch_id); data.SetValue("nonce_str", orm.nonce_str); data.SetValue("notify_url", orm.notify_url); orm.sign = data.MakeSign(); data.SetValue("sign", orm.sign); //LogHelper.Log.Write("openid:" + data.GetValue("openid")); //LogHelper.Log.Write("total_fee:" + data.GetValue("total_fee")); //LogHelper.Log.Write("appid:" + data.GetValue("appid")); //LogHelper.Log.Write("notify_url:" + data.GetValue("notify_url")); string xml = data.ToXml(); string response = WxPayAPI.HttpService.Post(xml, url, false, 5); WxPayAPI.WxPayData result = new WxPayAPI.WxPayData(); result.FromXml(response); WxPayAPI.WxPayData jsApiParam = new WxPayAPI.WxPayData(); jsApiParam.SetValue("appId", result.GetValue("appid")); jsApiParam.SetValue("timeStamp", WxPayAPI.WxPayApi.GenerateTimeStamp()); jsApiParam.SetValue("nonceStr", WxPayAPI.WxPayApi.GenerateNonceStr()); jsApiParam.SetValue("package", "prepay_id=" + result.GetValue("prepay_id")); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign()); string jsonParam = jsApiParam.ToJson(); ViewData["Result"] = result; ViewData["JsonResult"] = jsonParam; return(View()); }