图片上传显示服务器返回错误,微信支付V3图片上传,返回 400 远程服务器错误,能不能帮我解答啊?...

string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "/temp/", filename);

var sha256 = Applyments.SHA256File(filePath);

meta meta = new meta()

{

sha256 = sha256,

filename = System.IO.Path.GetFileName(filePath)

};

var json = JsonConvert.SerializeObject(meta);

string mchid = site.WechatMchid;

string serialNo = site.WechatSerialNo;

var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();

string nonce = Guid.NewGuid().ToString("n");

string method = "POST";

string uri = "/v3/merchant/media/upload";

string body = json;

string message = $"{method}\n{uri}\n{timestamp}\n{nonce}\n{body}\n";

string signature = Applyments.Sign(message, mchid);

string auth = $"mchid=\"{mchid}\",nonce_str=\"{nonce}\",timestamp=\"{timestamp}\",serial_no=\"{serialNo}\",signature=\"{signature}\"";

string value = $"WECHATPAY2-SHA256-RSA2048 {auth}";

// 定义数据分隔线

string boundary = string.Format("{0}", DateTime.Now.Ticks.ToString("x"));

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

request.Method = "POST";

request.Headers.Add(HttpRequestHeader.Authorization, value);

//request.Accept = "application/json";

request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36";

request.ContentType = "multipart/form-data;boundary=" + boundary;

// 换行符

string LINE_END = "\r\n";

string PREFIX = "--";

//拼装请求内容第一部分

StringBuilder strSb = new StringBuilder();

StringBuilder strSb1 = new StringBuilder();

strSb1.Append(PREFIX).Append(boundary);

strSb.Append(PREFIX).Append(boundary).Append(LINE_END)

.Append("Content-Disposition: form-data; name=\"meta\";" + LINE_END)

.Append("Content-Type: application/json; " + LINE_END)

.Append(LINE_END)// 空行

.Append("{\"filename\":\"" + meta.filename + "\",\"sha256\":\"" + meta.sha256 + "\"}")

.Append(LINE_END);

//拼装请求内容第二部分

strSb.Append(PREFIX).Append(boundary).Append(LINE_END)

.Append("Content-Disposition: form-data; name=\"file\"; filename=\"" + filename + "\";" + LINE_END)

.Append("Content-Type: image/jpeg" + LINE_END)

.Append(LINE_END);// 空行

//拼接图片文件流

FileStream fs = new FileStream(filePath, FileMode.Open);//可以是其他重载方法

byte[] byData = new byte[fs.Length];

fs.Read(byData, 0, byData.Length);

fs.Close();

string stringFiles = Convert.ToBase64String(byData);

strSb.Append(stringFiles).Append(LINE_END);

//结尾

strSb.Append(PREFIX).Append(boundary).Append(PREFIX)

.Append(LINE_END);

byte[] data = Encoding.UTF8.GetBytes(strSb.ToString());

MemoryStream memoryStream = new MemoryStream();

memoryStream.Write(data, 0, data.Length);

// 获取二进制数据

byte[] postBytes = memoryStream.ToArray();

request.ContentLength = postBytes.Length;

using(Stream reqStream = request.GetRequestStream())

{

reqStream.Write(postBytes, 0, postBytes.Length);

reqStream.Close();

}

HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

//获取响应内容

StreamReader reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);

string content = reader.ReadToEnd();

reader.Close();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值