C#위챗 개발 여정(6): 매개 변수가 있는 QR 코드 생성
1 #region
2
3 /// <summary>
4 /// Ticket
5 /// </summary>
6 /// <returns></returns>
7 private static string CreateTicket(string scene_id)
8 {
9 var token = AccessToken.Instance;
10
11 if (string.IsNullOrEmpty(token.Access_Token))
12 throw new ArgumentNullException("Access_Token");
13
14 string url = string.Format(WeiXinConst.WeiXin_Ticket_CreateUrl, token.Access_Token);
15 string postData = WeiXinConst.WeiXin_QrCodeTicket_Create_JsonString.Replace("{0}", scene_id);
16
17 string result = HttpClientHelper.PostResponse(url, postData);
18 Ticket ticket = JsonConvert.DeserializeObject<Ticket>(result); //HttpClientHelper.PostResponse<Ticket>(url, postData);
19
20 if (ticket == null || string.IsNullOrEmpty(ticket.ticket))
21 {
22 ErrorMessage msg = JsonConvert.DeserializeObject<ErrorMessage>(result);
23 if (msg.TokenExpired)
24 return CreateTicketByNewAccessToken(scene_id);
25 }
26 return ticket.ticket;
27 }
28
29 /// <summary>
30 /// AccessToken
31 /// </summary>
32 /// <param name="scene_id"></param>
33 /// <returns></returns>
34 private static string CreateTicketByNewAccessToken(string scene_id)
35 {
36 var token = AccessToken.NewInstance;
37
38 if (string.IsNullOrEmpty(token.Access_Token))
39 throw new ArgumentNullException("Access_Token");
40
41 string url = string.Format(WeiXinConst.WeiXin_Ticket_CreateUrl, token.Access_Token);
42 string postData = WeiXinConst.WeiXin_QrCodeTicket_Create_JsonString.Replace("{0}", scene_id);
43
44 Ticket ticket = HttpClientHelper.PostResponse<Ticket>(url, postData);
45
46 if (ticket == null || string.IsNullOrEmpty(ticket.ticket))
47 throw new Exception("Ticket Null,AccessToken:" + token.Access_Token);
48 return ticket.ticket;
49 }
50
51
52 /// <summary>
53 /// Ticket
54 /// </summary>
55 /// <param name="scene_id"> id</param>
56 /// <param name="imgPath"> </param>
57 public static void SaveQrCodeImage(string scene_id, string imgPath)
58 {
59 string Ticket = CreateTicket(scene_id);
60
61 if (Ticket == null)
62 throw new ArgumentNullException("Ticket");
63
64 //ticket urlEncode
65 string stUrl = string.Format(WeiXinConst.WeiXin_QrCode_GetUrl, HttpUtility.UrlEncode(Ticket));
66
67 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(stUrl);
68
69 req.Method = "GET";
70
71 using (WebResponse wr = req.GetResponse())
72 {
73 HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
74 string strpath = myResponse.ResponseUri.ToString();
75
76 WebClient mywebclient = new WebClient();
77
78 try
79 {
80 mywebclient.DownloadFile(strpath, imgPath);
81 }
82 catch (Exception)
83 {
84 throw new Exception(" !");
85 }
86 }
87 }
88
89 /// <summary>
90 /// SceneId
91 /// </summary>
92 /// <param name="scene_id"></param>
93 /// <returns></returns>
94 public static Stream GetQrCodeImageStream(string scene_id)
95 {
96 string Ticket = CreateTicket(scene_id);
97
98 if (Ticket == null)
99 throw new ArgumentNullException("Ticket");
100
101 //ticket urlEncode
102 string strUrl = string.Format(WeiXinConst.WeiXin_QrCode_GetUrl, HttpUtility.UrlEncode(Ticket));
103 try
104 {
105 System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
106 Byte[] bytes = client.GetByteArrayAsync(strUrl).Result;
107 return new MemoryStream(bytes);
108 }
109 catch
110 {
111 throw new Exception(" !");
112 }
113 }
114
115 #endregion
매개 변수가 있는 QR코드를 생성하려면 먼저 Ticket(내장 token 만료 처리)을 가져오고 Ticket에 따라 QR코드를 가져와야 합니다(두 가지 방법: 로컬에 저장하고 Stream으로 돌아가는 것).
다음은 호출 코드입니다.
1 string scene_id = "1";// Id, id, 、
2
3 //
4 System.IO.Stream stream = WeiXinHelper.GetQrCodeImageStream(scene_id);
5
6 //
7 string path = Server.MapPath("~/Document/QrCode/" + scene_id + ".jpg");
8 //
9 WeiXinHelper.SaveQrCodeImage("1", path);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.