thinkphp自定义微信公众号api接口类

<?php
namespace lib;

class WxApi
{
    //token值
    public $const_token;
    //appId
    public $appId;
    //appSecret
    public $appSecret;
    //path
    public $path;
    //access_token
    private $access_token = '';
    private $token_file = 'access_token.json';
    /**
     * 初始化控制器
     */
    public function __construct($const_token = '', $appId = '', $appSecret = '', $path = '')
    {
        $this->const_token = $const_token;
        $this->appId = $appId;
        $this->appSecret = $appSecret;
        $this->path = $path;
        $this->token_file = $path . $this->token_file;
        $this->access_token = $this->getAccessToken();
    }
    /**
     * 获取token
     */
    public function getAccessToken()
    {
        if (!is_file($this->token_file)) {
            if (!is_dir($this->path)) {
                mkdir($this->path, 0777, true);
            }
            file_put_contents($this->token_file, json_encode(array(
                'expire_time' => 0,
                'access_token' => '',
            )));
        }
        $data = json_decode(file_get_contents($this->token_file), true);
        if (!(isset($data['expire_time']) && $data['expire_time'] > time())) {
            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential';
            $url .= '&appId=' . $this->appId . '&secret=' . $this->appSecret;
            $res = json_decode($this->https_request($url), true);
            $access_token = isset($res['access_token']) ? $res['access_token'] : '';
            if ($access_token) {
                $data['expire_time'] = time() + 7000;
                $data['access_token'] = $access_token;
                file_put_contents($this->token_file, json_encode($data));
            } else {
                file_put_contents($this->token_file, json_encode(array(
                    'expire_time' => 0,
                    'access_token' => '',
                )));
                return $this->getAccessToken();
            }
        } else {
            $access_token = $data['access_token'];
        }
        return $access_token;
    }
    /**
     * 文本鉴黄
     */
    public function textSecCheck($content)
    {
        $url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' . $this->access_token;
        $data = json_encode(array('content' => $content), JSON_UNESCAPED_UNICODE);
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 图片鉴黄
     */
    public function imageSecCheck($path)
    {
        $url = 'https://api.weixin.qq.com/wxa/img_sec_check?access_token=' . $this->access_token;
        $data = array(
            'media' => new \CURLFile(realpath($path)),
        );
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 上传图文消息中的图片文件
     */
    public function uploadImage($imagePath)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=' . $this->access_token . '&type=image';
        $data = array(
            'media' => new \CURLFile(realpath($imagePath)),
        );
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 上传media
     */
    public function uploadMedia($mediaPath, $mdeiaType = 'image')
    {
        $url = 'http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=' . $this->access_token . '&type=' . $mdeiaType;
        $data = array(
            'media' => new \CURLFile(realpath($mediaPath)),
        );
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 上传图文素材
     */
    public function uploadNews($data)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 新增图文素材
     */
    public function addNews($data)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 获取图文素材
     */
    public function getNews($data)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 下载多媒体文件
     */
    public function downMedia($media_id, $path, $file_type = 'jpg')
    {
        $url = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=' . $this->access_token . '&media_id=' . $media_id;
        $path = $path . date('Ymd') . '/';
        $file = $path . 'wx_' . date('YmdHis') . mt_rand(10000, 99999) . '.' . $file_type;
        $result = file_get_contents($url);
        return result;
        if (!$result) {
            return false;
        }
        if (!is_dir($path)) {
            mkdir($path, 0777, true);
        }
        $result = file_put_contents($file, $result);
        return $file;
    }
    /**
     * 获取所有用户分组
     */
    public function allUserGroup()
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/groups/get?access_token=' . $this->access_token;
        $result = $this->https_request($url);
        return json_decode($result, true);
    }
    /**
     * 获取用户标签
     */
    public function allUserTags()
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/tags/get?access_token=' . $this->access_token;
        $result = $this->https_request($url);
        return json_decode($result, true);
    }
    /**
     * 获取用户列表
     */
    public function allUserList($openid = '')
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=' . $this->access_token . '&next_openid=' . $openid;
        $result = $this->https_request($url);
        return json_decode($result, true);
    }
    /**
     * 获取用户基本信息
     */
    public function getUserInfo($openid)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=' . $this->access_token . '&openid=' . $openid . '&lang=zh_CN';
        $result = $this->https_request($url);
        return json_decode($result, true);
    }
    /**
     * 批量获取用户基本信息
     */
    public function batchGetUserInfo($list = array())
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=' . $this->access_token;
        $data = json_encode(array(
            'user_list' => $list,
        ), JSON_UNESCAPED_UNICODE);
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 按组群发消息
     */
    public function sendGroupMessageG($data)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 发送客服消息
     */
    public function sendServiceMessage($data)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 发送模板消息
     */
    public function sendTemplateMessage($data)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 创建子商户
     */
    public function createMerchant($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/card/submerchant/submit?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 更新子商户信息
     */
    public function updateMerchant($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/card/submerchant/update?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 获取子商户类目表
     */
    public function getMerchantCategory()
    {
        $url = 'https://api.weixin.qq.com/card/getapplyprotocol?access_token=' . $this->access_token;
        $result = $this->https_request($url);
        return json_decode($result, true);
    }
    /**
     * 创建门店
     */
    public function createStore($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/cgi-bin/poi/addpoi?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 修改门店信息
     */
    public function updateStore($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/cgi-bin/poi/updatepoi?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 获取门店类目表
     */
    public function getBusinessCategory()
    {
        $url = 'http://api.weixin.qq.com/cgi-bin/poi/getwxcategory?access_token=' . $this->access_token;
        $result = $this->https_request($url);
        return json_decode($result, true);
    }
    /**
     * 创建优惠券
     */
    public function createCoupon($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/card/create?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 获取用户领取的优惠券
     */
    public function getUserCoupon($openid, $card_id)
    {
        $data = array(
            'openid' => $openid,
            'card_id' => $card_id,
        );
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/card/user/getcardlist?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 查询优惠券Code
     */
    public function getCouponCode($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/card/code/get?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 核销优惠券
     */
    public function consume($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/card/code/consume?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 创建二维码
     */
    public function createQrCode($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/card/qrcode/create?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 创建自定义菜单
     */
    public function setMenu($data = array())
    {
        $data = urldecode(json_encode($data, JSON_UNESCAPED_UNICODE));
        $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $this->access_token;
        $result = $this->https_request($url, $data);
        return json_decode($result, true);
    }
    /**
     * 获取自定义菜单
     */
    public function getMenu()
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token=' . $this->access_token;
        $result = $this->https_request($url);
        return json_decode($result, true);
    }
    /*
     * url参数格式化
     */
    public function toUrlParams($values)
    {
        $buff = '';
        foreach ($values as $k => $v) {
            if ($k != 'sign' && $v != '' && !is_array($v)) {
                $buff .= $k . '=' . $v . '&';
            }
        }
        $buff = trim($buff, '&');
        return $buff;
    }
    /*
     * 生成签名
     */
    public function makeSign($values)
    {
        //签名步骤一:按字典序排序参
        ksort($values);
        $string = $this->toUrlParams($values);
        //签名步骤二:在string后加入KEY
        $string = $string . '&key=' . $this->mchKey;
        //签名步骤三:MD5加密
        $string = md5($string);
        //签名步骤四:所有字符转为
        $result = strtoupper($string);
        return $result;
    }
    /*
     * 生成随机字符串
     */
    public function getNonceStr($length = 32)
    {
        $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
        $str = '';
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }
    /**
     * https_request
     *
     * @param string $url
     * @param mixed $data
     * @return mixed
     */
    public function https_request($url, $data = null)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        if ($data) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xmode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值