微信小程序获取微信公众号中的文章实战

微信小程序中有一块功能是需要从关联的微信公众平台中获取文章进行跳转展示,先调用微信公众平台的接口,获取文章数据(在微信公众平台控制台,叫素材。所以下面统一叫素材)。获取素材数据后再发送给微信小程序。
实际操作:首先确定是否有权限
拥有调用微信公众平台的素材资源的权限。权限一览表,可以参考这个看看,自己是否有相应的权限进行调用。如果没有就别折腾。
域名白名单设置:第一步是开起微信公众平台的开发者功能,接着就是为接下来的请求开起ip白名单,开发阶段其实你自己的电脑就是服务器,把当前的ip添加进去就可以了,上线后接着添加你的服务器地址。
微信小程序获取微信公众号中的文章实战_第1张图片
微信公众号的APPSECRET这个密钥要启用才可以看到,在开始APPSECRET密钥之后,会出现一个添加ip白名单。如果不添加会报错:微信小程序获取微信公众号中的文章实战_第2张图片
1.获取access_token
要调用微信公众号的后端接口,这个是一切的开始,要调用就要用到你的AppID和AppSecret,调用微信公众平台的获取AccessToken接口来实现。
/**

 * 获取AccessToken
*/
public function getAccessToken(){
    // 这里把Access_Token缓存起来,并设置了7200秒的过期时间,防止每次都要重新调用get请求获取
    $access_token=session('access_token');
    if($access_token){
        return $access_token;
    }
    $appid="AppID";// AppID
    $appSecret="AppSecret";// AppSecret
    $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appSecret}";
    // 这个函数下面展示
    $result=curl_get_contents($url);
    $returnData=json_decode($result,true);
    if(in_array('errcode',$returnData)){
        // 发生错误
        return false;
    }else{
        $access_token=$returnData['access_token'];
        session('access_token',$access_token);
        return $access_token;
    }
}
/**
 * 获取公众号的文章
 */
public function getArtical(){
    // 跟上面一样,把最终结果缓存起来了,因为关联的微信公众号的更新频率没那么频繁,所以没有及时性方面的要求
    $article=session('article');
    if($article){
        return $article;
    }
    // 调用上面的接口获取AccessToken
    $access_token=$this->getAccessToken();
    $url="https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token={$access_token}";
    // 返回素材的数量,取值在1到20之间,看个人需求取;所以offset=0表示从第一个素材 返回;type是素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
    $postData=array(
        'type'=>'news',
        'offset'=>0,
        'count'=>20
    );
    // 这个函数在下面展示
    $article=curl_post($url,json_encode($postData));
    $result=json_decode($article,true);
    if(!$result['item']){
        return json(['code' => 500, 'msg' => '暂无数据同步']);
    }
    // 从返回的结果中拿取自己需要的数据
    $returnData=array(
        'title'=>$result['item'][0]['content']['news_item'][0]['title'], // 素材标题
        'introduce'=>$result['item'][0]['content']['news_item'][0]['digest'],// 素材内容简介
        'url'=>$result['item'][0]['content']['news_item'][0]['url'],// 素材链接地址
        'picture'=>$result['item'][0]['content']['news_item'][0]['thumb_url'] // 素材缩略图地址
    );
    session('article',$returnData);
    return $returnData;
}

/**

 *curl做http的post请求
 */
function curl_post($curlHttp, $postdata) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $curlHttp);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //不显示
    curl_setopt($curl, CURLOPT_TIMEOUT, 60); //60秒,超时
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
    $data = curl_exec($curl);
    curl_close($curl);
    return $data;
}
/**
 *curl做get请求
 */
function curl_get_contents($url,$timeout=1) {
    $curlHandle = curl_init();
    curl_setopt( $curlHandle , CURLOPT_URL, $url );
    curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout );
    $result = curl_exec( $curlHandle );
    curl_close( $curlHandle );
    return $result;
}

可以看相关文档:获取素材列表https://developers.weixin.qq....

你可能感兴趣的:(php小程序)