微信小程序生成帶參數的二維碼(小程序碼)獨家asp.net的服務端c#完整代碼
- 2020 年 4 月 7 日
- 筆記
一)我先用的小程序端的wx.request去調用API,發現竟然是一個坑!
wx.request({ url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + token, method: "POST", responseType: 'arraybuffer', data: { scene: 111, //這裡填寫url的參數,最大32個可見字符,只支持數字,大小寫英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~ page: 'pages/index/index', //這裡填寫你要跳轉的小程序頁面,前面不能加/哦,必須為發佈後的頁面 width: 1024 //小程序碼的邊長,單位px,範圍[280,1280] }, header: { 'content-type': 'application/json;charset=UTF-8' }, success(res) { var base64 = wx.arrayBufferToBase64(res.data); that.setData({ qrCodeSrc: "data:image/png;base64," + base64 }); } })
這段代碼在開發工具的模擬器中是可以正常顯示的,而且在真機調試中也可以正常顯示。
但是在預覽,體驗版,正式版都無法顯示。
無法顯示的原因是:該請求無響應。
二)沒辦法,只能去asp.net的服務端調用API
int scene = 0; int.TryParse(context.Request.Params["scene"], out scene); string access_token =...; //這裡寫你調用token的方法 if (access_token == "") return "{"errcode":1,"errmsg":"缺少access_token"}"; string postUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + access_token; HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/json;charset=UTF-8"; string options = "{"scene":"" + scene + "","page":"pages/index/index","width":"1024"}"; byte[] payload = Encoding.UTF8.GetBytes(options); request.ContentLength = payload.Length; Stream writer = request.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse(); System.IO.Stream stream = response.GetResponseStream(); List<byte> bytes = new List<byte>(); int temp = stream.ReadByte(); while (temp != -1) { bytes.Add((byte)temp); temp = stream.ReadByte(); } byte[] result = bytes.ToArray(); string base64 = Convert.ToBase64String(result);//將byte[]轉為base64 return "{"errcode":0,"errmsg":"獲取成功","buffer":"" + base64 + ""}";
三)掃碼後小程序端接收參數
onLoad: function (options) { var id = options.id || decodeURIComponent(options.scene); //options.id是頁面url參數,options.scene是掃碼帶入的參數 }
四)後記
至於一)中的坑,百度找到的網友解釋是:
1)request的合法域名中沒有api.weixin.qq.com
2)request的合法域名不能配置api.weixin.qq.com
所以,api.weixin.qq.com可能不能用於小程序端的請求。
對於這個解釋我只能默認了,如有人反駁跪求留言