protected void Page_Load(object sender, EventArgs e) { mcode = this.Request.QueryString["mcode"]; if (!string.IsNullOrEmpty(mcode)) { mcode = EncryptHelper.XorEncryptStr(mcode); message = mcode; return; } //创建ResponseHandler实例 ResponseHandler resHandler = new ResponseHandler(Context); resHandler.setKey(PayConfig.AppKey); //判断签名 try { string error = ""; if (resHandler.isWXsign(out error)) { #region 协议参数===================================== //--------------协议参数-------------------------------------------------------- string return_code = resHandler.getParameter("return_code"); string return_msg = resHandler.getParameter("return_msg"); string appid = resHandler.getParameter("appid"); //以下字段在 return_code 为 SUCCESS 的时候有返回-------------------------------- string mch_id = resHandler.getParameter("mch_id"); string device_info = resHandler.getParameter("device_info"); string nonce_str = resHandler.getParameter("nonce_str"); string result_code = resHandler.getParameter("result_code"); string err_code = resHandler.getParameter("err_code"); string err_code_des = resHandler.getParameter("err_code_des"); //以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回--------------- string openid = resHandler.getParameter("openid"); string is_subscribe = resHandler.getParameter("is_subscribe"); string trade_type = resHandler.getParameter("trade_type"); string bank_type = resHandler.getParameter("bank_type"); string total_fee = resHandler.getParameter("total_fee"); string fee_type = resHandler.getParameter("fee_type"); string transaction_id = resHandler.getParameter("transaction_id"); string out_trade_no = resHandler.getParameter("out_trade_no"); string attach = resHandler.getParameter("attach"); string time_end = resHandler.getParameter("time_end"); #endregion //支付成功 if (!out_trade_no.Equals("") && return_code.Equals("SUCCESS") && result_code.Equals("SUCCESS")) { /** * 这里输入用户逻辑操作,比如更新订单的支付状态 * 这里可以发给用户信息操作 * **/ LogUtil.WriteLog("============ 支付成功 ==============="); //Response.Write("success"); var packageReqHandler = new RequestHandler(Context); packageReqHandler.init(); packageReqHandler.setParameter("return_code", "SUCCESS"); packageReqHandler.setParameter("return_msg", "OK"); string data = packageReqHandler.parseXML(); LogUtil.WriteLog("Notify 页面 package(XML):" + data); Response.Write(data); } else { message = err_code + err_code_des; LogUtil.WriteLog("Notify 支付失败 " + err_code + ":" + err_code_des); } } else { //这里为我们自己调用显示的内容 LogUtil.WriteLog("Notify 页面 isWXsign= false ,显示自定义消息:" + mcode); } } catch (Exception ee) { LogUtil.WriteLog("Notify 页面 发送异常错误:" + ee.Message); } }
protected string UserOpenId = "";//微信用户openid protected void Page_Load(object sender, EventArgs e) { this.BindData(); LogUtil.WriteLog("============ 单次支付开始 ==============="); LogUtil.WriteLog(string.Format("传递支付参数:OrderSN={0}、Body={1}、TotalFee={2}、Attach={3}、UserOpenId={4}", this.OrderSN, this.Body, this.TotalFee, this.Attach, this.UserOpenId)); #region 支付操作============================ #region 基本参数=========================== //时间戳 TimeStamp = TenpayUtil.getTimestamp(); //随机字符串 NonceStr = TenpayUtil.getNoncestr(); int wid = MyCommFun.RequestInt("wid"); BLL.wx_payment_wxpay wxPayBll = new BLL.wx_payment_wxpay(); Model.wx_payment_wxpay paymentInfo = wxPayBll.GetModelByWid(wid); //创建支付应答对象 var packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.init(); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("body", this.Body); //商品信息 127字符 packageReqHandler.setParameter("appid", PayConfig.AppId); packageReqHandler.setParameter("mch_id", PayConfig.MchId); packageReqHandler.setParameter("nonce_str", NonceStr.ToLower()); packageReqHandler.setParameter("notify_url", PayConfig.NotifyUrl); packageReqHandler.setParameter("openid", this.UserOpenId); packageReqHandler.setParameter("out_trade_no", this.OrderSN); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", this.TotalFee); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); if (!string.IsNullOrEmpty(this.Attach)) packageReqHandler.setParameter("attach", this.Attach);//自定义参数 127字符 #endregion #region sign=============================== Sign = packageReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 sign:" + Sign); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", Sign); string data = packageReqHandler.parseXML(); LogUtil.WriteLog("WeiPay 页面 package(XML):" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); LogUtil.WriteLog("WeiPay 页面 package(Back_XML):" + prepayXml); //获取预支付ID var xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { PrepayId = xnl[7].InnerText; Package = string.Format("prepay_id={0}", PrepayId); LogUtil.WriteLog("WeiPay 页面 package:" + Package); } #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appId", PayConfig.AppId); paySignReqHandler.setParameter("timeStamp", TimeStamp); paySignReqHandler.setParameter("nonceStr", NonceStr); paySignReqHandler.setParameter("package", Package); paySignReqHandler.setParameter("signType", "MD5"); PaySign = paySignReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 paySign:" + PaySign); #endregion #endregion }