zoukankan      html  css  js  c++  java
  • 微信小程序生成带参数的二维码(小程序码)独家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', //这里填写你要跳转的小程序页面,前面不能加/哦,必须为发布后的页面
               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可能不能用于小程序端的请求。

      对于这个解释我只能默认了,如有人反驳跪求留言

     

  • 相关阅读:
    第89题:格雷编码
    第88题:合并两个有序数组
    第86题:分隔链表
    第83题:删除排序链表中的重复元素
    第82题:删除排序链表中的重复元素II
    第81题:搜索旋转排序数组II
    redis笔记---不定时更新
    关于银行股
    开博客
    group by
  • 原文地址:https://www.cnblogs.com/kandyvip/p/12657071.html
Copyright © 2011-2022 走看看