public static string unifiedorder(string appid, string mch_id, string openid, string key, string body, string notify_url, string out_trade_no, int total_fee) { //string appId = this.accessToken.AppId; //string parameterValue = this.partnerId; var spbill_create_ip = "127.0.0.1"; string noncestr = TenpayUtil.getNoncestr(); string parameterValue2 = "JSAPI"; RequestHandler requestHandler = new RequestHandler(Encoding.UTF8); requestHandler.setKey(key); requestHandler.setParameter("appid", appid); requestHandler.setParameter("body", body); requestHandler.setParameter("mch_id", mch_id); requestHandler.setParameter("nonce_str", noncestr); requestHandler.setParameter("notify_url", notify_url); requestHandler.setParameter("openid", openid); requestHandler.setParameter("out_trade_no", out_trade_no); requestHandler.setParameter("spbill_create_ip", spbill_create_ip); requestHandler.setParameter("total_fee", total_fee.ToString()); requestHandler.setParameter("trade_type", parameterValue2); string text = requestHandler.createMd5Sign(); string data = requestHandler.parseXML(); string address = "https://api.mch.weixin.qq.com/pay/unifiedorder"; string xml = new WebClient { Encoding = Encoding.UTF8 }.UploadString(address, "post", data); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xml); XmlElement[] source = xmlDocument.FirstChild.ChildNodes.Cast<XmlElement>().ToArray<XmlElement>(); string innerText = source.Single((XmlElement o) => o.Name == "return_code").InnerText; if (!(innerText != "SUCCESS")) { return source.Single((XmlElement o) => o.Name == "prepay_id").InnerText; } string text2 = ( from o in source where o.Name == "err_code" select o.InnerText).SingleOrDefault<string>(); string text3 = ( from o in source where o.Name == "err_code_des" select o.InnerText).SingleOrDefault<string>(); if (text2 != null && text3 != null) { throw Error.WeiXinError(text2, text3); } string msg = ( from o in source where o.Name == "return_msg" select o.InnerText).SingleOrDefault<string>() ?? "ERROR"; throw Error.WeiXinError(innerText, msg); }
protected void Page_Load(object sender, EventArgs e) { 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 = TenpayUtil.partner + sp_billno; //创建RequestHandler实例 RequestHandler packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.init(); packageReqHandler.setKey(TenpayUtil.key); //设置package订单参数 packageReqHandler.setParameter("partner", TenpayUtil.partner); //商户号 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", TenpayUtil.tenpay_notify); //接收财付通通知的URL packageReqHandler.setParameter("body", "nativecall"); //商品描述 packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP //获取package包 string packageValue = packageReqHandler.getRequestURL(); //调起微信支付签名 string timeStamp = TenpayUtil.getTimestamp(); string nonceStr = TenpayUtil.getNoncestr(); //设置支付参数 RequestHandler payHandler = new RequestHandler(Context); payHandler.setParameter("appid", TenpayUtil.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(); Response.Write(payHandler.parseXML()); }