首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》16.8.2 创建会议门票

关灯直达底部

会议门票是一种很常用的票据。使用微信卡券的会议门票功能,可以为参会者发放电子门票,设置座次,扫码签到及统计到访率等。


  1 class class_wxcard  2 {  3     var $appid = APPID;  4     var $appsecret = APPSECRET;  5   6     // 构造函数,获取Access Token  7     public function __construct($appid = NULL, $appsecret = NULL)  8     {  9         if($appid && $appsecret){ 10             $this->appid = $appid; 11             $this->appsecret = $appsecret; 12         } 13         $res = file_get_contents('token.json'); 14         $result = json_decode($res, true); 15         $this->expires_time = $result["expires_time"]; 16         $this->access_token = $result["access_token"]; 17         if (time > ($this->expires_time + 3600)){ 18             $url = "https:// api.weixin.qq.com/cgi-bin/token?grant_type=client_                credential&appid=".$this->appid."&secret=".$this->appsecret; 19             $res = $this->http_request($url); 20             $result = json_decode($res, true); 21             $this->access_token = $result["access_token"]; 22             $this->expires_time = time; 23             file_put_contents('token.json', '{"access_token": "'.$this->access_                token.'", "expires_time": '.$this->expires_time.'}'); 24         } 25     } 26  27     // 上传图片 28     public function upload_image($file) 29     { 30         if (PHP_OS == "Linux"){        // Linux 31             $data = array("buffer"  => "@".dirname(__FILE__).'/'.$file); 32         }else{                        // WINNT 33             $data = array("buffer"  => "@".dirname(__FILE__).'//'.$file); 34         } 35         $url = "https:// api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$this-            >access_token; 36         $res = $this->http_request($url, $data); 37         return json_decode($res, true); 38     } 39  40     // 创建卡券 41     public function create_card($data) 42     { 43         $url = "https:// api.weixin.qq.com/card/create?access_token=".$this->access_token; 44         $res = $this->http_request($url, $this->array_to_json(array('card'=>$data))); 45         return json_decode($res, true); 46     } 47  48     // 创建二维码接口 49     public function create_card_qrcode($data) 50     { 51         $url = "https:// api.weixin.qq.com/card/qrcode/create?access_token=".$this-            >access_token; 52         $res = $this->http_request($url, json_encode($data)); 53         return json_decode($res, true); 54     } 55      56     // 特殊票类 57     // 更新会议门票 58     public function update_card_meetingticket($data) 59     { 60         $url = "https:// api.weixin.qq.com/card/meetingticket/updateuser?access_            token=".$this->access_token; 61         $res = $this->http_request($url, $this->array_to_json($data)); 62         return json_decode($res, true); 63     } 64      65     // 多级数组转JSON(兼容中文、数字、英文、布尔型) 66     protected function array_to_json($array) 67     { 68         foreach ($array as $k => &$v) { 69             if (is_array($v)){ 70                 foreach ($v as $k1 => &$v1) { 71                     if (is_array($v1)){ 72                         foreach ($v1 as $k2 => &$v2) { 73                             if (is_array($v2)){ 74                                 foreach ($v2 as $k3 => &$v3) { 75                                     if (is_array($v3)){ 76                                         foreach ($v3 as $k4 => &$v4) { 77                                             $v3[$k4] = (is_string($v4))?urlencode                                               ($v4):$v4; 78                                         } 79                                     }else{ 80                                         $v2[$k3] = (is_string($v3))?urlencode                                           ($v3):$v3; 81                                     } 82                                 } 83                             }else{ 84                                 $v1[$k2] = (is_string($v2))?urlencode($v2):$v2; 85                             } 86                         } 87                     }else{ 88                         $v[$k1] = (is_string($v1))?urlencode($v1):$v1; 89                     } 90                 } 91                 // $this->array_to_json($v); 92             }else{ 93                 $array[$k] = (is_string($v))?urlencode($v):$v; 94             } 95         } 96         return urldecode(json_encode($array)); 97     } 98  99     // HTTP请求(支持HTTP/HTTPS,支持GET/POST)100     protected function http_request($url, $data = null)101     {102         $curl = curl_init;103         curl_setopt($curl, CURLOPT_URL, $url);104         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);105         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);106         if (!empty($data)){107             curl_setopt($curl, CURLOPT_POST, 1);108             curl_setopt($curl, CURLOPT_POSTFIELDS, $data);109         }110         curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);111         $output = curl_exec($curl);112         curl_close($curl);113         return $output;114     }115 } 

创建会议门票的代码如下。


 1 // 创建会议/演出门票 2 $data = array('card_type' => "MEETING_TICKET", 3               'meeting_ticket' => array('base_info' => array('logo_url' => "http://                 mmbiz.qpic.cn/mmbiz/K4LBh6RUO0qAa2sbY1EyJGDZ0eCetML4quMDRsiczNX9                 8UPE6ryGM7ynjWCX1kibM5iaOLV5ibXHRhs8kdNoAthSjw/0", 4                                   'code_type' => "CODE_TYPE_BARCODE", 5                                   'brand_name' => "方倍票务公司", 6                                   'title' => "方倍会议门票", 7                                   'color' => "Color020", 8                                   'notice' => "使用时向检票员出示此券", 9                                   'description' => "请务必准时入场",10                                   'sku' => array('quantity' => 10000),11                                   'date_info' => array('type' => 1,12                                            'begin_timestamp' => time,13                                            'end_timestamp' => time + 2 * 86400),1415                             ),16                 'meeting_detail' => "地点:水立方",17                 'map_url' => "http:// www.baidu.com/"18             ),19     );20 $result = $weixin->create_card($data);  

生成卡券ID以后,使用该ID生成二维码进行投放,其代码如下。


 1 // 创建二维码进行投放 2 $data = array('action_name' => "QR_CARD", 3               // 'expire_seconds' => 1800, 4               'action_info' => array('card' => array('card_id' => "piPuduNg0bM6                 Q5hB8rrcK3OXavSE", 5                              // 'code' => "198374613512", 6                              // 'openid' => "oFS7Fjl0WsZ9AMZqrI80nbIq8xrA", 7                              'is_unique_code' => false, 8                              'outer_id' => 100), 910                         ),11               );12 $result = $weixin->create_card_qrcode($data);  

当用户领取门票以后,为其更新座次信息,代码如下。


1 // 更新会议门票2 $data = array(3               'code' => "019538767119",4               'card_id' => "piPuduNg0bM6Q5hB8rrcK3OXavSE",5               'zone' => "C区",6               'entrance' => "东北门",7               'seat_number' => "2排15号",8              );9 $result = $weixin->update_card_meetingticket($data);  

最终用户领取到的门票及更新后的门票信息如图16-11所示。

图16-11 微信门票