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); }
/// <summary> /// 发货,告知微信后台该订单处于发货状态。 /// </summary> /// <param name="openid">购买用户的 OpenId,已经放在最终支付结果通知的 PostData 里了。</param> /// <param name="transid">交易单号</param> /// <param name="outTradeNO">第三方订单号</param> public void Deliver(string openid, string transid, string outTradeNO) { var paySignReqHandler = new RequestHandler(Utility.DefaultEncoding); var timeStamp = DateTimeToUnixTimestamp(DateTime.Now); paySignReqHandler.setParameter("appid", this.accessToken.AppId); paySignReqHandler.setParameter("appkey", this.appKey); paySignReqHandler.setParameter("openid", openid); paySignReqHandler.setParameter("transid", transid); paySignReqHandler.setParameter("out_trade_no", outTradeNO); paySignReqHandler.setParameter("deliver_timestamp", timeStamp.ToString()); paySignReqHandler.setParameter("deliver_status", "1"); paySignReqHandler.setParameter("deliver_msg", "ok"); var paySign = paySignReqHandler.createSHA1Sign(); var url = "https://api.weixin.qq.com/pay/delivernotify?access_token=" + accessToken; var values = new Dictionary<string, string>(); values.Add("appid", this.accessToken.AppId); values.Add("openid", openid); values.Add("transid", transid); values.Add("out_trade_no", outTradeNO); values.Add("deliver_timestamp", timeStamp.ToString()); values.Add("deliver_status", "1"); values.Add("deliver_msg", "ok"); values.Add("app_signature", paySign); values.Add("sign_method", "sha1"); var str = Utility.Serialize(values); var client = new WebClient(); client.Encoding = Utility.DefaultEncoding; var result = client.UploadString(url, "post", str); var dic = Utility.Deserialize<Dictionary<string, object>>(result); var code = (int)dic["errcode"]; var msg = (string)dic["errmsg"]; if (code != 0) throw Error.WeiXinError(code, msg); }
public Dictionary<string, object> QueryOrder(string partnerId, string partnerKey, string outTradeNO) { var str = string.Format("out_trade_no={0}&partner={1}&key={2}", outTradeNO, partnerId, partnerKey); var sign = MD5Encoding(str).ToUpper(); var package = string.Format("out_trade_no={0}&partner={1}&sign={2}", outTradeNO, partnerId, sign); var timeStamp = DateTimeToUnixTimestamp(DateTime.Now).ToString(); var paySignReqHandler = new RequestHandler(Utility.DefaultEncoding); paySignReqHandler.setParameter("appid", this.accessToken.AppId); paySignReqHandler.setParameter("appkey", this.appKey); paySignReqHandler.setParameter("package", package); paySignReqHandler.setParameter("timestamp", timeStamp); var app_signature = paySignReqHandler.createSHA1Sign(); var values = new Dictionary<string, string>(); values.Add("appid", this.accessToken.AppId); values.Add("package", package); values.Add("timestamp", timeStamp); values.Add("app_signature", app_signature); values.Add("sign_method", "sha1"); var url = "https://api.weixin.qq.com/pay/orderquery?access_token=" + accessToken; //var serial = new System.Web.Script.Serialization.JavaScriptSerializer(); str = Utility.Serialize(values); var client = new WebClient(); client.Encoding = Utility.DefaultEncoding; var result = client.UploadString(url, "post", str); var dic = Utility.Deserialize<Dictionary<string, object>>(result); var code = (int)dic["errcode"]; var msg = (string)dic["errmsg"]; if (code != 0) throw Error.WeiXinError(code, msg); return dic; }