自认为小程序开发基础篇已经“扫”完了,结果今天尝试做小程序带参数二维码功能时尴尬了,瞬间鄙视自己的技术水平。本文虽说探讨的是微信小程序带参数二维码的问题,但更多解决的是HTTP请 ...
自认为小程序开发基础篇已经“扫”完了,结果今天尝试做小程序带参数二维码功能时尴尬了,瞬间鄙视自己的技术水平。本文虽说探讨的是微信小程序带参数二维码的问题,但更多解决的是HTTP请求中Post请求状态下的传参问题。适合不限于小程序开发的java、php、android、ios等初级开发者,高手请绕道,感谢开发者@鲍红星对我的提问。
本文大概
1888
字
读完共需
6
分钟
本节目标:完成带参数的小程序二维码。实现步骤如下:
一、打开API:
二、根据文档提示,跳转到获取access_token界面【https://mp.weixin.qq.com/wiki?id=mp1421140183】关于access_token简单来说是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效;他是对企业appid和appsecrect的一种保护,通常交由企业后端带上appid和appsecrect两个参数去请求微信后台得到token,接下来token将成为企业后端、前端、微信后端交互的唯一凭证。获取方法api提示比较清晰:
我是在web开发工具自己去请求的token,也很正常的获取到了。接下来就是比较牛(Dan)逼(Teng)的地方了。
三、根据token和小程序api的提示,获得带参数的二维码,代码如下:
但是,结果让我失望了
反复报错类型为token无效,参数错误之类的信息【微信开发错误请求码链接:https://mp.weixin.qq.com/wiki/17/fa4e1434e57290788bde25603fa2fcbd.html】由于api没有说明是否为get或者post,于是乎我换成get请求,结果依然是token无效。
各种检验参数和请求方法尝试,都无果......
最后大胆尝试了一个从来没有写过的post写法,请看下图:
很荣幸,这种写法我成功请求到了带参数的二维码了!但是有很多不解!
Ok,微信小程序得到带参数的二维码应该用post请求,access_token必须直接跟在url后面【貌似JSSDK开发也是这么个情况】。这是本文的重要结论
问题是解决了,疑问依然存在——对HTTP的get和post请求有误解
之前的认识:
GET方法:使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,如:http://haolong?id=12&name="张三"
特点:GET请求能够被缓存;GET请求会保存在浏览器的浏览记录中;以GET请求的URL能够保存为浏览器书签;GET请求有长度限制;GET请求主要用以获取数据
POST方法:使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器:data{name1=value1&name2=value2},然后把整个data传值
特点:POST请求不能被缓存下来;POST请求不会保存在浏览器浏览记录中;以POST请求的URL无法保存为浏览器书签;POST请求没有长度限制
重点是:习惯性地在get请求状态下参数是拼接到url后面的,而post请求状态下参数是先由body封装,然后传到后台。
而上图中post请求状态下,既有url后面直接拼接字段,也有data组里面封装,这是为什么呢?
感谢@花生和@三胖的解释
不是所有的Post请求参数就一定会放在body体类,看后台代码怎么处理,后台要这样写规定了是POST 请求且参数必须封装在body体内,如下图
而下方:虽然规定了是POST请求但是他获取参数是通过url 传参的
get或post情况下,是否在url后面直接传参是非必须的,是根据后台开发人员或需求限制决定的。一般POST 请求都是去后台修改数据的 ,既然规定了POST 请求最好就将参数放在body体里相对安全;get一般都是查询数据;用url 穿参数的比较多因为即使暴露了参数也就是被查询;不会被修改数据。
在小程序带参数二维码这块是微信后台开发做过此种限制,所以如果按照之前的套路将token放到data组中的话,微信后台是判断你没有传token参数,二维码也就请求不到了。由于API也未明确指出,特写此文分享给大家。
参数携带可以在path字段中,与get写法类似传参:pages/index?query=1
pages/index:页面路径
query=1:参数的键值对,多个参数用&隔开
该字段的值:1可以在指定页面的onload方法中,用options参数获取:this.setData({query:options.query})
请求成功回来的带参数二维码是二进制buffer格式,需要提交给后端处理转换成图片,最后返回给前端保存。
另外:通过该接口,仅能生成已发布的小程序的二维码,并不代表未发布的小程序不能生成带参数二维码;未发布小程序可以生成开发版的带参二维码。 带参二维码只有 100000 个,请谨慎调用,POST参数需要转成 json 字符串,不支持 form 表单提交。
辛苦劳作一番,却发现已经有现成的第三方工具可以便捷得到带参数的小程序二维码,比如:HotApp、草料、阿拉丁等,但是需要输入appid和appsecrect等敏感信息,酌情使用。