laravel框架 封装的卡卷管理代码
来源:互联网 发布:python 期货交易接口 编辑:程序博客网 时间:2024/05/22 12:50
<?php/** * Created by PhpStorm. * User: DreaMedia * Date: 2017/9/7 * Time: 14:18 */namespace App\Http\Controllers\Api;use Illuminate\Http\Request;use Illuminate\Support\Facades\DB;class CouponController extends CommonController{ protected $card_type_text = [ 'GROUPON' => '<button class="btn btn-primary btn-xs">团购卷</button>', 'DISCOUNT' => '<button class="btn btn-danger btn-xs">折扣券</button>', 'GIFT' => '<button class="btn btn-info btn-xs">礼品券</button>', 'CASH' => '<button class="btn btn-warning btn-xs">代金卷</button>', 'GENERAL_COUPON' => '<button class="btn btn-default btn-xs">通用卷</button>', 'MEMBER_CARD' => '<button class="btn btn-success btn-xs">会员卡</button>', 'SCENIC_TICKET' => '<button class="btn btn-default btn-xs">景点门票</button>', 'MOVIE_TICKET' => '<button class="btn btn-default btn-xs">电影卷</button>', 'BOARDING_PASS' => '<button class="btn btn-default btn-xs">飞机票</button>', 'MEETING_TICKET' => '<button class="btn btn-default btn-xs">会议门票</button>', 'BUS_TICKET' => '<button class="btn btn-default btn-xs">汽车票</button>', 'EXPERIENCE' => '<button class="btn btn-default btn-xs">体验卷</button>' ]; protected $status_text = [ 'CARD_STATUS_NOT_VERIFY' => '<span class="label label-default label-xs">待审核</span>', 'CARD_STATUS_VERIFY_FAIL' => '<span class="label label-danger label-xs">审核失败</span>', 'CARD_STATUS_VERIFY_OK' => '<span class="label label-success label-xs">审核通过</span>', 'CARD_STATUS_DELETE' => '<span class="label label-warning label-xs">商户删除</span>', 'CARD_STATUS_DISPATCH' => '<span class="label label-default label-xs">公众平台投放的卡券</span>' ]; protected $user_card_status_text = [ 'NORMAL' => '正常', 'CONSUMED' => '已核销', 'EXPIRE' => '已过期', 'GIFTING' => '转赠中', 'GIFT_TIMEOUT' => '转赠超时', 'DELETE' => '已删除', 'UNAVAILABLE' => '已失效' ]; public function index(Request $data) { print_r($this->getApiTicket()); return view('index/index'); } public function createCoupon($data) { $this->getAccessToken(); $url = "https://api.weixin.qq.com/card/create?access_token=".session('token.access_token'); $card = json_decode($this->http_post($url,json_encode($data,JSON_UNESCAPED_UNICODE)),1); //判断是否成功获取 if($card['errcode'] == 'ok') { return [ 'card_id' => $card['card_id'], 'status' => 200 ]; }else{ return [ 'status' => 400, 'errmsg' => '创建卡卷失败,原因:'.$card['errmsg'] ]; } } //获取素材列表 public function getMaterial($type='image',$offset=0,$count=20) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token='.session('token.access_token'); $data = json_encode([ 'type' => $type, 'offset' => $offset, 'count' => $count ]); $res = json_decode($this->http_post($url,$data),1); if(empty($res['errmsg'])) { return [ 'status' => 200, 'material' => $res ]; }else{ return [ 'status' => 400, 'errmsg' => '获取素材失败,原因:'.$res['errmsg'] ]; } } //获取卡卷领取二维码 /** * @param $card_id 卡卷id值 * @param bool $code 自定义code码 * @param bool $openid 限制用户openid * @param bool $unique 二维码一次性 * @param unsigned int $expire_seconds 二维码有效时间 范围:60 ~ 1800 默认365天 * @return array */ public function getCardQrcode($card_id,$code=false,$openid=false,$unique=false,$expire_seconds='') { $this->getAccessToken(); $data = [ 'action_name' => 'QR_CARD', 'expire_seconds' => $expire_seconds,//二维码有效时间 'action_info' =>[ 'card' =>[ 'card_id' => $card_id , 'code' => $code,//自定义code 'openid' => $openid,//用户制定openid 'is_unique_code' => $unique,//扫描一次性是否开启 'outer_str' => '',//场景值字符串 'outer_id' => '',//场景值id ], ], ]; $url = 'https://api.weixin.qq.com/card/qrcode/create?access_token='.session('token.access_token'); $res = json_decode($this->http_post($url,json_encode($data)),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200, 'ticket' => $res['ticket'], 'expire_seconds' => $res['expire_seconds'], 'url' => $res['url'], 'show_qrcode_url' => $res['show_qrcode_url'] ]; }else{ return [ 'status' => 400, 'errmsg' => $res['errmsg'] ]; } } //上传图片素材 传入name为image的file文件 /** * @param Request $data * @return bool */ public function uploadImg($file) { $this->getAccessToken(); $api = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".session('token.access_token')."&type=image"; $res = json_decode($this->http_post_media($api,$file),1); unlink($file); if(empty($res['errcode'])) { return [ 'status' => 200, 'url' => $res['url'] ]; }else{ return [ 'status' => 400, 'errmsg' => $res['errmsg'] ]; } } //核销卡卷 /** * @param $code //卡卷码 * @param $card_id //卡卷id * @return array */ public function chargeOffStatus($code,$card_id) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/code/get?access_token='.session('token.access_token'); $data = json_encode([ 'code' => $code, 'card_id' => $card_id, 'check_consume' => false ]); $res = json_decode($this->http_post($url,$data),1); //检查卡卷是否可核销 if($res['errcode']==0) { if($res['can_consume'] == false) { return [ 'status' => 400, 'msg' => '无法使用卡卷,原因:'.$this->user_card_status_text[$res['user_card_status']] ]; }else{ $url = 'https://api.weixin.qq.com/card/code/consume?access_token='.session('token.access_token'); $res = json_decode($this->http_post($url,json_encode([ 'code'=>$code ])),1); if($res['errmsg'] == 'ok') { return [ 'status' =>200 ]; } } }else{ return [ 'status' => 401, 'errmsg' => '无法使用的卡卷,卡卷编码错误,请检查卡卷所属商户' ]; } } //获取卡卷货架 /** * @param $banner 页面banner * @param $title 页面标题 * @param array $card_list 卡卷数据,需要传入卡卷id和缩略图 ['card_id'=>'','thumb_url'=>''] * @param bool $can_share * @param string $scene * @return array */ public function ticketShelf($banner,$title,$card_list,$can_share=true,$scene='SCENE_NEAR_BY') { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/landingpage/create?access_token='.session('token.access_token'); $data = json_encode([ 'banner' => $banner, 'page_title' => $title, 'can_share' => $can_share , 'scene' => $scene, 'card_list' =>$card_list ]); $res = json_decode($this->http_post($url,$data),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200, 'url' => $res['url'], 'page_id' => $res['page_id'] ]; }else{ return [ 'status' => 400, 'errmsg' => '获取货架接口出错,原因:',$res['errmsg'] ]; } } //获取卡卷列表 /** * @param int $offset 偏移量 * @param int $count 列表总数,最多50 * @param string $status CARD_STATUS_NOT_VERIFY 待审核 CARD_STATUS_VERIFY_FAIL 审核失败 CARD_STATUS_VERIFY_OK 通过审核 CARD_STATUS_DELETE 卡券被商户删除 CARD_STATUS_DISPATCH 在公众平台投放过的卡券 * @return array */ public function getTicketList($offset=0,$count=50,$status=[]) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/batchget?access_token='.session('token.access_token'); $data = json_encode([ 'offset' => $offset, 'count' => $count, 'status_list' => $status //CARD_STATUS_NOT_VERIFY”,待审核;“CARD_STATUS_VERIFY_FAIL”,审核失败;“CARD_STATUS_VERIFY_OK”,通过审核;“CARD_STATUS_DELETE”,卡券被商户删除;“CARD_STATUS_DISPATCH”,在公众平台投放过的卡券; ]); $res = json_decode($this->http_post($url,$data),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200, 'card_id_list' => $res['card_id_list'], 'total' => $res['total_num'] ]; }else{ return [ 'status' => 400, 'errmsg' => '获取列表失败,原因:'.$res['errmsg'] ]; } } //获取卡卷详情 public function getCardInfo($card_id) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/get?access_token='.session('token.access_token'); $data = json_encode([ 'card_id' => $card_id ]); $res = json_decode($this->http_post($url,$data),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200, 'info' => $res['card'] ]; }else{ return [ 'status' => 400, 'errmsg' => '获取详情失败,原因:'.$res['errmsg'] ]; } } //更改卡卷信息 (未完善) /** * @return array */ public function updateTicket() { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/update?access_token='.session('token.access_token'); $data = json_encode([ ]); $res = json_decode($this->http_post($url,$data),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200, //'card_id_list' => $res['card_id_list'], //'total' => $res['total_num'] ]; }else{ return [ 'status' => 400, //'errmsg' => '获取列表失败,原因:'.$res['errmsg'] ]; } } //更改库存接口 /** * @param $card_id 卡卷id * @param int $increase_stock_value 增加库存数量 * @param int $reduce_stock_value 减少库存数量 * @return array */ public function updateTicketStock($card_id,$increase_stock_value,$reduce_stock_value) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/modifystock?access_token='.session('token.access_token'); $data = json_encode([ 'card_id' => $card_id, 'increase_stock_value' => $increase_stock_value, 'reduce_stock_value' => $reduce_stock_value ]); $res = json_decode($this->http_post($url,$data),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200 ]; }else{ return [ 'status' => 400, 'errmsg' => '修改库存失败,原因:'.$res['errmsg'] ]; } } //删除卡卷 /** * @param $card_id 卡卷id * @return array */ public function deleteTicket($card_id) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/delete?access_token='.session('token.access_token'); $data = json_encode([ 'card_id' => $card_id ]); $res = json_decode($this->http_post($url,$data),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200 ]; }else{ return [ 'status' => 400, 'errmsg' => '删除卡卷失败,原因:'.$res['errmsg'] ]; } } //设置卡卷失效 /** * @param string(20) $code 卡卷编码 * @param string(64) $reason 失效原因 * @param null $card_id 自定义code需要填写 * @return array */ public function unavailableTicket($code,$reason,$card_id=null) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/card/code/unavailable?access_token='.session('token.access_token'); $data = json_encode([ 'code' => $code , 'reason' => $reason, 'card_id' => $card_id, ]); $res = json_decode($this->http_post($url,$data),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200 ]; }else{ return [ 'status' => 400, 'errmsg' => '设置失效失败,原因:'.$res['errmsg'] ]; } } //拉取卡券概况数据 /** * 日期格式需要使用 2015-10-10 不可使用时间戳 查询区间需要小于62,同时不可以拉取当天的信息 * @param string(16) $begin_date 开始时间 * @param string(16) $end_date 结束时间 * @param int $cond_source 卡卷来源 0为公众平台创建的卡券数据 1是API创建的卡券数据 * @return array */ public function getCardBizuinInfo($begin_date,$end_date,$cond_source) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/datacube/getcardbizuininfo?access_token='.session('token.access_token'); $data = json_encode([ 'begin_date' => $begin_date , 'end_date' => $end_date, 'cond_source' => $cond_source, ]); $res = json_decode($this->http_post($url,$data),1); if(empty($res['errmsg'])) { return [ 'list' => $res['list'] ]; }else{ return [ 'status' => 400, 'errmsg' => '设置失效失败,原因:'.$res['errmsg'] ]; } } //拉取免费卡卷概况数据 /** * 日期格式需要使用 2015-10-10 不可使用时间戳 查询区间需要小于62,同时不可以拉取当天的信息 * @param $card_id 卡卷id * @param string(16) $begin_date 开始时间 * @param string(16) $end_date 结束时间 * @param $cond_source 卡卷来源 0为公众平台创建的卡券数据 1是API创建的卡券数据 * @return array */ public function getCardCardInfo($card_id,$begin_date,$end_date,$cond_source) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/datacube/getcardcardinfo?access_token='.session('token.access_token'); $data = json_encode([ 'card_id' => $card_id, 'begin_date' => $begin_date , 'end_date' => $end_date, 'cond_source' => $cond_source ]); $res = json_decode($this->http_post($url,$data),1); if(empty($res['errmsg'])) { return [ 'status' => 200, 'list' => $res['list'] ]; }else{ return [ 'status' => 400, 'errmsg' => '设置失效失败,原因:'.$res['errmsg'] ]; } } //拉取会员卡数据 public function getCardMemberCardInfo($begin_date,$end_date,$cond_source) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/datacube/getcardmembercardinfo?access_token='.session('token.access_token'); $data = json_encode([ 'begin_date' => $begin_date , 'end_date' => $end_date, 'cond_source' => $cond_source ]); $res = json_decode($this->http_post($url,$data),1); if(empty($res['errmsg'])) { return [ 'list' => $res['list'] ]; }else{ return [ 'status' => 400, 'errmsg' => '设置失效失败,原因:'.$res['errmsg'] ]; } } //拉去单张会员卡数据 public function getCardMemberCardDetail($card_id,$begin_date,$end_date) { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/datacube/getcardmembercarddetail?access_token='.session('token.access_token'); $data = json_encode([ 'begin_date' => $begin_date , 'end_date' => $end_date, 'card_id' => $card_id ]); $res = json_decode($this->http_post($url,$data),1); if(empty($res['errmsg'])) { return [ 'list' => $res['list'] ]; }else{ return [ 'status' => 400, 'errmsg' => '设置失效失败,原因:'.$res['errmsg'] ]; } }}
public function http_post_media($url,$filename){ $ch = curl_init($url); $file = curl_file_create($filename); $data = array('media' => $file); if(stripos($url,"https://")!==FALSE){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $content = curl_exec($ch); $aStatus = curl_getinfo($ch); curl_close($ch); if(intval($aStatus["http_code"])==200){ return $content; }else{ return false; } } public function http_post($url,$param,$post_file=false){ $oCurl = curl_init(); $this_header = array("content-type: application/x-www-form-urlencoded;charset=UTF-8"); if(stripos($url,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } if (is_string($param) || $post_file) { $strPOST = $param; } else { $aPOST = array(); foreach($param as $key=>$val){ $aPOST[] = $key."=".urlencode($val); } $strPOST = join("&", $aPOST); } curl_setopt($oCurl, CURLOPT_HEADER, 0); curl_setopt($oCurl,CURLOPT_HTTPHEADER,$this_header); curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$param); $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); if(intval($aStatus["http_code"])==200){ return $sContent; }else{ return false; } } function getApiTicket() { $this->getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.session('token.access_token').'&type=wx_card'; $res = json_decode($this->http_post($url,''),1); if($res['errmsg'] == 'ok') { return [ 'status' => 200, 'ticket' => $res['ticket'] ]; }else{ return [ 'status' => 400, 'errmsg' => $res['errmsg'] ]; } } function getAccessToken() { if(session()->get('token.access_token')==null || session()->get('token.time')+7100<time()) { $token = DB::table('wx_data')->where('id','=',1)->first(); if($token) { if( $token->created+7100<time() ) { $token = null; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" . "&appid=" . urlencode( $this->appid ) . "&secret=" . urlencode( $this->secret ); $fetch = json_decode(file_get_contents($url),1); DB::table('wx_data')->where('id','=',1)->update([ 'access_token' =>$fetch['access_token'], 'created' => time() ]); $token = DB::table('wx_data')->where('id','=',1)->first(); } session([ 'token' => [ 'access_token' => $token->access_token, 'time' => $token->created ] ]); }else{ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" . "&appid=" . urlencode( $this->appid ) . "&secret=" . urlencode( $this->secret ); $token = json_decode(file_get_contents($url),1); DB::table('wx_data')->insert([ 'access_token' =>$token['access_token'], 'created' => time() ]); session([ 'token' => [ 'access_token' => $token['access_token'], 'time' => time() ] ]); } } }
阅读全文
0 0
- laravel框架 封装的卡卷管理代码
- laravel框架容器管理的一些要点
- laravel框架容器管理的一些要点
- [php]laravel框架容器管理的一些要点
- laravel框架中如何编写下载附件的代码
- 逻辑卷的管理
- 逻辑卷的管理
- Laravel的路由管理
- Laravel 框架的学习
- Laravel框架的体系结构
- laravel框架的安装
- laravel框架的安装
- laravel框架的使用
- laravel框架的搭建
- Laravel框架的体系结构
- laravel框架的rbac
- 卷管理中DCO卷与DRL卷的区别
- PHPStorm扩展Laravel框架代码提示
- 管窥:if语句
- 文件名过长导致webstorm不识别文件类型
- review the advance features in Python
- 2017-09-13
- 多线程-慎用volatile
- laravel框架 封装的卡卷管理代码
- 51nod 1091 线段重合
- 这几个问题答不对,就别说精通TCP
- SequoiaDB x Spark 新主流架构引领企业级应用
- redis保存下来,自己慢慢享用
- L3-002. 堆栈
- 网狐 中心服务器 ADO 错误:0x80004005,[DBNETLIB]
- 【总结】Spark Streaming和Kafka整合保证数据零丢失
- centos lnmp 集成环境安装oracle扩展