马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

关于.NET HttpClient方式获取微信小程序码(二维码)

[复制链接]
查看2249 | 回复1 | 2019-10-12 10:21:54 | 显示全部楼层 |阅读模式

随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来。迩来分析了一项天生有关天生微信小程序码的需求——要求扫码跳转到小程序指定页面(带参数);看了下小程序官方文档,以及网上的例子,未看到多少有代价的采取C#调用小程序接口天生小程序码的例子,于是拾起多年前的代码,略作分析实验,在此分享给有须要的人,并以此抛砖引玉。

此文以HttpClient方式示例,当然采取老旧的HttpWebRequest也可以,在此不作分析。
天生微信小程序码(二维码)的接口告急有三个:

  • https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html
  • https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.get.html
  • https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html

在此仅针对createwxaqrcode(二维码)和get(小程序码/葵花码)讲解,getUnlimited原理同;

两者的接口地址分别如下:

https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

由于请求小程序接口,其返回的是图片二进制流,采取HttpClient方式时务必针对二进制数据进行处理处罚;不多说,直接上关键代码,扼要示比方下:

  1. public class HttpClientHelper
  2. {
  3. /// <summary>
  4. /// 生存接口返回二进制流为文件方法
  5. /// </summary>
  6. /// <param name="requestUri">接口地址</param>
  7. /// <param name="filePath">文件存储路径</param>
  8. /// <param name="jsonString">json数据对象</param>
  9. /// <param name="webapiBaseUrl"></param>
  10. /// <returns></returns>
  11.     public static bool DownloadBufferImage(string requestUri, /*HttpContent httpContent,*/string filePath, string jsonString, string webapiBaseUrl = "")
  12. {
  13. try
  14. {
  15. HttpContent httpContent = new StringContent(jsonString);
  16. httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
  17. using (HttpClient httpClient = new HttpClient())
  18. {
  19. if (!string.IsNullOrWhiteSpace(webapiBaseUrl))
  20. {
  21. httpClient.BaseAddress = new Uri(webapiBaseUrl);
  22. }
  23. bool result = false;
  24. httpClient.PostAsync(requestUri, httpContent).ContinueWith(
  25. (requestTask) =>
  26. {
  27. HttpResponseMessage response = requestTask.Result;
  28. response.EnsureSuccessStatusCode();
  29. var data = response.Content.ReadAsByteArrayAsync().Result;
  30.        var folder = Path.GetDirectoryName(filePath);
  31.        if (!Directory.Exists(folder))
  32.        {
  33.        Directory.CreateDirectory(folder);
  34.        }
  35. using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
  36. {
  37. fs.Write(data, 0, data.Length);
  38. fs.Flush();
  39. fs.Close();
  40. }
  41. result = true;
  42. }).Wait(30000);
  43. return result;
  44. }
  45. }
  46. catch
  47. {
  48. return false;
  49. }
  50. }
  51. }
复制代码

一共4个参数:

  1. requestUri请求的接口URL;
  2. filePath小程序码(二维码)存储的绝对路径;
  3. jsonString提交的json数据对象;
  4. webapiBaseUrl接口根路径(可忽略)

由于腾讯接口要求,提交数据必须json对象,因此httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"),此处尤为告急,不能像提交form表单一样以字典方式提交;其次,处理处罚二进制数据流采取以下情势处理处罚并生存图片;此处不赘述。

  1. var data = response.Content.ReadAsByteArrayAsync().Result;
  2. using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
  3. {
  4. fs.Write(data, 0, data.Length);
  5. fs.Flush();
  6. fs.Close();
  7. }
复制代码

  

扼要封装及调用示比方下:

  1. public bool GetQrCode(string filePath, string path = "pages/default/default", int width = 430)
  2. {
  3. string postUrl = string.Format("https://api.weixin.qq.com/wxa/getwxacode?access_token={0}", AccessToken);
  4. var data = new
  5. {
  6. path = path,
  7. width = width
  8. };
  9. var result = HttpClientHelper.DownloadBufferImage(postUrl, filePath, Newtonsoft.Json.JsonConvert.SerializeObject(data));
  10. return result;
  11. }
复制代码

  

  1. new NameSpace.GetQrCode(@"D:\QrCode.jpg", path: "pages/index/index");
复制代码

filePath为生存小程序码(二维码)图片的绝对路径,如Server.MapPath(savePath);path(小程序页面地址)和width(二维码宽度,默认430)均为可选参数,具体拜见接口文档;AccessToken为接口调用凭证;

注:由于腾讯限定,假如接口调用乐成,会直接返回图片二进制内容,假如请求失败,会返回 JSON 格式的数据;方法里仅对返回二进制流作处理处罚,其他可根据需求自行完善。







来源:https://www.cnblogs.com/ang/p/11620940.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则