微信小程序生成帶參數的二維碼(小程序碼)獨家asp.net的服務端c#完整代碼


一)我先用的小程序端的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可能不能用於小程序端的請求。

  對於這個解釋我只能默認了,如有人反駁跪求留言

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM