当前位置:主页 > 微信开发 > 微信服务号 >

保存扫描二维码后的用户信息到数据库的微信开发

栏目:微信服务号 来源: 微信小程序开发网 阅读: 2016-12-07
  上一节课“生成带参数永久二维码微信开发教程”我们已经生成了两个二维码,一个是场景值是电视,一个场景值是杂志,本教程将详细讲解当用户扫描二维码后,我们通过微信服务器发送给我们的xml数据,把用户的信息包括openid、scene_id和信息id三个字段。创建数据库表名为qrcode_users,创建的代码如下所示:

CREATE TABLE IF NOT EXISTS qrcode_users (
id int UNSIGNED PRIMARY KEY auto_increment,
openid varchar(255) NOT NULL DEFAULT '',
scene_id varchar(64) NOT NULL DEFAULT ''
) ENGINE = MyISAM DEFAULT CHARSET = utf8;


  因为创建数据库表比较简单这里就不一一演示,请自己创建,我已经创建好。


程序开发

  既然当用户扫描后,用户的信息由腾讯服务器通过xml发送过来,我们就可以通过wx_sample.php里面已经帮我们写好的示例的对象$$postObj来获取发送过来的openid和scene_id。

  openid是:$$fromUsername = $$postObj->FromUserName;

  scene_id是:$$EventKey = $$postObj->EventKey;

  scene_id就是我们在生成二维码时设置的场景值,但是要注意这里获取到的$$EventKey是形如qrcode_123123这样的值,也就是多了一个前缀qrcode_。

  还要注意扫描二维码的用户可能是第一次扫描,也可能是已经关注您的微信公众号是第二次、第三次扫描,这时的scene_id的值也不一样,如果是第一次关注微信公众号那么$$EventKey的值开如:qrcode_123123;如果是已经关注了微信公众号,而在再次扫描我们生成的二维码,此时的$$EventKey的值为是一个32位无符号整数,即创建二维码时的二维码scene_id。

直接上代码:

switch($$postObj->MsgType)
{
case 'event':
    if($$postObj->Event == 'subscribe')
    {
        
        $$contentStr = "hello,您是第一次来到微信连,欢迎您!";
        $$resultStr = sprintf($$tmp_arr['text'], $$fromUsername, $$toUsername, $$time, $$contentStr);
        echo $$resultStr;

        $$connect = mysql_connect('localhost', 'root', 'root');
        mysql_select_db('wxdb', $$connect);
        mysql_query('SET NAMES UTF8');
        $$EventKey = $$postObj->EventKey;
        $$sql = "INSERT INTO `qrcode_users` (`id`, `openid`, `scene_id`) VALUES(NULL, '{$$fromUsername}', '{$$EventKey}')";
        mysql_query($$sql);
    }
    break;
}


  把这段代码放到wx_sample.php里面的条件if (!empty($$postStr))里面即可。

  请注意我上面的代码顺序,当是第一次关注时则回复一条欢迎内容,然后,再把数据插入到数据库表里面,这里为什么要把插入数据库表的代码写在欢迎信息后面?写到前面不可以吗?当然,可以但是还是最好写到后面,因为,腾讯服务器在响应我们的服务器时会有5秒响应时间。

  试想一下如果5秒时间过去了还没有插入数据库表的话,程序会再次去响应一次如果还没有的话,再次响应一次,直接3次结束后如果还没有响应的话,用户扫描了二维码结果什么提示也没有,是不是让用户感觉是不是哪里出错了,所以,上面这样写当用户扫描后立马回复一个消息,至少让用户感觉到自己的操作是正确的,否则,可能让用户觉得是不是自己哪里操作有问题,对用户的体验不好。


扫描测试

  我扫描一下看看数据库效果,如下图所示:


  这样扫描后用户的重要信息就保存到表里面了,企业只要查询数据库表就可以把数据查询出来,然后,进行分析用户信息看看哪个渠道来的用户最多,花同样的钱如果从电视扫描来的用户最多,那么,就可以加大电视广告投放力度,如果是杂志那就加大杂志投放力度,这样可以有的放矢的控制企业成本,使成本效益最大化。

  我们可以开发一个文件tj_users.php,这个文件的作用是专门用来查询数据库表里面的用户信息,然后,把信息通过表格列出来供分析人员分析之用,文件tj_users.php的代码如下所示:

<?php
    header('content-type:text/html;charset=utf-8');
    //连接数据库
    $$connect = mysql_connect('localhost', 'root', 'root');
    mysql_select_db('wxdb', $$connect);
    mysql_query('SET NAMES UTF8');
    $$sql = "SELECT * FROM `qrcode_users`";
    $$res = mysql_query($$sql);
    echo "<h1>微信用户关注来源一览表</h1><table><tr><td>id</td><td>openid</td><td>关注来源</td></tr>";
    while($$row = mysql_fetch_assoc($$res))
    {
        $$from_place = '';
        if($$row['scene_id'] == 'qrscene_10001')
        {
            $$from_place = '电视';
        }else if($$row['scene_id'] == 'qrscene_10002')
        {
            $$from_place = '杂志';
        }else if($$row['scene_id'] == 'qrscene_10003')
        {
            $$from_place = '其它';
        }
        echo "<tr><td>{$$row['id']}</td><td>{$$row['openid']}</td><td>{$$from_place}</td></tr>";
    }
    echo "</table>";


  请注意:请换上自己的数据库服务器、服务器用户名、密码等信息,请不要直接拿来就用,那样肯定是不行的,因为,你我的数据库服务器完全是不一样的,既使是在同一台服务器上面密码也是不同的,所以,必须换成您自己的。