/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
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); }
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); }
/// <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)); }
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")); }
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); }
/// <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}×tamp={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); }
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); }
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")); }
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); } } }