码迷,mamicode.com
首页 > 微信 > 详细

微信公众平台开发(2)扫描二维码添加公众账号

时间:2014-08-14 16:40:38      阅读:567      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   文件   数据   

作者做过微信二维码和地理信息的程序,本章介绍一下获取二维码和处理用户扫描二维码的过程。

要想开通生成二维码api必须是认证的服务号,如果没有可以采用公众平台测试账号,地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

登陆后台的界面如图:

bubuko.com,布布扣

 

终于看到了传说中的appID,appsecret。

当微信用户扫描二维码时,实现两个功能:

  1. 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
  2. 如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

其中的场景值就是,二维码携带的一个参数,该参数的类型:

  1. 临时二维码时为32位非0整型,
  2. 永久二维码时最大值为100000(目前参数只支持1--100000)

永久二维码和临时二维码的区别:

      临时二维码只能在一段时间内扫码,这段时间内后台可以接受到扫码事件,超过这段时间后台就不能接收到了,这个功能适用在二维码验证信息的方面。

永久二维码不限时间,但是数量有限,共100000个。

获取永久二维码api官方说明为

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}}}

请求api中首先要获得access_token

http请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

获得access_token就要用到appID、appsecret两个参数。获得access_token的频次是有限制的,因此不要请求一次二维码就申请一次token。可以将access_token存储在session中,需要判断是否过期,过期了再重新申请。php示例代码

 <?php    
   define(‘APPID‘, ‘wxa4e7830fd‘);
define(‘APPSECRET‘,‘f013408d50e0c8d‘);
  @
session_start(); if(isset($_SESSION[‘dotime‘]) && ($_SESSION[‘dotime‘]+7200)>time()) {
    //access_token存储在session中
} else { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $out = curl_exec($ch); $json = json_decode($out,true); curl_close($ch); $_SESSION[‘access_token‘]=$json[‘access_token‘]; $_SESSION[‘dotime‘] = time(); } for($index=1;$index<10;$index++) { $ch = curl_init(); @$obj->action_name = "QR_LIMIT_SCENE"; @$obj->action_info->scene->scene_id =$index; $data_string = json_encode($obj); $ch = curl_init(‘https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=‘.$_SESSION[‘access_token‘]); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string); //curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( ‘Content-Type: application/json‘, ‘Content-Length: ‘ . strlen($data_string)) ); $out = curl_exec($ch); curl_close($ch); $json = json_decode($out,true); $ticket = $json[‘ticket‘]; $ch = curl_init(‘https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=‘.$ticket); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $out = curl_exec($ch); file_put_contents("/opt/lampp/htdocs/barcode/".$index.".jpg", $out); echo $index."jpg<br/>"; } ?>

扫描二维码的,微信后台接受到xml文件,解析xml文件,扫码是EVENT类型的信息。

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$recvMsgType = $postObj->MsgType;
if($recvMsgType==‘event‘)
{
    $recvEvent = $postObj->Event;
    if($recvEvent==‘SCAN‘)
    {
        $scan = $postObj->EventKey;
        //已经关注公众账号
    }
    else if($recvEvent=="subscribe")
    {
        $qrscene = $postObj->EventKey;
        $id = substr($qrscene, 8);
        //扫码关注公众账号
    }
}  

 

微信公众平台开发(2)扫描二维码添加公众账号,布布扣,bubuko.com

微信公众平台开发(2)扫描二维码添加公众账号

标签:style   blog   http   color   os   io   文件   数据   

原文地址:http://www.cnblogs.com/birdskyws/p/3912719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!