コード例 #1
0
ファイル: mch.cs プロジェクト: fleetscythe/YuChang
 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);
 }
コード例 #2
0
        /// <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);

        }
コード例 #3
0
        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;
        }