コード例 #1
0
        /// <summary>
        /// 【异步方法】用于商户的企业付款操作进行结果查询,返回付款操作详细结果。
        /// </summary>
        /// <param name="dataInfo"></param>
        /// <param name="timeOut"></param>
        /// <returns></returns>
        public static async Task <GetTransferInfoResult> GetTransferInfoAsync(TenPayV3GetTransferInfoRequestData dataInfo, int timeOut = Config.TIME_OUT)
        {
            var          urlFormat     = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo";
            var          data          = dataInfo.PackageRequestHandler.ParseXML();
            var          formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
            MemoryStream ms            = new MemoryStream();

            ms.Write(formDataBytes, 0, formDataBytes.Length);
            ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
            var result = await RequestUtility.HttpPostAsync(urlFormat, null, ms, timeOut : timeOut);

            return(new GetTransferInfoResult(result));
        }
コード例 #2
0
        /// <summary>
        /// 【异步方法】短链接转换接口
        /// </summary>
        /// <param name="dataInfo"></param>
        /// <returns></returns>
        public static async Task <ShortUrlResult> ShortUrlAsync(TenPayV3ShortUrlRequestData dataInfo)
        {
            var          urlFormat     = "https://api.mch.weixin.qq.com/tools/shorturl";
            var          data          = dataInfo.PackageRequestHandler.ParseXML();
            var          formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
            MemoryStream ms            = new MemoryStream();

            ms.Write(formDataBytes, 0, formDataBytes.Length);
            ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
            var resultXml = await RequestUtility.HttpPostAsync(urlFormat, null, ms);

            return(new ShortUrlResult(resultXml));
        }
コード例 #3
0
        /// <summary>
        /// 【异步方法】统一支付接口
        /// 统一支付接口,可接受JSAPI/NATIVE/APP 下预支付订单,返回预支付订单号。NATIVE 支付返回二维码code_url。
        /// </summary>
        /// <param name="dataInfo">微信支付需要post的xml数据</param>
        /// <param name="timeOut"></param>
        /// <returns></returns>
        public static async Task <UnifiedorderResult> UnifiedorderAsync(TenPayV3UnifiedorderRequestData dataInfo, int timeOut = Config.TIME_OUT)
        {
            var          urlFormat     = "https://api.mch.weixin.qq.com/pay/unifiedorder";
            var          data          = dataInfo.PackageRequestHandler.ParseXML();//获取XML
            var          formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
            MemoryStream ms            = new MemoryStream();
            await ms.WriteAsync(formDataBytes, 0, formDataBytes.Length);

            ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
            var resultXml = await RequestUtility.HttpPostAsync(urlFormat, null, ms, timeOut : timeOut);

            return(new UnifiedorderResult(resultXml));
        }
コード例 #4
0
        /// <summary>
        /// <para>查询企业付款银行卡</para>
        /// <para>注意:请求需要双向证书</para>
        /// </summary>
        /// <param name="dataInfo"></param>
        /// <returns></returns>
        public static async Task <QueryBankResult> QueryBankAsync(TenPayV3QueryBankRequestData dataInfo)
        {
            var urlFormat = ReurnPayApiUrl("https://api.mch.weixin.qq.com/{0}mmpaysptrans/query_bank");

            var          data          = dataInfo.PackageRequestHandler.ParseXML();//获取XML
            var          formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
            MemoryStream ms            = new MemoryStream();
            await ms.WriteAsync(formDataBytes, 0, formDataBytes.Length);

            ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
            var resultXml = await RequestUtility.HttpPostAsync(urlFormat, null, ms);

            return(new QueryBankResult(resultXml));
        }
コード例 #5
0
ファイル: PictureApi.cs プロジェクト: yueliuhun/WeiXinMPSDK
        public static async Task <PictureResult> UploadImgAsync(string accessToken, string fileName)
        {
            var urlFormat = Config.ApiMpHost + "/merchant/common/upload_img?access_token={0}&filename={1}";
            var url       = string.IsNullOrEmpty(accessToken) ? urlFormat : string.Format(urlFormat, accessToken.AsUrlData(), fileName.AsUrlData());

            var json = new PictureResult();

            using (var fs = FileHelper.GetFileStream(fileName))
            {
                var jsonText = await RequestUtility.HttpPostAsync(CommonDI.CommonSP, url, null, fs).ConfigureAwait(false);

                json = Senparc.Weixin.HttpUtility.Post.GetResult <PictureResult>(jsonText);
            }
            return(json);
        }
コード例 #6
0
ファイル: PictureApi.cs プロジェクト: xin-young/WeiXinMPSDK
        public static async Task <PictureResult> UploadImgAsync(string accessToken, string fileName)
        {
            var urlFormat = "https://api.weixin.qq.com/merchant/common/upload_img?access_token={0}&filename={1}";
            var url       = string.IsNullOrEmpty(accessToken) ? urlFormat : string.Format(urlFormat, accessToken.AsUrlData(), fileName.AsUrlData());

            var json = new PictureResult();

            using (var fs = FileHelper.GetFileStream(fileName))
            {
                var jsonText = await RequestUtility.HttpPostAsync(url, null, fs);

                json = Post.GetResult <PictureResult>(jsonText);
            }
            return(json);
        }
コード例 #7
0
        /// <summary>
        /// <para>获取 RSA 加密公钥接口</para>
        /// <para>https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_7&index=4</para>
        /// </summary>
        /// <param name="dataInfo"></param>
        /// <returns></returns>
        public static async Task <GetPublicKeyResult> GetPublicKeyAsync(TenPayV3QueryBankRequestData dataInfo)
        {
            //TODO:官方文档没有明确此接口是否支持沙箱
            var urlFormat = ReurnPayApiUrl("https://fraud.mch.weixin.qq.com/{0}risk/getpublickey");

            var          data          = dataInfo.PackageRequestHandler.ParseXML();//获取XML
            var          formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
            MemoryStream ms            = new MemoryStream();
            await ms.WriteAsync(formDataBytes, 0, formDataBytes.Length);

            ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
            var resultXml = await RequestUtility.HttpPostAsync(urlFormat, null, ms);

            return(new GetPublicKeyResult(resultXml));
        }
コード例 #8
0
        public async Task <IActionResult> PostFile(string byStream = null)
        {
            var dt1            = SystemTime.Now;
            var filePath       = Path.GetFullPath("App_Data/cover.png");//也可以上传其他任意文件
            var fileDictionary = new Dictionary <string, string>();

            if (byStream != null)
            {
                //使用Stream传入,而不是文件名
                SenparcTrace.SendCustomLog("Post 文件信息", $"使用文件流放入 fileDictionary 中,并将修改文件名。");
                using (var fs = System.IO.File.OpenRead(filePath))
                {
                    var formFileData = new FormFileData(Path.GetFileName(filePath), fs);
                    formFileData.FileName   = $"changed-{formFileData.FileName}";//修改文件名
                    fileDictionary["image"] = formFileData.GetFileValue();
                }
            }
            else
            {
                SenparcTrace.SendCustomLog("Post 文件信息", $"使用文件物理地址放入 fileDictionary 中,保留原文件名。");
                fileDictionary["image"] = filePath;
            }

            var url    = "https://*****:*****@"<html>
<head>
<meta http-equiv=Content-Type content=""text/html;charset=utf-8"">
<title>CO2NET 文件 Post 测试 - {note}</title>
</head>
<body>
    <p>如果在下方看到《微信开发深度解析》图书封面,表示测试成功({note})。可通过 SenparcTrace 日志查看更多过调试信息日志。</p>
    <p>耗时:{timeCost.TotalMilliseconds} ms,平均:{averageCost} ms</p>
       <img src=""data:image/png; base64,{result}"" />
</body>
</html>";

            return(Content(html, "text/html"));
        }
コード例 #9
0
ファイル: TencentWXPay.cs プロジェクト: jijiliyugou/xiangmu
        public async Task <SharingResultQuery> ProfitSharingQueryAsync(string WXPayBillno, string TransactionId, SystemConfigs tencentparam)
        {
            var nonce_str       = TenPayV3Util.GetNoncestr();
            var requestHandler2 = new RequestHandler();

            requestHandler2.SetParameter("mch_id", tencentparam.TenPayMchId);
            requestHandler2.SetParameter("transaction_id", TransactionId);
            requestHandler2.SetParameter("out_order_no", WXPayBillno);
            requestHandler2.SetParameter("nonce_str", nonce_str);
            requestHandler2.SetParameter("sign_type", "HMAC-SHA256");
            ////HMAC-SHA256加密签名
            var sha256Sign = requestHandler2.CreateSha256Sign("key", tencentparam.TenPayKey);

            requestHandler2.SetParameter("sign", sha256Sign);


            string       urlFormat     = "https://api.mch.weixin.qq.com/pay/profitsharingquery";
            var          data          = requestHandler2.ParseXML();//获取XML
            var          formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
            MemoryStream ms            = new MemoryStream();

            ms.Write(formDataBytes, 0, formDataBytes.Length);
            ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
            var resultXml = await RequestUtility.HttpPostAsync(urlFormat, null, ms);

            SharingResultQuery result = new SharingResultQuery();
            var _resultXml            = XDocument.Parse(resultXml);

            result.return_code  = GetXmlValue(_resultXml, "return_code");
            result.result_code  = GetXmlValue(_resultXml, "result_code");
            result.err_code     = GetXmlValue(_resultXml, "err_code");
            result.err_code_des = GetXmlValue(_resultXml, "err_code_des");
            result.mch_id       = GetXmlValue(_resultXml, "mch_id");
            result.appid        = GetXmlValue(_resultXml, "appid");
            result.nonce_str    = GetXmlValue(_resultXml, "nonce_str");
            result.sign         = GetXmlValue(_resultXml, "sign");
            result.status       = GetXmlValue(_resultXml, "status");
            result.receivers    = GetXmlValue(_resultXml, "receivers");
            return(result);
        }
コード例 #10
0
        /// <summary>
        /// 【异步方法】获取Xml结果。
        /// </summary>
        /// <param name="messageHandler"></param>
        /// <param name="serviceProvider">.NET Core 的 ServiceProvider(.NET Framework 可设为 null)</param>
        /// <param name="url"></param>
        /// <param name="autoFillUrlParameters">是否自动填充Url中缺少的参数(signature、timestamp、nonce),默认为 true</param>
        /// <param name="token"></param>
        /// <param name="stream"></param>
        /// <param name="useNeuCharKey">是否使用WeiWeiHiKey,如果使用,则token为WeiWeiHiKey</param>
        /// <param name="timeOut">代理请求超时时间(毫秒)</param>
        /// <returns></returns>
        public static async Task <string> RequestXmlAsync(this IMessageHandlerBase messageHandler, IServiceProvider serviceProvider, string url, string token, Stream stream, bool autoFillUrlParameters = true, bool useNeuCharKey = false, int timeOut = AGENT_TIME_OUT)
        {
            if (messageHandler != null)
            {
                messageHandler.UsedMessageAgent = true;
            }
            string timestamp = SystemTime.Now.Ticks.ToString();
            string nonce     = "GodBlessYou";
            string signature = CheckSignatureWeChat.GetSignature(timestamp, nonce, token);

            if (autoFillUrlParameters)
            {
                url += string.Format("{0}signature={1}&timestamp={2}&nonce={3}",
                                     url.Contains("?") ? "&" : "?", signature.AsUrlData(), timestamp.AsUrlData(), nonce.AsUrlData());
            }

            stream.Seek(0, SeekOrigin.Begin);
            var responseXml = await RequestUtility.HttpPostAsync(serviceProvider, url, null, stream, timeOut : timeOut);

            //WeixinTrace.SendApiLog("RequestXmlUrl:" + url, responseXml);
            return(responseXml);
        }
コード例 #11
0
ファイル: TencentWXPay.cs プロジェクト: jijiliyugou/xiangmu
        public async Task <AddReceiverResult> ProfitSharingRemoveReceiver(receiver receiver, SystemConfigs tencentparam)
        {
            var nonce_str1      = TenPayV3Util.GetNoncestr();
            var requestHandler3 = new RequestHandler();

            requestHandler3.SetParameter("mch_id", tencentparam.TenPayMchId);
            requestHandler3.SetParameter("appid", tencentparam.AppID);
            requestHandler3.SetParameter("nonce_str", nonce_str1);

            requestHandler3.SetParameter("sign_type", "HMAC-SHA256");
            requestHandler3.SetParameter("receiver", "{\"type\":\"" + receiver.type + "\",\"account\":\"" + receiver.account + "\",\"name\":\"" + receiver.name + "\"}");
            ////HMAC-SHA256加密签名
            var sha256Sign1 = requestHandler3.CreateSha256Sign("key", tencentparam.TenPayKey);

            requestHandler3.SetParameter("sign", sha256Sign1);
            string       urldelete      = "https://api.mch.weixin.qq.com/pay/profitsharingremovereceiver";
            var          data1          = requestHandler3.ParseXML();//获取XML
            var          formDataBytes1 = data1 == null ? new byte[0] : Encoding.UTF8.GetBytes(data1);
            MemoryStream ms1            = new MemoryStream();

            ms1.Write(formDataBytes1, 0, formDataBytes1.Length);
            ms1.Seek(0, SeekOrigin.Begin);//设置指针读取位置
            var resultXml1 = await RequestUtility.HttpPostAsync(urldelete, null, ms1);

            AddReceiverResult result = new AddReceiverResult();
            var _resultXml           = XDocument.Parse(resultXml1);

            result.return_code  = GetXmlValue(_resultXml, "return_code");
            result.result_code  = GetXmlValue(_resultXml, "result_code");
            result.err_code     = GetXmlValue(_resultXml, "err_code");
            result.err_code_des = GetXmlValue(_resultXml, "err_code_des");
            result.mch_id       = GetXmlValue(_resultXml, "mch_id");
            result.appid        = GetXmlValue(_resultXml, "appid");
            result.receiver     = GetXmlValue(_resultXml, "receiver");
            result.nonce_str    = GetXmlValue(_resultXml, "nonce_str");
            result.sign         = GetXmlValue(_resultXml, "sign");
            return(result);
        }
コード例 #12
0
        public async Task <ActionResult> PostFile()
        {
            var filePath = Server.MapPath("~/App_Data/cover.png");//也可以上传其他任意文件
            var file     = new Dictionary <string, string>()
            {
                { "image", filePath }
            };
            var url    = "https://*****:*****@"<html>
<head>
<meta http-equiv=Content-Type content=""text/html;charset=utf-8"">
<title>CO2NET 文件 Post 测试</title>
</head>
<body>
<p>如果在下方看到《微信开发深度解析》图书封面,表示测试成功</p>
<img src=""data:image/png;base64,{result}"" />
</body>
</html>";

            return(Content(html, "text/html"));
        }
コード例 #13
0
        public void HttpPostTest()
        {
            //return;//已经通过,但需要连接远程测试,太耗时,常规测试时暂时忽略。

            /*
             * 说明:在测试之前请确保url可用
             * 当前默认URL为Sample项目,可以使用Ctrl+F5打开Sample项目,确保可以访问
             */

            //随便找一个存在的测试图片
            var file = "..\\..\\..\\..\\Senparc.Weixin.MP.Sample\\Senparc.Weixin.MP.Sample\\Images\\qrcode.jpg";

            var url = "http://localhost:65395/Media/TestUploadMediaFile/?token={0}&type={1}&contentLength={2}";

            {
                //同步方法测试
                FileStream fs = new FileStream(file, FileMode.Open);

                url = string.Format(url, "TOKEN", UploadMediaFileType.image.ToString(), fs.Length);

                //获取字符串结果
                var actualResult = RequestUtility.HttpPost(url, new CookieContainer(), fs, encoding: null);
                Assert.IsNotNull(actualResult);
                Console.WriteLine(actualResult);

                //比较强类型示例的结果
                UploadTemporaryMediaResult resultEntity = Post.GetResult <UploadTemporaryMediaResult>(actualResult);
                Assert.IsNotNull(resultEntity);
                Assert.AreEqual(UploadMediaFileType.image, resultEntity.type);
                Assert.AreEqual("MEDIA_ID", resultEntity.media_id);
                Assert.AreEqual(123456789, resultEntity.created_at);
            }

            {
                //异步方法测试
                var finished = false;
                Task.Factory.StartNew(async() =>
                {
                    Console.WriteLine("开始异步方法测试");

                    FileStream fs = new FileStream(file, FileMode.Open);

                    url = string.Format(url, "TOKEN", UploadMediaFileType.image.ToString(), fs.Length);

                    //获取字符串结果
                    var actualResult = await RequestUtility.HttpPostAsync(url, new CookieContainer(), fs, encoding: null);
                    Assert.IsNotNull(actualResult);
                    Console.WriteLine(actualResult);

                    //比较强类型示例的结果
                    UploadTemporaryMediaResult resultEntity = Post.GetResult <UploadTemporaryMediaResult>(actualResult);
                    Assert.IsNotNull(resultEntity);
                    Assert.AreEqual(UploadMediaFileType.image, resultEntity.type);
                    Assert.AreEqual("MEDIA_ID", resultEntity.media_id);
                    Assert.AreEqual(123456789, resultEntity.created_at);
                    finished = true;
                });

                while (!finished)
                {
                    Thread.Sleep(10);
                }
            }
        }