php对接微信小程序接口类包含 

登录微信小程序方法、

获取微信接口调用凭证方法、

获取微信加密scheme码方法、

获取微信access_token方法、

获取微信的unionid方法、

获取微信的用户信息方法、

根据微信access_token 获取用户手机号、

根据微信access_token 获取用户昵称、

根据微信access_token 获取公众号用户列表、

检查一段文本是否含有违法违规内容、

检查图片是否含有违法违规内容等方法,

直接导入使用

<?php

class WXMiniProgram
{
    private $appid;
    private $secret;
    private $cache_fix = 'wxMiniProgram_';
    public function __construct($types='' )
    {
//这个地方用于判断调用的是微信小程序还是微信公众号
        if(empty($types)){
            $types = 'wxMiniProgram';
        }
        $this->cache_fix = $types.'_';
        $this->appid = '你自己小程序appid';
        $this->secret = '你自己小程序secret';

    }
    /** 登录微信小程序
     * @param $code 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code。
     */
    public function auth_code2Session($code){
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$this->appid&secret=$this->secret&js_code=$code&grant_type=authorization_code";
        $at_data = $this->c_request($url);
        if (!isset($at_data["errcode"])){
            return [
                "unionid"=>$at_data["unionid"],
                "openid"=>$at_data["openid"],
                "session_key"=>$at_data["session_key"]
            ];
        }else{
            return false;
        }
    }



    /** 获取微信接口调用凭证
     * @param bool $is_cache 是否去缓存数据
     * @return bool|mixed
     */
    public function auth_getAccessToken($is_cache = true){
        if (!$is_cache) return $this->auth_getAccessTokenPost();
        $at_data = cache($this->cache_fix.'access_token');
        if ($at_data){
            return $at_data;
        }else{
            $at_data = $this->auth_getAccessTokenPost();
            return $at_data;
        }
    }


    /**
     * @return false|mixed
     * 获取微信加密scheme码
     * $dates object  path query env_version
     */
    public function get_wx_scheme($dates){
        $res['code'] =false;
        $access_token = $this->auth_getAccessToken(false);
        $url = "https://api.weixin.qq.com/wxa/generatescheme?access_token=".$access_token;
        $tmpinfo = $this->https_request($url,$dates);
        if($tmpinfo['errcode'] == 0){
            $res['msg'] =$tmpinfo['openlink'];
            $res['code'] =true;
            return $res;
        }else{
            $res['msg'] =$tmpinfo['errmsg'];
            return $res;
        }
    }



    /**
     * @return false|mixed
     * 获取微信access_token 根据初始化是微信小程序还是微信公众号
     */
    private function auth_getAccessTokenPost(){

        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appid&secret=$this->secret";
        $at_data = $this->c_request($url);
        if (!isset($at_data["errcode"])){
            cache($this->cache_fix.'access_token',$at_data["access_token"],$at_data["expires_in"]);
            return $at_data["access_token"];
        }else{
            return false;
        }
    }


    /**
     * @return false|mixed
     * 获取微信的unionid  公众号和微信小程序一样  必须是一个主题开通绑定过微信开发平台才有unionid
     */
    public function get_wxunionid($openid){
        $access_token = $this->auth_getAccessToken(false);
        $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $at_data = $this->c_request($url);

        if (!isset($at_data["errcode"])){
            cache($this->cache_fix.'unionid',$at_data["unionid"]);
            return $at_data["unionid"];
        }else{
            return false;
        }
    }


    /**
     * @return false|mixed
     * 获取微信的用户信息  公众号和微信小程序一样  必须是一个主题开通绑定过微信开发平台才有unionid
     */
    public function get_wxUserInfo($openid){
        $access_token = $this->auth_getAccessToken(false);
        $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $at_data = $this->c_request($url);
        if (!isset($at_data["errcode"])){
            return $at_data;
        }else{
            return false;
        }
    }


    /**
     * @return false|mixed
     * 根据微信access_token 获取用户手机号
     */
    public function get_wxphonenumber($code){

        $access_token = $this->auth_getAccessTokenPost();
        $url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$access_token;
        $data['code'] = $code;//前端获取code

        $tmpinfo = $this->https_request($url,$data);

        $code = $tmpinfo['errcode'];
        if($code == 0){
            return $tmpinfo['phone_info'];
        }else{
            return '';
        }
    }



    /**
     * @return false|mixed
     * 根据微信access_token 获取用户昵称
     */
    public function get_wxUserNice($openid){

        $access_token = $this->auth_getAccessToken(false);
        var_dump($access_token);
        $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";

        $tmpinfo = $this->https_request($url);
        $code = $tmpinfo['errcode'];
        if($code == 0){
            return $tmpinfo['phone_info'];
        }else{
            return '';
        }
    }


    /**
     * @return false|mixed
     * 根据微信access_token 获取公众号用户列表
     */
    public function getGZ_userList($next_openid = ''){

        $access_token = $this->auth_getAccessTokenPost();

        $wei = '';
        if(!empty($next_openid)){
            $wei = "&next_openid=".$next_openid;
        }
        $url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$access_token.$wei;

        $tmpinfo = $this->c_request($url);

        if(!empty($tmpinfo['data'])){
            return $tmpinfo;
        }else{
            return '';
        }
    }



    /** 检查一段文本是否含有违法违规内容。微信小程序
     * @param $openid 用户的openid(用户需在近两小时访问过小程序)
     * @param int $scene 场景枚举值(1 资料;2 评论;3 论坛;4 社交日志)
     * @param $content 需检测的文本内容,文本字数的上限为2500字
     * @param $nickname 用户昵称
     * @param $title 文本标题
     * @param $signature 个性签名,该参数仅在资料类场景有效(scene=1)
     */
    public function security_msgSecCheck($openid,$scene,$content,$nickname='',$title='',$signature=""){
        $shenhe = config('site.shenhe');
        if($shenhe == 1){

            $access_token = $this->auth_getAccessToken(false);
            $url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=$access_token";
            $data=[
              "version"=>'2',
              "openid"=>$openid,
              "scene"=>$scene,
              "content"=>$content,
              "nickname"=>$nickname,
              "title"=>$title,
              "signature"=>$signature,
            ];
            $at_data = $this->https_request($url,$data);

            if ($at_data["errcode"]==0){
                return false;
            }else{
                return false;
            }
        }else{
            return true;
        }
    }



    /** 检查图片是否含有违法违规内容。微信小程序
     * @param $openid 用户的openid(用户需在近两小时访问过小程序)
     * @param int $scene 场景枚举值(1 资料;2 评论;3 论坛;4 社交日志)
     * @param $content 需检测的文本内容,文本字数的上限为2500字
     * @param $nickname 用户昵称
     * @param $title 文本标题
     * @param $signature 个性签名,该参数仅在资料类场景有效(scene=1)
     */
    public function security_imgSecCheck($files){
        $shenhe = config('site.shenhe');
        if($shenhe == 1){
            $access_token = $this->auth_getAccessToken(false);

            $url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=$access_token";
            $data=[
                "access_token"=>$access_token,
                "media"=>$files[0],
            ];

            $header = array('Content-Type: multipart/form-data');
            $at_data = $this->https_request_hader($url,$data,$header);
            $res = json_decode($at_data);

            if ($res->errcode==0){
                return false;
            }else{
                return false;
            }
        }else{
            return true;
        }
    }





    private function https_request($url, $data = null) {
        if ($data){
            $json_data = json_encode($data);
            $data = urldecode($json_data);
        }
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_TIMEOUT,60);
        $output = curl_exec($curl);
        curl_close($curl);
        return json_decode($output,true);
    }
   
/**
     * @param $url
     * @param $data
     * @param $header
     * @return bool|string 带头部的一个新的 cURL 会话
     */
    private function https_request_hader($url, $data = null,$header = null) {
        if ($data){
            $json_data = json_encode($data);
            $data = urldecode($json_data);
        }
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($header)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_TIMEOUT,60);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

    /**
     * @param $url
     * @return mixed 一个新的 cURL 会话
     */
    private function c_request($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部