/// <summary> /// 退款申请接口 /// </summary> /// <returns></returns> public ActionResult Refund() { string nonceStr = TenPayUtil.GetNoncestr(); RequestHandler packageReqHandler = new RequestHandler(null); //设置package订单参数 packageReqHandler.SetParameter("appid", TenPayV3Info.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId); //商户号 packageReqHandler.SetParameter("out_trade_no", ""); //填入商家订单号 packageReqHandler.SetParameter("out_refund_no", ""); //填入退款订单号 packageReqHandler.SetParameter("total_fee", "1"); //总金额 packageReqHandler.SetParameter("refund_fee", "1"); //退款金额 packageReqHandler.SetParameter("op_user_id", TenPayV3Info.MchId); //操作员Id,默认就是商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Refund(data); var res = XDocument.Parse(result); string openid = res.Element("xml").Element("out_refund_no").Value; return(Content(openid)); }
/// <summary> /// 获取微信支付必要的参数 /// </summary> /// <param name="prepayId">微信预支付订单号</param> /// <param name="timeStamp">时间戳</param> /// <param name="nonceStr">随机数</param> /// <returns></returns> public TenPayV3_JsApi TenPayV3Info(string prepayId, string timeStamp = null, string nonceStr = null) { string paySign = ""; nonceStr = string.IsNullOrEmpty(nonceStr) ? TenPayUtil.GetNoncestr() : nonceStr; timeStamp = string.IsNullOrEmpty(timeStamp) ? TenPayUtil.GetTimestamp() : timeStamp; //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appId", AppId); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId)); paySignReqHandler.SetParameter("signType", "MD5"); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySign = paySignReqHandler.CreateMd5Sign("key", Key); TenPayV3_JsApi tenPayV3JsApi = new TenPayV3_JsApi() { AppId = AppId, NonceStr = nonceStr, TimeStamp = timeStamp, Package = string.Format("prepay_id={0}", prepayId), PaySign = paySign }; return(tenPayV3JsApi); }
protected void Page_Load(object sender, EventArgs e) { string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } sp_billno = TenPayInfo.PartnerId + sp_billno; //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.Init(); //设置package订单参数 packageReqHandler.SetParameter("partner", TenPayInfo.PartnerId); //商户号 packageReqHandler.SetParameter("fee_type", "1"); //币种,1人民币 packageReqHandler.SetParameter("input_charset", "GBK"); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", "1"); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify); //接收财付通通知的URL packageReqHandler.SetParameter("body", "JSAPIdemo"); //商品描述 packageReqHandler.SetParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP //获取package包 packageValue = packageReqHandler.GetRequestURL(); //调起微信支付签名 timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(Context); paySignReqHandler.SetParameter("appid", appId); paySignReqHandler.SetParameter("appkey", TenPayInfo.AppKey); paySignReqHandler.SetParameter("noncestr", nonceStr); paySignReqHandler.SetParameter("timestamp", timeStamp); paySignReqHandler.SetParameter("package", packageValue); paySign = paySignReqHandler.CreateSHA1Sign(); //获取debug信息,建议把请求和debug信息写入日志,方便定位问题 //string pakcageDebuginfo = packageReqHandler.getDebugInfo(); //Response.Write("<br/>pakcageDebuginfo:" + pakcageDebuginfo + "<br/>"); //string paySignDebuginfo = paySignReqHandler.getDebugInfo(); //Response.Write("<br/>paySignDebuginfo:" + paySignDebuginfo + "<br/>"); }
/// <summary> /// 目前支持向指定微信用户的openid发放指定金额红包 /// 注意total_amount、min_value、max_value值相同 /// total_num=1固定 /// 单个红包金额介于[1.00元,200.00元]之间 /// </summary> /// <returns></returns> public ActionResult SendRedPack() { string mchbillno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28); string nonceStr = TenPayUtil.GetNoncestr(); RequestHandler packageReqHandler = new RequestHandler(null); //设置package订单参数 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("wxappid", TenPayV3Info.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId); //商户号 packageReqHandler.SetParameter("mch_billno", mchbillno); //填入商家订单号 packageReqHandler.SetParameter("nick_name", "提供方名称"); //提供方名称 packageReqHandler.SetParameter("send_name", "红包发送者名称"); //红包发送者名称 packageReqHandler.SetParameter("re_openid", "接受收红包的用户的openId"); //接受收红包的用户的openId packageReqHandler.SetParameter("total_amount", "100"); //付款金额,单位分 packageReqHandler.SetParameter("min_value", "100"); //最小红包金额,单位分 packageReqHandler.SetParameter("max_value", "100"); //最大红包金额,单位分 packageReqHandler.SetParameter("total_num", "1"); //红包发放总人数 packageReqHandler.SetParameter("wishing", "红包祝福语"); //红包祝福语 packageReqHandler.SetParameter("client_ip", Request.UserHostAddress); //调用接口的机器Ip地址 packageReqHandler.SetParameter("act_name", "活动名称"); //活动名称 packageReqHandler.SetParameter("remark", "备注信息"); //备注信息 string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key); packageReqHandler.SetParameter("sign", sign); //签名 //退款需要post的数据 string data = packageReqHandler.ParseXML(); //退款接口地址 string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; //本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中) string cert = @"F:\apiclient_cert.p12"; //私钥(在安装证书时设置) string password = ""; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); //调用证书 X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); #region 发起post请求 HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url); webrequest.ClientCertificates.Add(cer); webrequest.Method = "post"; byte[] postdatabyte = Encoding.UTF8.GetBytes(data); webrequest.ContentLength = postdatabyte.Length; Stream stream; stream = webrequest.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse(); StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()); string responseContent = streamReader.ReadToEnd(); #endregion return(Content(responseContent)); }
public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null) { string timeStamp = ""; string nonceStr = ""; string paySign = ""; string sp_billno = orderId; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(); //初始化 packageReqHandler.Init(); //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/); timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); Config config = Utility <Config> .GetConfig(WorkDirectory); //设置package订单参数 packageReqHandler.SetParameter("appid", config.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", config.MCHID); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("body", productInfo); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString()); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString()); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("notify_url", notifyUrl); //接收财付通通知的URL string strScene = "{ 'h5_info': { 'type':'Wap','wap_url': '" + _httpContextAccessor.HttpContext.Request.Scheme + "://" + _httpContextAccessor.HttpContext.Request.Host.ToString() + " ','wap_name': '" + _httpContextAccessor.HttpContext.Request.Host.ToString() + " '}"; packageReqHandler.SetParameter("trade_type", "MWEB"); //交易类型 packageReqHandler.SetParameter("scene_info", strScene); string sign = packageReqHandler.CreateMd5Sign("key", config.Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); //Core.Log.Debug("data=" + data); var result = TenPayV3.Unifiedorder(data); //Core.Log.Debug("result=" + result); var res = XDocument.Parse(result); if (res.Element("xml").Element("mweb_url") == null) { throw new Exception(res.ToString().HtmlEncode()); } string mwebUrl = res.Element("xml").Element("mweb_url").Value; mwebUrl = mwebUrl + "&redirect_url=" + _httpContextAccessor.HttpContext.Request.Scheme + "://" + _httpContextAccessor.HttpContext.Request.Host.ToString() + "/userorder"; return(mwebUrl); }
/// <summary> /// 退款申请接口 /// </summary> /// <returns></returns> public ActionResult Refund() { string nonceStr = TenPayUtil.GetNoncestr(); RequestHandler packageReqHandler = new RequestHandler(null); //设置package订单参数 packageReqHandler.SetParameter("appid", TenPayV3Info.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId); //商户号 packageReqHandler.SetParameter("out_trade_no", ""); //填入商家订单号 packageReqHandler.SetParameter("out_refund_no", ""); //填入退款订单号 packageReqHandler.SetParameter("total_fee", ""); //填入总金额 packageReqHandler.SetParameter("refund_fee", ""); //填入退款金额 packageReqHandler.SetParameter("op_user_id", TenPayV3Info.MchId); //操作员Id,默认就是商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key); packageReqHandler.SetParameter("sign", sign); //签名 //退款需要post的数据 string data = packageReqHandler.ParseXML(); //退款接口地址 string url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; //本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中) string cert = @"F:\apiclient_cert.p12"; //私钥(在安装证书时设置) string password = ""; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); //调用证书 X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); #region 发起post请求 HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url); webrequest.ClientCertificates.Add(cer); webrequest.Method = "post"; byte[] postdatabyte = Encoding.UTF8.GetBytes(data); webrequest.ContentLength = postdatabyte.Length; Stream stream; stream = webrequest.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse(); StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()); string responseContent = streamReader.ReadToEnd(); #endregion var res = XDocument.Parse(responseContent); string openid = res.Element("xml").Element("out_refund_no").Value; return(Content(openid)); }
/// <summary> /// 获取预支付订单 /// </summary> /// <param name="orderId">订单号</param> /// <param name="body">支付主体内容</param> /// <param name="spbillCreateIp">IP</param> /// <param name="openId"></param> /// <param name="price"></param> /// <param name="parentId">返回的预支付订单【2小时有效】</param> /// <param name="nonceStr"></param> /// <returns></returns> public string GetCodeUrl(string orderId, string body, string spbillCreateIp, decimal price, out string parentId, string nonceStr = null) { //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); nonceStr = string.IsNullOrEmpty(nonceStr) ? TenPayUtil.GetNoncestr() : nonceStr; //设置package订单参数 packageReqHandler.SetParameter("appid", AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", MchId); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("body", body); packageReqHandler.SetParameter("out_trade_no", orderId); //商家订单号 packageReqHandler.SetParameter("total_fee", (price * 100).ToString("0")); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", spbillCreateIp); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("notify_url", TenPayV3Notify); //接收财付通通知的URL packageReqHandler.SetParameter("trade_type", "NATIVE"); //交易类型 //packageReqHandler.SetParameter("openid", openId); //用户的openid string sign = packageReqHandler.CreateMd5Sign("key", Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Unifiedorder(data); LogUtility.DebugLogger.Info(result); var res = XDocument.Parse(result); //LogUtility.Order.Error(string.Format("预支付订单返回XML :{0}", result)); if (res.Element("xml") == null) { throw new Exception("统一订单接口出错"); } var codeUrl = res.Element("xml").Element("code_url") == null ? null : res.Element("xml").Element("code_url").Value; parentId = res.Element("xml").Element("prepay_id") == null ? null : res.Element("xml").Element("prepay_id").Value; if (string.IsNullOrEmpty(codeUrl)) { throw new Exception("统一订单接口出错,未获取到预支付订单号"); } return(codeUrl); }
public async Task <ObjectResultModule> WXJSTicket([FromBody] TencentTicletModel input) { if (!Commons.CheckSecret(input.Secret)) { this.ObjectResultModule.StatusCode = 422; this.ObjectResultModule.Message = "Wrong Secret"; this.ObjectResultModule.Object = ""; return(this.ObjectResultModule); } #region 获取微信系统参数 //SystemConfigsIn systemConfigsIn = new SystemConfigsIn(); //systemConfigsIn.AndAlso(t => !t.IsDelete && t.SystemType == "TencentWechar"); //var configs = await _systemConfigsService.SystemConfigsList(systemConfigsIn); //var tencentparam = configs.FirstOrDefault(); //TencentWeCharEntity tencentWeCharEntity = new TencentWeCharEntity(); //tencentWeCharEntity.grant_type = "authorization_code"; //tencentWeCharEntity.appid = tencentparam.AppID; //tencentWeCharEntity.secret = tencentparam.AppSecret; // SystemToken systemToken = new SystemToken(); // systemToken.TokenType = "Wechar"; var Tokens = await _systemTokenService.SystemTokenList("Wechar"); #endregion SystemTokenIn Token = new SystemTokenIn(); Token.access_token = Tokens.access_token; Token.Appid = Tokens.Appid; Token.AppSecret = Tokens.AppSecret; Token.YaeherPlatform = Tokens.YaeherPlatform; var JSTicketTokens = await _systemTokenService.JSWecharTokenList("JSWechar", Token); //var result = await tencentoken.TencentTicket("jsapi",Tokens.access_token); var nonce_str = TenPayUtil.GetNoncestr(); string timeStamp = TenPayUtil.GetTimestamp(); var requestHandler2 = new RequestHandler(null); requestHandler2.SetParameter("noncestr", nonce_str); requestHandler2.SetParameter("jsapi_ticket", JSTicketTokens.access_token); requestHandler2.SetParameter("timestamp", timeStamp); requestHandler2.SetParameter("url", input.url); ////SHA1加密签名 var sha1Sign = requestHandler2.CreateSHA1Sign(); TencentTicletResponseModel model = new TencentTicletResponseModel(); model.appId = Tokens.Appid; model.nonceStr = nonce_str; model.signature = sha1Sign; model.timestamp = timeStamp; return(new ObjectResultModule(model, 200, "success")); }
public ActionResult Native() { string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } sp_billno = TenPayInfo.PartnerId + sp_billno; RequestHandler outParams = new RequestHandler(null); outParams.Init(); string productid = sp_billno; string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); RequestHandler Params = new RequestHandler(null); Params.SetParameter("appid", TenPayInfo.AppId); Params.SetParameter("appkey", TenPayInfo.AppKey); Params.SetParameter("noncestr", nonceStr); Params.SetParameter("timestamp", timeStamp); Params.SetParameter("productid", productid); string sign = Params.CreateSHA1Sign(); Params.SetParameter("sign", sign); var parm = TenPay.NativePay(TenPayInfo.AppId, timeStamp, nonceStr, productid, sign); parm = QRCode.QRfromGoogle(parm); ViewData["parm"] = parm; return(View()); }
protected void Page_Load(object sender, EventArgs e) { string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } sp_billno = TenPayInfo.PartnerId + sp_billno; RequestHandler outParams = new RequestHandler(Context); outParams.Init(); string productid = sp_billno; string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); RequestHandler Params = new RequestHandler(Context); Params.SetParameter("appid", TenPayInfo.AppId); Params.SetParameter("appkey", TenPayInfo.AppKey); Params.SetParameter("noncestr", nonceStr); Params.SetParameter("timestamp", timeStamp); Params.SetParameter("productid", productid); string sign = Params.CreateSHA1Sign(); Params.SetParameter("sign", sign); parm = "weixin://wxpay/bizpayurl?sign=" + sign + "&appid=" + TenPayInfo.AppId + "&productid=" + productid + "&timeStamp=" + timeStamp + "&nonceStr=" + nonceStr; parm = QRfromGoogle(parm); }
/// <summary> /// 微信预支付 /// </summary> /// <param name="attach"></param> /// <param name="body"></param> /// <param name="openid"></param> /// <param name="price"></param> /// <param name="orderNum"></param> /// <returns></returns> public static WechatOrderInfo PayInfo(string attach, string body, string openid, string price, string orderNum = "1833431773763549") { RequestHandler requestHandler = new RequestHandler(HttpContext.Current); //微信分配的公众账号ID(企业号corpid即为此appId) requestHandler.SetParameter("appid", tenPayV3Info.AppId); //附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 requestHandler.SetParameter("attach", attach); //商品或支付单简要描述 requestHandler.SetParameter("body", body); //微信支付分配的商户号 requestHandler.SetParameter("mch_id", tenPayV3Info.MchId); //随机字符串,不长于32位。 requestHandler.SetParameter("nonce_str", TenPayUtil.GetNoncestr()); //接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 requestHandler.SetParameter("notify_url", tenPayV3Info.TenPayV3Notify); //trade_type=JSAPI,此参数必传,用户在商户公众号appid下的唯一标识。 requestHandler.SetParameter("openid", openid); //商户系统内部的订单号,32个字符内、可包含字母,自己生成 requestHandler.SetParameter("out_trade_no", orderNum); //APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。 requestHandler.SetParameter("spbill_create_ip", "127.0.0.1"); //订单总金额,单位为分,做过银联支付的朋友应该知道,代表金额为12位,末位分分 requestHandler.SetParameter("total_fee", price); //取值如下:JSAPI,NATIVE,APP,我们这里使用JSAPI requestHandler.SetParameter("trade_type", "JSAPI"); //设置KEY requestHandler.SetKey(tenPayV3Info.Key); requestHandler.CreateMd5Sign(); requestHandler.GetRequestURL(); requestHandler.CreateSHA1Sign(); string data = requestHandler.ParseXML(); requestHandler.GetDebugInfo(); //获取并返回预支付XML信息 return(XmlHelper.XmlDeserialize <WechatOrderInfo>(TenPayV3.Unifiedorder(data))); }
public ActionResult Index(string Id) { timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); //晓峰测试号 appID 和 Scret appid=wx0bcc58e7cb182a1f&secret=6bca2d2e1e4a0892b462590aec81716f //获取全局Access_takenJSON 有效期7200秒,开发者必须在自己的服务全局缓存access_token string Access_takenJSON = packageReqHandler.RequestGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xx&secret=xxxx"); strAccess_taken = packageReqHandler.GetJsonValue(Access_takenJSON, "access_token"); //获取jsapi_ticket,有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket string jsapi_ticketJSON = packageReqHandler.RequestGet(string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", strAccess_taken)); strjsapi_ticket = packageReqHandler.GetJsonValue(jsapi_ticketJSON, "ticket"); //设置签名参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("jsapi_ticket", strjsapi_ticket); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("url", Request.Url.AbsoluteUri); signature = paySignReqHandler.CreateSHA1Sign(); ViewBag.TimeStamp = timeStamp; ViewBag.NonceStr = nonceStr; ViewBag.Signature = signature; //ViewBag.JSTickets = strjsapi_ticket; //ViewBag.URLS = Request.Url.AbsoluteUri; Contents pic = contentsBll.GetContentsById(int.Parse(Id)); return(View(pic)); }
public ActionResult SharedAddress() { var accessToken = AccessTokenContainer.TryGetAccessToken(TenPayInfo.AppId, "49b71198b776e18521659a32a97501a6"); string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("accessToken", accessToken); paySignReqHandler.SetParameter("appid", TenPayInfo.AppId); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("url", TenPayInfo.TenPayNotify); var addrSign = paySignReqHandler.CreateSHA1Sign(); ViewData["appId"] = TenPayInfo.AppId; ViewData["addrSign"] = addrSign; ViewData["timeStamp"] = timeStamp; ViewData["nonceStr"] = nonceStr; return(View()); }
/// <summary> /// 订单查询 /// </summary> /// <returns></returns> public ActionResult OrderQuery() { string nonceStr = TenPayUtil.GetNoncestr(); RequestHandler packageReqHandler = new RequestHandler(null); //设置package订单参数 packageReqHandler.SetParameter("appid", TenPayV3Info.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId); //商户号 packageReqHandler.SetParameter("transaction_id", ""); //填入微信订单号 packageReqHandler.SetParameter("out_trade_no", ""); //填入商家订单号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); var result = TenPayV3.OrderQuery(data); var res = XDocument.Parse(result); string openid = res.Element("xml").Element("sign").Value; return(Content(openid)); }
public string GetRequestUrl_App(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null) { string timeStamp = ""; string nonceStr = ""; string paySign = ""; string sp_billno = orderId; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(); //初始化 packageReqHandler.Init(); //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/); timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); Config config = Utility <Config> .GetConfig(WorkDirectory); //设置package订单参数 packageReqHandler.SetParameter("appid", config.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", config.MCHID); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("body", productInfo); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString()); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString()); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("notify_url", notifyUrl); //接收财付通通知的URL packageReqHandler.SetParameter("trade_type", "APP"); //交易类型 packageReqHandler.SetParameter("openid", string.IsNullOrWhiteSpace(openId) ? "" : openId); //用户的openId string sign = packageReqHandler.CreateMd5Sign("key", config.Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); //Core.Log.Debug("data=" + data); var result = TenPayV3.Unifiedorder(data); //Core.Log.Debug("result=" + result); var res = XDocument.Parse(result); if (res == null) { throw new ApplicationException("调用统一支付出错:请求内容:" + data); } string returnCode = res.Element("xml").Element("return_code").Value; if (returnCode == "FAIL")//失败 { throw new ApplicationException("预支付失败:" + res.Element("xml").Element("return_msg").Value); } string resultCode = res.Element("xml").Element("result_code").Value; if (resultCode == "FAIL") { throw new ApplicationException("预支付失败:" + res.Element("xml").Element("err_code_des").Value); } string prepayId = res.Element("xml").Element("prepay_id").Value; //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(); paySignReqHandler.SetParameter("appid", config.AppId); paySignReqHandler.SetParameter("partnerid", config.MCHID); paySignReqHandler.SetParameter("prepayid", prepayId); paySignReqHandler.SetParameter("timestamp", timeStamp); paySignReqHandler.SetParameter("noncestr", nonceStr); paySignReqHandler.SetParameter("package", "Sign=WXPay"); paySign = paySignReqHandler.CreateMd5Sign("key", config.Key); paySignReqHandler.SetParameter("sign", paySign); var hashtable = paySignReqHandler.GetAllParameters(); System.Text.StringBuilder strBuilder = new System.Text.StringBuilder(); strBuilder.Append("{"); foreach (var p in hashtable.Keys) { if (p.ToString() == "timestamp") { strBuilder.Append("\"" + p + "\":" + hashtable[p] + ""); } else { strBuilder.Append("\"" + p + "\":\"" + hashtable[p] + "\""); } strBuilder.Append(","); } string resultStr = strBuilder.ToString().TrimEnd(',') + "}"; return(resultStr); }
/// <summary> /// JSAPI 支付 /// </summary> /// <returns></returns> public ActionResult JsApi() { string timeStamp = null; string nonceStr = null; string packageValue = null; string paySign = null; string sp_billno = Request.Form["order_no"]; //当前时间 yyyyMMdd string date = SystemTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = SystemTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4); } else { sp_billno = Request.Form["order_no"].ToString(); } sp_billno = TenPayInfo.PartnerId + sp_billno; //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); packageReqHandler.SetKey(TenPayInfo.Key); //设置package订单参数 packageReqHandler.SetParameter("partner", TenPayInfo.PartnerId); //商户号 packageReqHandler.SetParameter("fee_type", "1"); //币种,1人民币 packageReqHandler.SetParameter("input_charset", "GBK"); packageReqHandler.SetParameter("bank_type", "WX"); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", "1"); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify); //接收财付通通知的URL packageReqHandler.SetParameter("body", "JSAPIdemo"); //商品描述 packageReqHandler.SetParameter("spbill_create_ip", HttpContext.UserHostAddress()?.ToString()); //用户的公网ip,不是商户服务器IP //获取package包 packageValue = packageReqHandler.GetRequestURL(); //调起微信支付签名 timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appid", TenPayInfo.AppId); paySignReqHandler.SetParameter("appkey", TenPayInfo.AppKey); paySignReqHandler.SetParameter("noncestr", nonceStr); paySignReqHandler.SetParameter("timestamp", timeStamp); paySignReqHandler.SetParameter("package", packageValue); paySign = paySignReqHandler.CreateSHA1Sign(); //TODO:和JSSDK一样整合信息包 ViewData["appId"] = TenPayInfo.AppId; ViewData["timeStamp"] = timeStamp; ViewData["nonceStr"] = nonceStr; ViewData["packageValue"] = packageValue; ViewData["paySign"] = paySign; return(View()); }
/// <summary> /// 提现转账 /// </summary> /// <param name="orderId"></param> /// <param name="money"></param> /// <param name="openId"></param> /// <param name="checkName">【NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓 OPTION_CHECK:针对已实名认证的用户才校验真实姓名】</param> /// <param name="reUserName"></param> /// <param name="spbillCreateIp"></param> /// <param name="desc"></param> /// <param name="nonceStr"></param> public void WithdrawMoney(string orderId, decimal money, string openId, string checkName, string reUserName, string spbillCreateIp, string desc, string nonceStr = null) { //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); nonceStr = string.IsNullOrEmpty(nonceStr) ? TenPayUtil.GetNoncestr() : nonceStr; //设置package订单参数 packageReqHandler.SetParameter("mch_appid", AppId); //公众账号ID packageReqHandler.SetParameter("mchid", MchId); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("desc", desc); //企业付款描述信息 packageReqHandler.SetParameter("check_name", checkName); //校验用户姓名选项 packageReqHandler.SetParameter("re_user_name", reUserName); //收款用户姓名 packageReqHandler.SetParameter("partner_trade_no", orderId); //商户订单号 packageReqHandler.SetParameter("amount", (money * 100).ToString("0")); //转账金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", spbillCreateIp); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("openid", openId); //用户的openId string sign = packageReqHandler.CreateMd5Sign("key", Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); #region transfers() //发企业支付接口地址 string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中) //string cert = @"D:\apiclient_cert.p12"; //私钥(在安装证书时设置) string password = MchId; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); //调用证书 //X509Certificate2 cer = new X509Certificate2(cert, password, // X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); certStore.Open(OpenFlags.ReadOnly); X509Certificate2Collection certCollection = certStore.Certificates.Find( X509FindType.FindByThumbprint, "9595BAC7475049BA7CB06ACD6CDC792BADF40217", false); X509Certificate2 cert = null; if (certCollection.Count > 0) { cert = certCollection[0]; } #region 发起post请求 HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url); webrequest.ClientCertificates.Add(cert); webrequest.Method = "post"; byte[] postdatabyte = Encoding.UTF8.GetBytes(data); webrequest.ContentLength = postdatabyte.Length; Stream stream; stream = webrequest.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse(); StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()); string result = streamReader.ReadToEnd(); #endregion #endregion var res = XDocument.Parse(result); if (res.Element("xml") == null) { throw new Exception("转账订单接口出错"); } var returnCode = res.Element("xml").Element("return_code") == null ? null : res.Element("xml").Element("return_code").Value; var resultCode = res.Element("xml").Element("result_code") == null ? null : res.Element("xml").Element("result_code").Value; if (string.IsNullOrEmpty(returnCode)) { throw new Exception("转账订单接口出错,未获取到返回状态码"); } if (returnCode == "FAIL" || resultCode == "FAIL") { var returnMsg = res.Element("xml").Element("return_msg").ToString(); throw new Exception(returnMsg); } }
public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null) { string strResult = string.Empty; Config payConfig = Utility <Config> .GetConfig(WorkDirectory); if (string.IsNullOrEmpty(payConfig.AppId)) { throw new PluginException("未设置AppId"); } if (string.IsNullOrEmpty(payConfig.MCHID)) { throw new PluginException("未设置MCHID"); } string strNonce = TenPayUtil.GetNoncestr(); string strStartTime = DateTime.Now.ToString("yyyyMMddHHmmss"); //参数处理 RequestHandler paraHandler = new RequestHandler(); paraHandler.SetParameter("appid", payConfig.AppId); //微信分配的公众账号ID paraHandler.SetParameter("mch_id", payConfig.MCHID); //微信支付分配的商户号 paraHandler.SetParameter("device_info", string.Empty); //可不填 paraHandler.SetParameter("nonce_str", strNonce); paraHandler.SetParameter("body", productInfo); paraHandler.SetParameter("attach", string.Empty); //可不填 paraHandler.SetParameter("out_trade_no", orderId); //内部订单号,订单系统全局唯一 paraHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString()); paraHandler.SetParameter("spbill_create_ip", "222.240.184.122"); paraHandler.SetParameter("time_start", strStartTime); paraHandler.SetParameter("time_expire", string.Empty); paraHandler.SetParameter("goods_tag", string.Empty); paraHandler.SetParameter("notify_url", notifyUrl); //支付成功通知商户URL paraHandler.SetParameter("trade_type", "NATIVE"); //原生支付 paraHandler.SetParameter("openid", openId); //Native模式可不填 paraHandler.SetParameter("product_id", orderId); //Native模式必填 string sign = paraHandler.CreateMd5Sign("key", payConfig.Key); //按约定规则生成MD5,规则参考接口文档 paraHandler.SetParameter("sign", sign); string strXml = paraHandler.ParseXML(); string result = TenPayV3.Unifiedorder(strXml);//调用统一接口 XDocument xmlDocument = XDocument.Parse(result); if (xmlDocument == null) { throw new PluginException("调用统一支付接口(Native)时出错:" + strXml); } XElement e_return = xmlDocument.Element("xml").Element("return_code"); XElement e_result = xmlDocument.Element("xml").Element("return_msg"); if (e_return == null) { throw new PluginException("调用统一支付接口(Native)时,返回参数异常"); } //处理返回时先判断协议错误码,再业务,最后交易状态 if (e_return.Value == "SUCCESS") { e_result = xmlDocument.Element("xml").Element("result_code"); XElement e_errdes = xmlDocument.Element("xml").Element("err_code_des"); if (e_result.Value == "SUCCESS") { e_result = xmlDocument.Element("xml").Element("code_url"); strResult = e_result.Value; } else { throw new PluginException("调用统一支付接口(Native)时,接口返回异常:" + e_errdes.Value); } } else { throw new PluginException("调用统一支付接口(Native)时,接口返回异常:" + e_result.Value); } return(strResult); }
public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null) { string timeStamp = ""; string nonceStr = ""; string paySign = ""; string sp_billno = orderId; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(); //初始化 packageReqHandler.Init(); //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/); timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); Config config = Utility <Config> .GetConfig(WorkDirectory); //设置package订单参数 packageReqHandler.SetParameter("appid", config.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", config.MCHID); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("body", productInfo); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString()); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString()); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("notify_url", notifyUrl); //接收财付通通知的URL packageReqHandler.SetParameter("trade_type", "JSAPI"); //交易类型 packageReqHandler.SetParameter("openid", openId); //用户的openId string sign = packageReqHandler.CreateMd5Sign("key", config.Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Unifiedorder(data); var res = XDocument.Parse(result); if (res == null) { throw new ApplicationException("调用统一支付出错:请求内容:" + data); } string returnCode = res.Element("xml").Element("return_code").Value; if (returnCode == "FAIL")//失败 { throw new ApplicationException("预支付失败:" + res.Element("xml").Element("return_msg").Value); } string resultCode = res.Element("xml").Element("result_code").Value; if (resultCode == "FAIL") { throw new ApplicationException("预支付失败:" + res.Element("xml").Element("err_code_des").Value); } string prepayId = res.Element("xml").Element("prepay_id").Value; //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(); paySignReqHandler.SetParameter("appId", config.AppId); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId)); paySignReqHandler.SetParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", config.Key); string js = string.Format("WeixinJSBridge.invoke('getBrandWCPayRequest', {{" + "'appId': '{0}'," + "'timeStamp': '{1}'," + "'nonceStr': '{2}'," + "'package': '{3}'," + "'signType': 'MD5'," + "'paySign': '{4}'" + "}}, function (res) {{" + "if (res.err_msg == 'get_brand_wcpay_request:ok') {{" + "location.href='" + returnUrl + "'" + "}}else alert('支付失败!')" + "}});", config.AppId, timeStamp, nonceStr, string.Format("prepay_id={0}", prepayId), paySign); return(string.Format("javascript:{0}", js)); }
public ActionResult JsPay(string code, string state) { try { Logger.LogDebug("进来啦"); var openIdResult = OAuthApi.GetAccessToken(this.weChatOptions.AppId, this.weChatOptions.AppSecret, code); if (openIdResult.errcode != Senparc.Weixin.ReturnCode.请求成功) { throw new Exception($"微信支付申请失败,Erro:{openIdResult.errmsg}"); } Logger.LogDebug("获取AccessToken成功"); if (this.memoryCache.TryGetValue <WeChatPayRequest>(state, out WeChatPayRequest request)) { Logger.LogDebug(Newtonsoft.Json.JsonConvert.SerializeObject(request)); } else { Logger.LogDebug($"未找到对应的付款请求,state:{state}"); } var array = state.Split('|'); var bcTradeNo = array[0]; var money = decimal.Parse(array[1]); var SuccessUrl = array[2].ToString(); //成功跳转地址 var FailedUrl = array[3].ToString(); //失败跳转地址 var notifyUrl = "https://bcl.baocailang.com:8995/api/Payment/WeChatPayNotify"; //回调地址 var nonceStr = TenPayUtil.GetNoncestr(); var timeStamp = TenPayUtil.GetTimestamp(); string billBody = "商城--订单支付"; var xmlDataInfo = new TenPayV3UnifiedorderRequestData( this.weChatOptions.AppId, this.weChatOptions.MchId, billBody, request.PaymentId, (int)(request.TotalFee * 100), "192.168.2.1", notifyUrl, Senparc.Weixin.TenPay.TenPayV3Type.JSAPI, openIdResult.openid, this.weChatOptions.ApiKey, nonceStr ); Logger.LogDebug($"申请支付结果:{0}", Newtonsoft.Json.JsonConvert.SerializeObject(xmlDataInfo)); var result = TenPayV3.Unifiedorder(xmlDataInfo); Logger.LogDebug($"申请JsPay支付返回code:{result.result_code}"); Logger.LogDebug($"申请JsPay支付返回:{result.ResultXml}"); Logger.LogDebug($"申请JsPay支付返回结果:{result.return_msg}"); var package = string.Format("prepay_id={0}", result.prepay_id); Logger.LogDebug($"Package={package}"); var jsPayParam = new WeChatPayParameter { AppId = result.appid, MchId = result.mch_id, NonceStr = result.nonce_str, PaySign = TenPayV3.GetJsPaySign(this.weChatOptions.AppId, timeStamp, nonceStr, package, this.weChatOptions.ApiKey), SuccessUrl = request.SuccessUrl, FailedUrl = request.FailedUrl, Package = package, TimeStamp = timeStamp }; return(View(jsPayParam)); } catch (Exception ex) { Logger.LogDebug("启动微信支付失败--{0}", ex.Message); throw new Exception(ex.Message); } }
public ActionResult Index() { string _code = Request.QueryString["code"]; //微信授权(如需授权,可开通) //weChatOauth(_code); //this.oAuthAccessTokenResult = OAuth.GetAccessToken("AppId", "AppSecret", _code); //this.oAuthAccessTokenResult = OAuth.RefreshToken("AppId", this.oAuthAccessTokenResult.refresh_token); //this.openid = this.oAuthAccessTokenResult.openid; //this.accessToken = this.oAuthAccessTokenResult.access_token; string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); string paySign = ""; string sp_billno = Request["order_no"]; string openid = this.openid; //附加数据 string attach = sp_billno; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28); } else { sp_billno = Request["order_no"].ToString(); } //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 //packageReqHandler.Init(); //packageReqHandler.SetKey(TenPayInfo.Key); //设置package订单参数 packageReqHandler.SetParameter("appid", TenPayInfo.AppId); //公众账号ID packageReqHandler.SetParameter("body", "test"); packageReqHandler.SetParameter("mch_id", TenPayInfo.Mchid); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower()); //随机字符串 packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify); //接收财付通通知的URL packageReqHandler.SetParameter("openid", openid); //openid packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("total_fee", "1"); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("trade_type", "JSAPI"); //交易类型 //获取package包 string sign = packageReqHandler.CreateMd5Sign("key", TenPayInfo.Key); packageReqHandler.SetParameter("sign", sign); //交易类型 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Unifiedorder(data); var res = XDocument.Parse(result); string prepayId = ""; try { if (res.Element("xml").Element("return_code").Value == "SUCCESS") { prepayId = res.Element("xml").Element("prepay_id").Value; } } catch (Exception ex) { return(View()); } string package = string.Format("prepay_id={0}", prepayId); timeStamp = TenPayUtil.GetTimestamp(); //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appId", TenPayInfo.AppId); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", package); paySignReqHandler.SetParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", TenPayInfo.Key); ViewData["appId"] = TenPayInfo.AppId; ViewData["timeStamp"] = timeStamp; ViewData["nonceStr"] = nonceStr; ViewData["package"] = package; ViewData["paySign"] = paySign; return(View()); }
public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null) { string timestamp = ""; string noncestr = ""; string str3 = ""; string str4 = orderId; string str5 = DateTime.Now.ToString("yyyyMMdd"); RequestHandler handler = new RequestHandler(); handler.Init(); timestamp = TenPayUtil.GetTimestamp(); noncestr = TenPayUtil.GetNoncestr(); Config config = Utility <Config> .GetConfig(WorkDirectory); handler.SetParameter("appid", config.AppId); handler.SetParameter("mch_id", config.MCHID); handler.SetParameter("nonce_str", noncestr); handler.SetParameter("body", productInfo); handler.SetParameter("out_trade_no", str4); handler.SetParameter("total_fee", ((int)(totalFee * 100M)).ToString()); handler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString()); handler.SetParameter("notify_url", notifyUrl); handler.SetParameter("trade_type", "JSAPI"); handler.SetParameter("openid", string.IsNullOrWhiteSpace(openId) ? "" : openId); string str6 = handler.CreateMd5Sign("key", config.Key); handler.SetParameter("sign", str6); string str7 = handler.ParseXML(); // Log.Debug("data=" + str7); XDocument document = XDocument.Parse(TenPayV3.Unifiedorder(str7)); if (document == null) { throw new ApplicationException("调用统一支付出错:请求内容:" + str7); } if (document.Element("xml").Element("return_code").Value == "FAIL") { throw new ApplicationException("预支付失败:" + document.Element("xml").Element("return_msg").Value); } if (document.Element("xml").Element("result_code").Value == "FAIL") { throw new ApplicationException("预支付失败:" + document.Element("xml").Element("err_code_des").Value); } string str11 = document.Element("xml").Element("prepay_id").Value; RequestHandler handler2 = new RequestHandler(); handler2.SetParameter("appId", config.AppId); handler2.SetParameter("nonceStr", noncestr); handler2.SetParameter("timeStamp", timestamp); handler2.SetParameter("package", "prepay_id=" + str11); handler2.SetParameter("signType", "MD5"); str3 = handler2.CreateMd5Sign("key", config.Key); handler2.SetParameter("sign", str3); handler2.SetParameter("prepayId", str11); Hashtable allParameters = handler2.GetAllParameters(); StringBuilder builder = new StringBuilder(); foreach (object obj2 in allParameters.Keys) { builder.Append(obj2 + ":" + allParameters[obj2]); builder.Append(","); } char[] trimChars = new char[] { ',' }; return(builder.ToString().TrimEnd(trimChars)); }
public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null) { string timestamp = ""; string noncestr = ""; string str = ""; string str1 = orderId; DateTime.Now.ToString("yyyyMMdd"); RequestHandler requestHandler = new RequestHandler(); requestHandler.Init(); timestamp = TenPayUtil.GetTimestamp(); noncestr = TenPayUtil.GetNoncestr(); Config config = Utility <Config> .GetConfig(base.WorkDirectory); requestHandler.SetParameter("appid", config.AppId); requestHandler.SetParameter("mch_id", config.MCHID); requestHandler.SetParameter("nonce_str", noncestr); requestHandler.SetParameter("body", productInfo); requestHandler.SetParameter("out_trade_no", str1); int num = (int)(totalFee * new decimal(100)); requestHandler.SetParameter("total_fee", num.ToString()); requestHandler.SetParameter("spbill_create_ip", "222.240.184.122"); requestHandler.SetParameter("notify_url", notifyUrl); requestHandler.SetParameter("trade_type", "JSAPI"); requestHandler.SetParameter("openid", openId); string str2 = requestHandler.CreateMd5Sign("key", config.Key); requestHandler.SetParameter("sign", str2); string str3 = requestHandler.ParseXML(); XDocument xDocument = XDocument.Parse(TenPayV3.Unifiedorder(str3)); if (xDocument == null) { throw new ApplicationException(string.Concat("调用统一支付出错:请求内容:", str3)); } if (xDocument.Element("xml").Element("return_code").Value == "FAIL") { throw new ApplicationException(string.Concat("预支付失败:", xDocument.Element("xml").Element("return_msg").Value)); } if (xDocument.Element("xml").Element("result_code").Value == "FAIL") { throw new ApplicationException(string.Concat("预支付失败:", xDocument.Element("xml").Element("err_code_des").Value)); } string value = xDocument.Element("xml").Element("prepay_id").Value; RequestHandler requestHandler1 = new RequestHandler(); requestHandler1.SetParameter("appId", config.AppId); requestHandler1.SetParameter("timeStamp", timestamp); requestHandler1.SetParameter("nonceStr", noncestr); requestHandler1.SetParameter("package", string.Format("prepay_id={0}", value)); requestHandler1.SetParameter("signType", "MD5"); str = requestHandler1.CreateMd5Sign("key", config.Key); string str4 = string.Concat("WeixinJSBridge.invoke('getBrandWCPayRequest', {{'appId': '{0}','timeStamp': '{1}','nonceStr': '{2}','package': '{3}','signType': 'MD5','paySign': '{4}'}}, function (res) {{if (res.err_msg == 'brand_wcpay_request:ok') {{location.href='", returnUrl, "'}}else alert('支付失败!')}});"); object[] appId = new object[] { config.AppId, timestamp, noncestr, string.Format("prepay_id={0}", value), str }; string str5 = string.Format(str4, appId); return(string.Format("javascript:{0}", str5)); }
/// <summary> /// 最新接口调用 /// 2014-11-24 /// </summary> /// <param name="ttFee">支付金额(单位元)</param> /// <param name="busiBody">订单内容</param> /// <param name="out_trade_no">订单号</param> /// <param name="code"></param> protected void WxPayDataV3(decimal ttFee, string busiBody, string out_trade_no, string code) { BLL.wx_payment_wxpay wxPayBll = new BLL.wx_payment_wxpay(); Model.wx_payment_wxpay paymentInfo = wxPayBll.GetModelByWid(wid); BLL.wx_userweixin uwBll = new BLL.wx_userweixin(); Model.wx_userweixin uwEntity = uwBll.GetModel(wid); // logBll.AddLog(wid,"【微支付】微信预定", "paypage.aspx WxPayDataV3", "211 wid:" + wid, 1); //先设置基本信息 string MchId = paymentInfo.partnerId; // "1218574001";// string partnerKey = paymentInfo.partnerKey; // 商户支付密钥Key。登录微信商户后台,进入栏目【账户设置】【密码安全】【API 安全】【API 密钥】 string notify_url = "http://" + HttpContext.Current.Request.Url.Authority + "/api/payment/wxpay/notify_url.aspx"; logBll.AddLog(wid, "【微支付】微信预定", "paypage.aspx WxPayDataV3", "uwEntity.AppId: " + uwEntity.AppId + "| uwEntity.AppSecret;" + uwEntity.AppSecret + "|code:" + code, 1); string timeStamp = ""; string nonceStr = ""; string paySign = ""; string sp_billno = out_trade_no; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28); } //创建支付应答对象 Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null); //初始化 //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/); timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); //设置package订单参数 packageReqHandler.SetParameter("appid", uwEntity.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", MchId); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("body", busiBody); //商品描述 packageReqHandler.SetParameter("attach", wid + "|" + busiBody); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", ((int)(ttFee * 100)).ToString()); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("notify_url", notify_url); //接收财付通通知的URL packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString()); //交易类型 packageReqHandler.SetParameter("openid", openid); //用户的openId string sign = packageReqHandler.CreateMd5Sign("key", partnerKey); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Unifiedorder(data); var res = XDocument.Parse(result); string prepayId = res.Element("xml").Element("prepay_id").Value; //设置支付参数 Senparc.Weixin.MP.TenPayLibV3.RequestHandler paySignReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null); paySignReqHandler.SetParameter("appId", uwEntity.AppId); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId)); paySignReqHandler.SetParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", partnerKey); packageValue = ""; packageValue += " \"appId\": \"" + uwEntity.AppId + "\", "; packageValue += " \"timeStamp\": \"" + timeStamp + "\", "; packageValue += " \"nonceStr\": \"" + nonceStr + "\", "; packageValue += " \"package\": \"" + string.Format("prepay_id={0}", prepayId) + "\", "; packageValue += " \"signType\": \"MD5\", "; packageValue += " \"paySign\": \"" + paySign + "\""; }
public ActionResult NativeCall() { string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); //订单号,此处用时间和随机数生成,商户根据自己调整,保证唯一 string out_trade_no = "" + DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } sp_billno = TenPayInfo.PartnerId + sp_billno; //创建RequestHandler实例 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); packageReqHandler.SetKey(TenPayInfo.Key); //设置package订单参数 packageReqHandler.SetParameter("partner", TenPayInfo.PartnerId); //商户号 packageReqHandler.SetParameter("bank_type", "WX"); //银行类型 packageReqHandler.SetParameter("fee_type", "1"); //币种,1人民币 packageReqHandler.SetParameter("input_charset", "GBK"); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", "1"); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify); //接收财付通通知的URL packageReqHandler.SetParameter("body", "nativecall"); //商品描述 packageReqHandler.SetParameter("spbill_create_ip", "8.8.8.8" /*Page.Request.UserHostAddress*/); //用户的公网ip,不是商户服务器IP //获取package包 string packageValue = packageReqHandler.GetRequestURL(); //调起微信支付签名 string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); //设置支付参数 RequestHandler payHandler = new RequestHandler(null); payHandler.SetParameter("appid", TenPayInfo.AppId); payHandler.SetParameter("noncestr", nonceStr); payHandler.SetParameter("timestamp", timeStamp); payHandler.SetParameter("package", packageValue); payHandler.SetParameter("RetCode", "0"); payHandler.SetParameter("RetErrMsg", "成功"); string paySign = payHandler.CreateSHA1Sign(); payHandler.SetParameter("app_signature", paySign); payHandler.SetParameter("sign_method", "SHA1"); Response.ContentType = "text/xml"; Response.Clear(); ViewData["payHandler"] = payHandler.ParseXML(); return(View()); }
public ActionResult JsApi(string code, string state) { if (string.IsNullOrEmpty(code)) { return(Content("您拒绝了授权!")); } if (state != "JeffreySu") { //这里的state其实是会暴露给客户端的,验证能力很弱,这里只是演示一下 //实际上可以存任何想传递的数据,比如用户ID,并且需要结合例如下面的Session["OAuthAccessToken"]进行验证 return(Content("验证失败!请从正规途径进入!")); } //通过,用code换取access_token var openIdResult = OAuth.GetAccessToken(TenPayV3Info.AppId, TenPayV3Info.AppSecret, code); if (openIdResult.errcode != ReturnCode.请求成功) { return(Content("错误:" + openIdResult.errmsg)); } string timeStamp = ""; string nonceStr = ""; string paySign = ""; string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28); } else { sp_billno = Request["order_no"].ToString(); } //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/); timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); //设置package订单参数 packageReqHandler.SetParameter("appid", TenPayV3Info.AppId); //公众账号ID packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("body", "test"); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", "1"); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("notify_url", TenPayV3Info.TenPayV3Notify); //接收财付通通知的URL packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString()); //交易类型 packageReqHandler.SetParameter("openid", openIdResult.openid); //用户的openId string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key); packageReqHandler.SetParameter("sign", sign); //签名 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Unifiedorder(data); var res = XDocument.Parse(result); string prepayId = res.Element("xml").Element("prepay_id").Value; //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appId", TenPayV3Info.AppId); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId)); paySignReqHandler.SetParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", TenPayV3Info.Key); ViewData["appId"] = TenPayV3Info.AppId; ViewData["timeStamp"] = timeStamp; ViewData["nonceStr"] = nonceStr; ViewData["package"] = string.Format("prepay_id={0}", prepayId); ViewData["paySign"] = paySign; return(View()); }
public ActionResult JsApi() { //string appId = TenPayInfo.AppId; string timeStamp = ""; string nonceStr = ""; string packageValue = ""; string paySign = ""; string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } sp_billno = TenPayInfo.PartnerId + sp_billno; //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); packageReqHandler.SetKey(TenPayInfo.Key); //设置package订单参数 packageReqHandler.SetParameter("partner", TenPayInfo.PartnerId); //商户号 packageReqHandler.SetParameter("fee_type", "1"); //币种,1人民币 packageReqHandler.SetParameter("input_charset", "GBK"); packageReqHandler.SetParameter("bank_type", "WX"); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", "1"); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify); //接收财付通通知的URL packageReqHandler.SetParameter("body", "JSAPIdemo"); //商品描述 packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP //获取package包 packageValue = packageReqHandler.GetRequestURL(); //调起微信支付签名 timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appid", TenPayInfo.AppId); paySignReqHandler.SetParameter("appkey", TenPayInfo.AppKey); paySignReqHandler.SetParameter("noncestr", nonceStr); paySignReqHandler.SetParameter("timestamp", timeStamp); paySignReqHandler.SetParameter("package", packageValue); paySign = paySignReqHandler.CreateSHA1Sign(); //TenPay.Delivernotify(TenPayInfo.AppId, "oX99MDgNcgwnz3zFN3DNmo8uwa-w", "111112222233333", sp_billno, // timeStamp, "1", "ok", "53cca9d47b883bd4a5c85a9300df3da0cb48565c", "sha1"); //获取debug信息,建议把请求和debug信息写入日志,方便定位问题 //string pakcageDebuginfo = packageReqHandler.getDebugInfo(); //Response.Write("<br/>pakcageDebuginfo:" + pakcageDebuginfo + "<br/>"); //string paySignDebuginfo = paySignReqHandler.getDebugInfo(); //Response.Write("<br/>paySignDebuginfo:" + paySignDebuginfo + "<br/>"); //TODO:和JSSDK一样整合信息包 ViewData["appId"] = TenPayInfo.AppId; ViewData["timeStamp"] = timeStamp; ViewData["nonceStr"] = nonceStr; ViewData["packageValue"] = packageValue; ViewData["paySign"] = paySign; return(View()); }
//public ActionResult FeedBack() //{ // //创建支付应答对象 // ResponseHandler resHandler = new ResponseHandler(null); // resHandler.Init(); // resHandler.SetKey(TenPayInfo.Key, TenPayInfo.AppKey); // //判断签名 // if (resHandler.IsWXsignfeedback()) // { // //回复服务器处理成功 // Response.Write("OK"); // Response.Write("OK:" + resHandler.GetDebugInfo()); // } // else // { // //sha1签名失败 // Response.Write("fail"); // Response.Write("fail:" + resHandler.GetDebugInfo()); // } // return null; //} public ActionResult JsApi() { string appId = "";//TenPayV3Info.AppId string timeStamp = ""; string nonceStr = ""; string package = ""; string paySign = ""; string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28); } else { sp_billno = Request["order_no"].ToString(); } //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); packageReqHandler.SetKey("" /*TenPayV3Info.Key*/); timeStamp = TenPayUtil.GetTimestamp(); nonceStr = TenPayUtil.GetNoncestr(); //设置package订单参数 packageReqHandler.SetParameter("appid", appId); //公众账号ID packageReqHandler.SetParameter("mch_id", "" /*TenPayV3Info.Mchid*/); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串 packageReqHandler.SetParameter("body", "test"); packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("total_fee", "1"); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("spbill_create_ip", /*Request.UserHostAddress*/ "8.8.8.8"); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("notify_url", "www.weiweihi.com" /*_tenPayInfo.TenPayNotify*/); //接收财付通通知的URL packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString()); //交易类型 //获取package包 string sign = packageReqHandler.CreateMd5Sign("key", "" /*TenPayV3Info.Key*/); packageReqHandler.SetParameter("sign", sign); //交易类型 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Unifiedorder(data); var res = XDocument.Parse(result); string prepayId = res.Element("xml").Element("prepay_id").Value; //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appid", appId); paySignReqHandler.SetParameter("timestamp", timeStamp); paySignReqHandler.SetParameter("noncestr", nonceStr); paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId)); paySign = paySignReqHandler.CreateMd5Sign("signType", "MD5"); //获取debug信息,建议把请求和debug信息写入日志,方便定位问题 //string pakcageDebuginfo = packageReqHandler.getDebugInfo(); //Response.Write("<br/>pakcageDebuginfo:" + pakcageDebuginfo + "<br/>"); //string paySignDebuginfo = paySignReqHandler.getDebugInfo(); //Response.Write("<br/>paySignDebuginfo:" + paySignDebuginfo + "<br/>"); ViewData["appId"] = appId; ViewData["timeStamp"] = timeStamp; ViewData["nonceStr"] = nonceStr; ViewData["package"] = package; ViewData["paySign"] = paySign; return(View()); }
public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null) { string empty = string.Empty; Config config = Utility <Config> .GetConfig(base.WorkDirectory); if (string.IsNullOrEmpty(config.AppId)) { throw new PluginException("未设置AppId"); } if (string.IsNullOrEmpty(config.MCHID)) { throw new PluginException("未设置MCHID"); } string noncestr = TenPayUtil.GetNoncestr(); string str = DateTime.Now.ToString("yyyyMMddHHmmss"); RequestHandler requestHandler = new RequestHandler(); requestHandler.SetParameter("appid", config.AppId); requestHandler.SetParameter("mch_id", config.MCHID); requestHandler.SetParameter("device_info", string.Empty); requestHandler.SetParameter("nonce_str", noncestr); requestHandler.SetParameter("body", productInfo); requestHandler.SetParameter("attach", string.Empty); requestHandler.SetParameter("out_trade_no", orderId); int num = (int)(totalFee * new decimal(100)); requestHandler.SetParameter("total_fee", num.ToString()); requestHandler.SetParameter("spbill_create_ip", "222.240.184.122"); requestHandler.SetParameter("time_start", str); requestHandler.SetParameter("time_expire", string.Empty); requestHandler.SetParameter("goods_tag", string.Empty); requestHandler.SetParameter("notify_url", notifyUrl); requestHandler.SetParameter("trade_type", "NATIVE"); requestHandler.SetParameter("openid", openId); requestHandler.SetParameter("product_id", orderId); string str1 = requestHandler.CreateMd5Sign("key", config.Key); requestHandler.SetParameter("sign", str1); string str2 = requestHandler.ParseXML(); XDocument xDocument = XDocument.Parse(TenPayV3.Unifiedorder(str2)); if (xDocument == null) { throw new PluginException(string.Concat("调用统一支付接口(Native)时出错:", str2)); } XElement xElement = xDocument.Element("xml").Element("return_code"); XElement xElement1 = xDocument.Element("xml").Element("return_msg"); if (xElement == null) { throw new PluginException("调用统一支付接口(Native)时,返回参数异常"); } if (!(xElement.Value == "SUCCESS")) { throw new PluginException(string.Concat("调用统一支付接口(Native)时,接口返回异常:", xElement1.Value)); } xElement1 = xDocument.Element("xml").Element("result_code"); XElement xElement2 = xDocument.Element("xml").Element("err_code_des"); if (!(xElement1.Value == "SUCCESS")) { throw new PluginException(string.Concat("调用统一支付接口(Native)时,接口返回异常:", xElement2.Value)); } xElement1 = xDocument.Element("xml").Element("code_url"); empty = xElement1.Value; return(empty); }
public ActionResult Index() { string sp_billno = Request["orderId"].ToString(); ViewData["orderId"] = sp_billno; string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); string paySign = ""; string body = string.Empty; string fee = string.Empty; decimal totalfee = 0; //根据订单号获取从数据库中body fee 等信息 try { var goodsinfos = this.customerOrder.GetOrderById(Int64.Parse(sp_billno)); ViewData["Goods"] = goodsinfos; foreach (var goodinfo in goodsinfos) { totalfee += goodinfo.Price * goodinfo.Quantity; } body = "商品数量" + goodsinfos.Count; var integerpart = decimal.Truncate(totalfee); var decimalpart = decimal.Floor((totalfee - integerpart) * 100); fee = (integerpart * 100 + decimalpart).ToString(); ViewData["Fee"] = totalfee; } catch (Exception ex) { ViewData["Msg"] = ex.Message; return(View("failurePay")); } //附加数据 string attach = sp_billno; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (string.IsNullOrEmpty(sp_billno)) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 //sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28); ViewData["Msg"] = "订单生成错误"; return(View("failurePay")); } //sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28); //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 //packageReqHandler.Init(); //packageReqHandler.SetKey(TenPayInfo.Key); //设置package订单参数 string openid = Request.Cookies["sid"].Value; packageReqHandler.SetParameter("appid", TenPayInfo.AppId); //公众账号ID packageReqHandler.SetParameter("body", body); packageReqHandler.SetParameter("mch_id", TenPayInfo.Mchid); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower()); //随机字符串 packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify); //接收财付通通知的URL packageReqHandler.SetParameter("openid", openid); //openid packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("total_fee", fee); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("trade_type", "JSAPI"); //交易类型 //获取package包 string sign = packageReqHandler.CreateMd5Sign("key", TenPayInfo.Key); packageReqHandler.SetParameter("sign", sign); //交易类型 string data = packageReqHandler.ParseXML(); var result = TenPayV3.Unifiedorder(data); var res = XDocument.Parse(result); string prepayId = ""; try { if (res.Element("xml").Element("return_code").Value == "SUCCESS") { prepayId = res.Element("xml").Element("prepay_id").Value; } } catch (Exception ex) { ViewData["Msg"] = ex.Message; return(View("failurePay")); } string package = string.Format("prepay_id={0}", prepayId); timeStamp = TenPayUtil.GetTimestamp(); //设置支付参数 RequestHandler paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appId", TenPayInfo.AppId); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", package); paySignReqHandler.SetParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", TenPayInfo.Key); ViewData["appId"] = TenPayInfo.AppId; ViewData["timeStamp"] = timeStamp; ViewData["nonceStr"] = nonceStr; ViewData["package"] = package; ViewData["paySign"] = paySign; return(View()); }