2017-03-10 09:58:12 zz110731 阅读数 16233
  • 微信公众号生成带参数二维码一学就会Java版

    为了满足用户渠道推广分析和用户帐号绑定等场景的需要,也就是推广和微商城分销的一个知识点,当你需要知道你的这个客户是谁推广的时候,当你为你的商城设计了分销的模式的时候,你就会发现这个知识点很好用

    3673 人正在学习 去看看 朱祚华

title: 【微信小程序】二维码生成与识别器
type: categories
date: 2017-03-10 09:34:00
categories: 微信小程序

tags: [二维码生成,二维码识别]

一个二维码生成与识别的很简单的微信小程序,主要是为了走一下小程序开发的整个流程。7号上午提交的审核,8号出结果,审核速度还可以,发布需要管理员手动发布。唯一令人烦的地方是,开发者的权限太低,除了编码,其他的操作都需要管理员扫描相应操作的二维码(前前后后将近10次)。

二维码生成与识别器

项目源码:https://github.com/zhangzhaopds/QrPay.git

效果图:

安装地址

2014-09-29 22:25:54 zdhjiony 阅读数 151
  • 微信公众号生成带参数二维码一学就会Java版

    为了满足用户渠道推广分析和用户帐号绑定等场景的需要,也就是推广和微商城分销的一个知识点,当你需要知道你的这个客户是谁推广的时候,当你为你的商城设计了分销的模式的时候,你就会发现这个知识点很好用

    3673 人正在学习 去看看 朱祚华

最近开发完成了一个微信推广渠道管理—带参数二维码管理平台,即:微信二维码来源统计分析、微信带参数二维码统计分析、微信渠道二维码统计分析、自动生成微信二维码统计分析、微信海报二维码统计分析管理平台(地推派传单提供有效渠道分析)。解决了微信公众号地推派单推广渠道跟踪的问题,可以实时进行监控派单推广渠道的扫码微信的关注,取消,新增,净增等相关数据,实时进行数据分析,为提供推广决策有了强有力的帮助和分析,同时对派单人员进行有效的考核,比如每个派单人员现场扫码的关注用户数情况,进行有效的跟踪,为奖惩提供有效的数据。我觉得这个功能倒很实用,大家试想一下下面这几种情形,你辛辛苦苦做了一个送餐的服务号,现在你准备去做推广了,现在找了3个地推的人员去扫楼,发传单,这还不够,你又找了本地的百度营销人员,也是付费推广。可是你心里肯定犯嘀咕,这3个地推人员谁干的好,谁干的差?又或者是谁又偷懒了,谁又直接把传单扔垃圾桶了?这个百度的推广效果又怎么样?现在这个带参数的二维码就是来帮你解决这个问题的。用它可以帮你发现好的推广方法和效率高的推广人员,然后你可以将营销资源资源转移到这些好的推广渠道,好的推广方法,好的推广人员身上。下面进行系统管理平台的部分截图。    

 一、列举所有渠道所分配的带参数二维码:


 
 

二、下图为每个渠道列出每天的微信数据关注,取消数据情况。


 
 

三、下图是统计各个渠道的每天的数据及汇总。


   

最近系统也改版升级了,提供部分的功能截图看看:

1、设置二维码场景类型,比如把二维码印在传单里,印在名片里,印在海报里等等,我们就可以把二维码进行场景类型归类,方便统计不同场景下的推广情况。



 

 

2、可以查看每个二维码的数据情况,也可以点击查看微信数据查看每天的数据。


 

3、统计每天的用户新增情况。

 

主要的功能是这些,因为我做了推广微信二维码的统计,这个在很多微信公众平台里都很急需,而且目前好像很缺失这方面的详细统计;还有最近有不少客户问到,原来已在使用的微信平台,如何对接咱们这个二维码统计呢,为了方便融合第三方微信平台,我特意做了个通用接口,只需调用该接口,即可使用二维码统计。详细接口请加微信联系我: 扫描下面二维码或输入 jionywx 加我微信,微信验证是:javaeye



 
 

2017-02-17 14:35:37 sinat_28505133 阅读数 2030
  • 微信公众号生成带参数二维码一学就会Java版

    为了满足用户渠道推广分析和用户帐号绑定等场景的需要,也就是推广和微商城分销的一个知识点,当你需要知道你的这个客户是谁推广的时候,当你为你的商城设计了分销的模式的时候,你就会发现这个知识点很好用

    3673 人正在学习 去看看 朱祚华

从微信开发者文档我们可以了解到,我们可以生成临时二维码或者永久二维码
获取微信公众号的二维码总共分为三步

  • 获取access_token
  • 获取ticket
  • 根据ticket换取该公众账号的二维码

1.获取access_oken

// 获取token接口(GET)
public final static String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";


/**
 * 获取接口访问凭证
 * @param appid 凭证
 * @param appsecret 密钥
 */
public static AccessToken getToken(String appid, String appsecret) {
AccessToken token = null;
String requestUrl = WxConstants.TOKEN_URL.replace("APPID", appid)
.replace("APPSECRET", appsecret);
// 发起GET请求获取凭证
JSONObject jsonObject = httpsRequestJson(requestUrl, "GET", null);


if (null != jsonObject) {
try {
token = new AccessToken();
token.setAccess_token(jsonObject.getString("access_token"));
token.setExpires_in(jsonObject.getInt("expires_in"));
} catch (JSONException e) {
token = null;
// 获取token失败
logger.error("获取token失败 errcode:{} errmsg:{}",
jsonObject.getInt("errcode"),
jsonObject.getString("errmsg"));
}
}
return token;
}


2.获取ticket
/** 
     * 创建临时带参数二维码 
     * @param accessToken 
     * @expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 
     * @param sceneId  场景Id 
     * @return 
     */  
    public static WeChatQRCode createTemporaryQRCode(String accessToken, String expireSeconds ,int sceneId) {  
        WeChatQRCode weChatQRCode = null;  
        String requestUrl = WxConstants.QR_CODE_URL.replace("TOKEN", accessToken);  
        //需要提交的JSON数据  
        String outputStr = "{\"expire_seconds\": %d,\"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\":%d}}}";  
        //创建临时带参数二维码  
        JSONObject jsonObject = httpRequest(requestUrl, "POST", String.format(outputStr, expireSeconds, sceneId));  
        if(null!=jsonObject){  
            try {  
                weChatQRCode = new WeChatQRCode();  
                weChatQRCode.setTicket(jsonObject.getString("ticket"));  
                weChatQRCode.setExpire_seconds(jsonObject.getInt("expire_seconds"));  
                logger.info("创建临时带参二维码成功,ticket="+weChatQRCode.getTicket()+",expire_seconds="+weChatQRCode.getExpire_seconds());  
            } catch (Exception e) {  
                weChatQRCode = null;  
                String errorMsg = jsonObject.getString("errmsg");  
                logger.info("创建临时带参二维码失败,错误码是="+errorMsg);  
            }  
        }     
        return weChatQRCode;  
    }  
      
    /** 
     * 创建永久二维码 
     * @param accessToken 
     * @param sceneId  场景Id 
     * @param sceneStr  场景IdsceneStr 
     * @return 
     */  
    //数字ID用这个{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}  
    //或者也可以使用以下POST数据创建字符串形式的二维码参数:  
    //字符ID用这个{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "hfrunffgha"}}}  
    public static String createPermanentQRCode(String accessToken, String sceneStr) {  
        String ticket = null;  
        String requestUrl = WxConstants.QR_CODE_URL.replace("TOKEN", accessToken);  
        String outputStr = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\":{\"scene\": {\"scene_str\":%s}}}";  
        JSONObject jsonObject = httpRequest(requestUrl, "POST", String.format(outputStr, sceneStr));  
        if(null!=jsonObject){             
            try {  
                ticket = jsonObject.getString("ticket");  
                logger.info("创建永久带参二维码成功,ticket="+ticket);  
            } catch (Exception e) {  
                String errorCode = jsonObject.getString("errcode");  
                logger.info("创建永久带参二维码失败,错误码是="+errorCode);  
                String errorMsg = jsonObject.getString("errmsg");  
                logger.info("创建永久带参二维码失败,错误信息是="+errorMsg);  
            }  
        }     
        return ticket;  
    }


3.用tiket换取二维码 https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKE

(替换获取到的ticket,放入到浏览器打开即可,若想下载到本地,请参考http://blog.csdn.net/sinat_28505133/article/details/54669167)



2015-03-18 19:23:00 xiongkai327 阅读数 1301
  • 微信公众号生成带参数二维码一学就会Java版

    为了满足用户渠道推广分析和用户帐号绑定等场景的需要,也就是推广和微商城分销的一个知识点,当你需要知道你的这个客户是谁推广的时候,当你为你的商城设计了分销的模式的时候,你就会发现这个知识点很好用

    3673 人正在学习 去看看 朱祚华

微信公众平台开发 批量生成及下载带参二维码图片

最近在做微信二次开发时经常会使用到场景二维码,所以就把相关的批量生成并保存二维码图片的代码整理了一下。
文章的主要内容:

  1. 提供批量生成及下载二维码图片的php代码(对accessToken做了本地保存处理,不会出现请求次数饱和的现象)
  2. 制作二维码过程中需要注意的小细节

在微信公众平台上如何使用高级接口开发生成带参数二维码的功能,网上有很多相关教程。可以参考微信官方文档_生成带参数的二维码 和方倍老师的博客 微信公众平台开发(83) 生成带参数二维码 来了解制作的原理和流程。
获取ticket流程图

Talk is cheap , show you the code now:

  1. 执行方法:
    /**
     * 参数说明:
     * type:二维码类型  1:永久 2:临时
     * from:二维码所带参数开始值
     * to :二维码所带参数结束值
     */
    public function creat_qrcode_image() {
        $scene_type = $_REQUEST ['type'];
        switch($scene_type)
        {
            case '1': //永久
                $data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
                break;
            case '2': //临时
                $data = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
                break;
            default:
                $data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
                break;
        }
        $access_token = $this->getAccessToken();
        for($scene_id = 101; $scene_id <= 120; $scene_id ++) {
            $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" . $access_token;
            $res = $this->https_request ( $url, $data );
            $result = json_decode ( $res, true );
            $ret [$scene_id] = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode ( $result ["ticket"] );
            $imageInfo = $this->downloadQrImage ( $ret [$scene_id] );
            // 写入,生成图片
            $filename = ROOT . "/Files/Wechat/qrcode_".$scene_id.".jpg";
            $local_file = fopen ( $filename, 'w' );
            if (false !== $local_file) {
                if (false !== fwrite ( $local_file, $imageInfo ["body"] )) {
                    fclose ( $local_file );
                }
            }
        }
    }

2 . 获取accessToken (需填入你的appId 和 appSecret)

public function getAccessToken() {
        $appId='等你来填';
        $appSecret='等你来填';
        $filename='access_token.json';
        $data = json_decode(file_get_contents(ROOT ."/Files/Wechat/".$filename));
        if ($data->expire_time < time()) {
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
            $res = json_decode($this->https_request($url));
            $access_token = $res->access_token;
            if ($access_token) {
                $data->expire_time = time() + 7000;
                $data->access_token = $access_token;
                $fp = fopen(ROOT ."/Files/Wechat/".$filename, "w");
                fwrite($fp, json_encode($data));
                fclose($fp);
            }
        } else {
            $access_token = $data->access_token;
        }
        return $access_token;
    }

使用说明:

1.在getAccessToken()方法中填入你的appId 和 appSecret。

2.执行creat_qrcode_image()方法。

eg. 地址栏输入 http://www.abcd.com/creat_qrcode_image?type=1&from=100&to=120
二维码图片会自动保存在你设置的目录下。

    值得注意的是,scene_id不能改成其他键名,如m_id等,否则生成的二维码被扫描后,得到$object->EventKey就是qrscene_0
    scene_id只能为**数字**,出现字母则结果为0
    "scene_id":0001  ,得到的结果为qrscene_1

这里提供一个实用的封装过的echo()方法:

function e(){
        echo "<pre>";
        $objs = func_get_args();
        foreach($objs as $obj) {print_r($obj);echo "<br>";}
        echo "</pre>";
    }

function _e(){
    echo "<pre>";
    $objs = func_get_args();
    foreach($objs as $obj) {print_r($obj);echo "<br>";}
    echo "</pre>";
    exit;
}

使用方法:e ($ret); _e($ret);
这两个对象输出方法可以自动按格式输出string、array、object等类型的对象。
e()方法只做打印输出操作。_e()方法的在打印输出操作后停止执行该方法。


2017-08-25 15:58:24 awei720 阅读数 5739
  • 微信公众号生成带参数二维码一学就会Java版

    为了满足用户渠道推广分析和用户帐号绑定等场景的需要,也就是推广和微商城分销的一个知识点,当你需要知道你的这个客户是谁推广的时候,当你为你的商城设计了分销的模式的时候,你就会发现这个知识点很好用

    3673 人正在学习 去看看 朱祚华
近在开发一款微信小程序,有一个功能需要在微信前端生成多个二维码,

我这里要讲一下我使用的插件,以及他们在项目中的应用。

基于canvas绘图制作二维码:https://github.com/demi520/wxapp-qrcode

首先,创建一个二维码样式代码


  
    
  
  
然后动态生成二维码的js文件

  
    
  
  
let QR = require('../../utils/qrcode.js') Page({ /** * 页面的初始数据 */ data: { placeholder:'http://www.baidu.com' }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let size=this.setCanvasSize(); let url=this.data.placeholder; this.createQRcode(url,'mycanvas',size.w,size.h) }, createQRcode(url,canvasId,canvasWidth,canvasHeight){ QR.qrApi.draw(url, canvasId, canvasWidth, canvasHeight) }, setCanvasSize(){ let size={}; let res=wx.getSystemInfoSync(); // console.log(res) let scale=686/750; let width=res.windowWidth*scale; let height=width; size.w=width; size.h=height; return size; }, formSubmit(e){ console.log(e.detail.value.url); console.log(this.data.placeholder); let url=e.detail.value.url||this.data.placeholder; wx.showToast({ title: '生成中', icon:'loading', duration:2000 }) let that=this; let timer=setTimeout(function(){ let size = that.setCanvasSize(); // console.log(url); that.createQRcode(url, 'mycanvas', size.w, size.h) wx.hideToast(timer); },2000) } })

没有更多推荐了,返回首页