本来我以为这个是很简单的事情,后来做了才发现原来使用微信JS-SDK
的时候,微信的HTML5客户端不会将图片直接post
给我服务端,而是先提交给微信服务器,然后我的服务端需要通过serverId
来获得图片,大致的流程我绘制了UML
,大家可以理解下
目前我们只关心服务器这段,我们将得到客户端传来的ServerID
,从微信的服务器上下载图片到本地。
需要实现这一点,我们有两个前提
- 公众号要注册,要给钱,这就是前面强调需要完成的的认证的原因
- 获取
access token
我们实现的代码如下
public async Task<string> Get(string mediaid)
{
var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString["access_token"] = await Get();
queryString["media_id"] = mediaid;
var uri = "http://file.api.weixin.qq.com/cgi-bin/media/get?" + queryString;
HttpResponseMessage response;
response = await client.GetAsync(uri);
var msg = await response.Content.ReadAsStreamAsync();
var file = response.Content.Headers.ContentDisposition.FileName.Replace("\"", "");
var helper = new ProjecToxfordClientHelper();
var content = await FileHelper.ReadAsync (msg);
FileHelper.SaveFile(content, file);
return file;
}
如果access token
正确且media_id
(就是那个serverid
)有效,微信服务端会返回给我们文件名和流,我们就可以对这些流做一些我们希望的处理了。
好了,到了现在的话,我们对微信服务器需要实现的接口都差不多了,接下来我们需要实现牛津计划的FACE了。