-
小程序编译携带参数二维码,获取二维码参数进行缓存,不影响原来逻辑
2021-01-20 12:05:47小程序编译携带参数二维码,获取二维码参数进行缓存,不影响原来逻辑 最近要弄个需求,就是在原来小程序的基础上,加个携带参数的二维码,如果有二维码携带有参数,就走携带参数的逻辑,如果没有携带参数,就走原来...小程序编译携带参数二维码,获取二维码参数进行缓存,不影响原来逻辑
最近要弄个需求,就是在原来小程序的基础上,加个携带参数的二维码,如果有二维码携带有参数,就走携带参数的逻辑,如果没有携带参数,就走原来的逻辑
微信开发工具进行开发,先自定义编译规则
1、在index首页onLoad的时候,判断是否携带有参数,如果有参数则用wx.setStorageSync进行缓存
2、由于要保证原来的逻辑,微信小程序这边没有提供退出小程序触发的事件,只有onHide即切换到后台,隐藏小程序的事件,所以在app.js里面的onHide事件要进行清除缓存处理
3、如果有支付页面,拉起支付的时候,也会触发onHide的事件,这样拉起支付页面就会引起参数酒店编码参数丢失,解决办法是在拉起支付前,把当前的缓存保存在data里面,如果支付完进行跳转的时候携带data里面的参数,并在跳转后的页面重新设置参数缓存,如果取消付款,则需要在当前页面onShow的时候重新进行参数缓存
4、ios和安卓机子,如果在当前页面用户拉起付款,不进行付款操作,安卓机子会重新刷新页面,ios不会,安卓机子重新刷新页面会把酒店携带的二维码丢失,因为拉起付款的时候其实是隐藏了小程序,隐藏小程序的时候已经把二维码携带的酒店编码给清除掉了,导致获取不到正确的酒店编码,所以,订单列表tab页面需要从订单子组件获取当前的data参数再重新进行缓存 -
微信生成带参数二维码以及获取此二维码参数
2018-12-11 22:55:33微信生成带参数二维码以及获取参数 废话不多说,先看一波文档: 生成带参数的二维码 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同...微信生成带参数二维码以及获取参数
废话不多说,先看一波文档:
生成带参数的二维码
为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
目前有2种类型的二维码:
1、临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。用户扫描带场景值二维码时,可能推送以下两种事件:
如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。
获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。
创建二维码ticket
每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket过程。
临时二维码请求说明
http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:json POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者也可以使用以下POST数据创建字符串形式的二维码参数: {"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
永久二维码请求说明
http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:json POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者也可以使用以下POST数据创建字符串形式的二维码参数: {"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
参数说明
参数 说明 expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 action_name 二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值 action_info 二维码详细信息 scene_id 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1–100000) scene_str 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64 返回说明
正确的Json返回结果:
{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm 3sUw==","expire_seconds":60,"url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"}
参数 说明 ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。 expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。 url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片 通过ticket换取二维码
获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。
请求说明
HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET 提醒:TICKET记得进行UrlEncode
返回说明
ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。
HTTP头(示例)如下: Accept-Ranges:bytes Cache-control:max-age=604800 Connection:keep-alive Content-Length:28026 Content-Type:image/jpg Date:Wed, 16 Oct 2013 06:37:10 GMT Expires:Wed, 23 Oct 2013 14:37:10 +0800 Server:nginx/1.4.1
错误情况下(如ticket非法)返回HTTP错误码404。
这里我生成的是临时的二维码,并且是字符串类型的。
//用于获取带参数的二维码 private static String url1 = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="; //换取二维码url private static final String url2 = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="; static Logger logger = LoggerFactory.getLogger(TicketServic.class); /** * http请求方式: POST * URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN * POST数据格式:json * 此方法用于获取带参数的二维码 ticket * str : str 请按照指定格式拼接字符串 -------------------------- 待确定 * @return */ public static String getTicketData(String str){ String token = AccessTokenService.getToken(); if(StringUtils.isEmpty(str) || token==null){ return null; } if(str.length()<64 && str.length()>0){ //临时字符二维码url String url = url1 + token; //二维码参数,以及过期时间 String data = "{\"expire_seconds\": 600000000, \"action_name\": \"QR_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\":"+ str +"}}}"; String result = HttpUtil.sendHttpByPost(url, data); logger.info(" 带参数的二维码 : " + result); if (!StringUtils.isEmpty(result)){ JSONObject jsonObject = JSONObject.parseObject(result); String string = jsonObject.getString("ticket"); logger.info("ticket = " + string); return string; } }else{ try { throw new Exception("scene_str:字符串类型,长度限制为1到64"); } catch (Exception e) { e.printStackTrace(); } } return null; }
然后根据用获取到的 ticket 取换取二维码,也可以通过 返回的json里面的url第三方生成二维码工具生成二维码
/** * 此方法通过 ticket换取二维码 , 返回一个二维码 url * 获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。 * 请求说明 * HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET * @param data * @return */ public static String getTicket(String data) { String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="+data; String result = HttpUtil.sendHttpByGet(url); return result; }
测试
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <script> var url_ticket = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="; var t ="gQF68DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyTFNNR1FRQS1lY2wxZktEU05zYzQAAgTuWg9cAwQAjScA";//获取到的ticket window.location.href = url_ticket + t; </script> </body> </html>
获取参数
工具类
public class HttpUtil { /** * @param url * @param data 生成字符二维码的数据包 * @return * */ public static String sendHttpByPost(String url ,String data ){ try { URL urlPost = new URL(url); URLConnection urlConnection = urlPost.openConnection(); //要发送数据出去,必须设置为可发送状态 urlConnection.setDoOutput(true); //获取输出流 OutputStream outputStream = urlConnection.getOutputStream(); //写出数据 outputStream.write(data.getBytes()); outputStream.flush(); outputStream.close(); //获取输入流 InputStream is = urlConnection.getInputStream(); int size ; byte[] jsonBytes = new byte[1024]; StringBuilder stringBuilder = new StringBuilder(); while ((size=is.read(jsonBytes))!=-1){ stringBuilder.append(new String(jsonBytes,0,size)); } is.close(); return stringBuilder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * @param url * @param data 换取二维码的数据包 * @return * */ public static String sendHttpByGet(String url){ try { URL urlGet = new URL(url); URLConnection urlConnection = urlGet.openConnection(); InputStream is = urlConnection.getInputStream(); int size ; byte[] jsonBytes = new byte[1024]; StringBuilder stringBuilder = new StringBuilder(); while ((size=is.read(jsonBytes))!=-1){ stringBuilder.append(new String(jsonBytes,0,size)); } is.close(); return stringBuilder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } }
扫描带参数二维码事件
用户扫描带场景值二维码时,可能推送以下两种事件:
- 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
- 如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
1. 用户未关注时,进行关注后的事件推送
推送XML数据包示例:
<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[FromUser] ]></FromUserName><CreateTime>123456789</CreateTime><MsgType>< ![CDATA[event] ]></MsgType><Event>< ![CDATA[subscribe] ]></Event><EventKey>< ![CDATA[qrscene_123123] ]></EventKey><Ticket>< ![CDATA[TICKET] ]></Ticket></xml>
参数说明:
参数 描述 ToUserName 开发者微信号 FromUserName 发送方帐号(一个OpenID) CreateTime 消息创建时间 (整型) MsgType 消息类型,event Event 事件类型,subscribe EventKey 事件KEY值,qrscene_为前缀,后面为二维码的参数值 Ticket 二维码的ticket,可用来换取二维码图片 2. 用户已关注时的事件推送
推送XML数据包示例:
<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[FromUser] ]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType>< ![CDATA[event] ]></MsgType> <Event>< ![CDATA[SCAN] ]></Event> <EventKey>< ![CDATA[SCENE_VALUE] ]></EventKey> <Ticket>< ![CDATA[TICKET] ]></Ticket> </xml>
参数说明:
参数 描述 ToUserName 开发者微信号 FromUserName 发送方帐号(一个OpenID) CreateTime 消息创建时间 (整型) MsgType 消息类型,event Event 事件类型,SCAN EventKey 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id Ticket 二维码的ticket,可用来换取二维码图片 获取到数据
扫描后台获取,控制台打印出
//处理消息与事件推送 Map<String, String> xmlData = RequestParamType.getXmlData(request.getInputStream());//此处解析了xmL logger.info(xmlData.toString());//接受到的消息
map
{ Ticket=gQF68DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyTFNNR1FRQS1lY2wxZktEU05zYzQAAgTuWg9cAwQAjScA, CreateTime=1544539262, EventKey=123rt../jku0-7fg10.2544578, Event=SCAN, ToUserName=gh_275f186b7737, FromUserName=oZP6M1W239na_FwhBbVYk9Kwbkoc, MsgType=event }
原xml
<xml> <ToUserName>oZP6M1W239na_FwhBbVYk9Kwbkoc</ToUserName> <FromUserName>gh_275f186b7737</FromUserName> <CreateTime>1544539129</CreateTime> <MsgType>event</MsgType> <Event>SCAN</Event> <EventKey>123rt../jku0-7fg10.2544578</EventKey> <Ticket>gQF68DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyTFNNR1FRQS1lY2wxZktEU05zYzQAAgTuWg9cAwQAjScA</Ticket> </xml>
其中的
EventKey
便是我们生成二维码时候设置的字符串了。Java技术交流群 Q
731690200
可以一起交流学习 -
二维码参数指标,22种二维码介绍
2018-11-05 15:57:33自己总结的二维码识读参数指标, 附22种二维码介绍.Specifications For Popular 2D Bar Codes -
微信如何生成带参二维码以及怎样读取二维码参数
2019-10-24 15:52:16懂开发的朋友直接通过公众号提供的开发文档实现功能,也可以直接使用微号帮平台渠道二维码生成功能,实现公众号二维码参数。 1、渠道二维码生成 微号帮平台生成带参二维码,自动批量打标签分组,精准统计粉丝来源。 ...公众号生成带参二维码,只有服务号才的权限,订阅号没有。懂开发的朋友直接通过公众号提供的开发文档实现功能,也可以直接使用微号帮平台渠道二维码生成功能,实现公众号二维码参数。
1、渠道二维码生成
微号帮平台生成带参二维码,自动批量打标签分组,精准统计粉丝来源。
2、创建渠道二维码渠道名称:星期四统计,扫码关注公众号粉丝会自动设置备注名。
3、二维码粉丝统计通过微号帮平台生成带参二维码关注的粉丝都可以统计到,为粉丝打标签分组或设置备注名都可以。
4、关注粉丝打标签分组或设置备注名通过二维码关注的粉丝打标签分组或设置备注名都与公众号用户管理同步。
5、二维码自定义消息推送粉丝扫码关注公众号自定义弹出消息,可以设置文本信息、单图文、多图文、图片、语音、视频、卡券、小程序。
-
小程序扫描二维码 控制网站登录 获取二维码参数 扫码登录 微信扫码登录
2020-12-02 23:23:19记录一些小程序获取二维码参数 控制网站实现登录 免签约 不用一年交300元 开发流程 电脑打开网站 如142536.vip网站生成一个二维码 然后网页根据值为s=/mqtt/api/log/id/6666轮询获取用户信息 用户用微信扫描这个...记录一些小程序获取二维码参数 控制网站实现登录
免签约 不用一年交300元
开发流程
-
电脑打开网站
如142536.vip
网站生成一个二维码
然后网页根据值为s=/mqtt/api/log/id/6666
轮询获取用户信息 -
用户用微信扫描这个二维码实现登录
二维码连接为
https://142536.vip/tp/public/index.php?s=/mqtt/api/log/id/6666
也可以生成
https://142536.vip/tp/public/index.php?s=xxxx
随意根据需要 -
扫码后小程序获得参数
{q: "https%3A%2F%2F142536.vip%2Ftp%2Fpublic%2Findex.php%3Fs%3D%2Fmqtt%2Fapi%2Flog%2Fid%2F6666", scancode_time: "1606921382"}
解码后为{q: "https://142536.vip/tp/public/index.php?s=/mqtt/api/log/id/6666", scancode_time: "1606921382"}
是不是很熟悉 其中q
的值就是二维码的数据 -
小程序获取到连接后
小程序获取该用户唯一的openid
然后访问连接https://142536.vip/tp/public/index.php?s=/mqtt/api/log/id/6666
带上参数openid
-
网站后台获取到小程序传过来的值
s=/mqtt/api/log/id/6666
和openid
根据唯一值openid
获取网站对应用户信息 如果没有用户信息则为新用户或者用户未绑定openid
的值 这个根据需要是提示用户绑定还是直接注册为新用户 反正就是根据唯一值openid
获取用户信息就对了 -
步骤 1 网页根据
s=/mqtt/api/log/id/6666
轮询
这时候就能返回步骤5获取到的用户信息
到这里就登录完成了
也可以整成充值的 扫码发起付款 付款完成 再传回网站后台
用户使用流程
- 电脑打开网站 看到二维码
- 扫码
- 登录成功
非常流弊有没有
.
.
.
.
.
.
.
….
…
.
..
.
.
…
.
.
.
.
.
.
.
….
…
.
..
.
.
…
.
.
.
.
.
.
.
….
…
.
..
.
.
… -
-
微信小程序 二维码参数
2020-07-02 15:48:27二维码的参数 在线上调试开始没找到方法 在模拟器上可以选择编译方式 选择二维码编译后 就方便调试了 -
二维码参数问题解决
2018-03-13 09:05:12Qrcode生成二维码,做过很多实验,探索...2.根据调整的参数生成原图,这种图是比较清晰的,打印出来都可以很好的被识别。先说说第二种吧:根据测试,1.不设置任何东西时:根据测试 最小的二维码尺寸是45——47:宽... -
二维码参数设置问题
2018-03-14 09:31:35例如这个,因为url的长度问题,所以需要设置不同的值,如何才能设置正确的值,过大或者过小都会出现问题,例如生成空白码,生成的二维码扫不出来,二维码样式难看,可以先设置最后一个参数为0。0是自适应,在设置第... -
微信小程序之扫描普通二维码获取二维码参数
2018-01-18 15:25:12通过在微信内扫描普通二维码打开微信小程序。需要获取普通二维码中的信息。1.onLoad: function (options) { //src = decodeURIComponent(options.q); // src.match(/ id=(S*)&share=1/)[1]; ///console.log(src);... -
微信小程序扫码识别二维码跳转指定页面(获取二维码参数)
2018-11-27 21:58:05最近有个需求,扫码获取在微信中识别二维码直接跳转到指定的打卡圈,下面来介绍下如何实现这个功能。 分享海报的绘制保存教程点击这里 这里是引用 ... -
名片二维码参数
2015-09-24 11:46:37String content="BEGIN:VCARD\n" + "VERSION:3.0\n" + "FN:姓名\n" + "TEL;CELL;VOICE:手机\n" + "TEL;WORK;VOICE:手机\n" + "EMAIL;PREF;INTERNET:邮箱\n" + "URL:网址\n" + "TITLE:职位\n" ... -
微信小程序二维码参数的获取
2019-08-13 11:20:06微信为了方便推广和一些业务逻辑的实现,定义了一套标准的转发二维码中携带参数的函数,而且业务场景分的很详细, 在开发工具中我们可以使用该按钮选择不同的场景以方便调试,我们以单人聊天会中中的小程序消息... -
微信小程序 扫普通链接二维码打开小程序设置及获取二维码参数
2019-09-24 17:49:37和 微信自身的扫一扫 都进入产品详情,假如使用小程序码就很不方便,因为通过小程序的自带的扫描功能扫小程序码,出来的数据无法获取具体参数,此时必须通过扫描普通二维码来实现功能。 扫描普通二维码打开小程序... -
微信小程序扫码识别二维码并且跳转指定页面(获取二维码参数,带参数跳转)
2019-03-05 10:57:12要扫的二维码,通过草料二维码生成的,这个网站挺好的,用起来比较简单方便,可以直接输入文字生成二维码,也可以放入链接生成二维码。 草料二维码:https://cli.im/ index.wxml <view class="... -
phpqrcode生成二维码参数一览
2018-04-08 08:53:02$text,——转换成二维码的文本,必填项 $outfile=false,——生成本地文件名。默认不保存到本地,直接输出 $level=QR_ECLEVEL_L,——质量。默认为最低质量,还有QR_ECLEVEL_M、QR_ECLEVEL_Q、QR_ECLEVEL_H参数值 $... -
thinkphp5 获取带参数公众号二维码 以及如何接收二维码参数 微信公众号开发(一)
2018-08-01 09:48:03// 获取公众号带参数二维码 public function getqrcodeticket($value='') { // @header('Content-type: text/plain;charset=UTF-8'); // header("Access-Control-Allow-Origin: *"); // requ... -
QRcode二维码 参数介绍
2015-09-01 15:49:41// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小 qrcodeHandler.setQrcodeErrorCorrect('M'); qrcodeHandler.setQrcodeEncodeMode('B'); // ... -
小程序接收二维码参数的问题
2019-07-10 17:31:59首先看一下官网:...意思是:在别人通过扫面你的小程序码,并且你的小程序码是带参数的,那么在线上的版本就要加一个此方法进行转码; decodeURIC... -
微信小程序获取二维码参数
2019-04-02 10:17:00var scene = decodeURIComponent(options.scene) 转载于:https://www.cnblogs.com/jyc226/p/10640944.html -
微信小程序生成带参二维码参数的处理
2020-06-10 14:01:29小程序二维码生成官方文档链接 https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html 接口地址:https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN getQCoder: function() {... -
js生成二维码参数设置
2014-05-22 18:05:00jquery qrcode使用方法 $(selector).qrcode({ width: 100, height: 100, color: '#3a3', text: 'http://larsjung.de/qrcode' ... jquery qrcode参数设置 { // render method: `'canv...
-
2021年 系统分析师 系列课
-
C/C++反汇编解密
-
算法(12)--整数反转
-
2021年 系统架构设计师 系列课
-
结合自己的专业谈谈对自然辩证法的理解
-
linux基础入门和项目实战部署系列课程
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
NV3035A datasheet preliminary v0.3.pdf
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
vb6.0实现定时器功能源代码
-
职场生存焦虑—如何做到不可替代.pdf
-
MySQL 四类管理日志(详解及高阶配置)
-
MySQL 高可用工具 DRBD 实战部署详解
-
跨域问题解决
-
Servlet/Tomcat/ Spring 之间的关系
-
Liunx 优化思路与实操步骤
-
家长对我的新春寄语
-
爬动的蠕虫
-
GPS程序c语言,单片机
-
批量添加联系人