通过php后台接口获取微信小程序任意页面的二维码

通过php后台接口获取微信小程序任意页面的二维码,记录其中遇到的三个问题以及解决办法。

先上代码:

<?php
	error_reporting(0);
	$gettokenurl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential';
	$tokentata = array('appid'=>'你的小程序AppID','secret'=>'你的小程序AppSecret');
	$tokencontext = get_content_post($gettokenurl,$tokentata);
	$tokenjson = json_decode($tokencontext,1);
	if(!empty($tokenjson['errcode'])){
		exit('小程序AppID和AppSecret不匹配!');
	}
	$token = $tokenjson['access_token'];
	
	//接口A小程序码
	$url = 'http://api.weixin.qq.com/wxa/getwxacode?access_token='.$token;
	
	//接口C小程序二维码
	//$url = 'http://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token='.$token;
	$data = array(
		'path'=>'pages/member/index/index',
		'width'=>intval(430)
	);
	$data=json_encode($data);
	
	$file = './'.time().'.jpg';
	file_put_contents($file,get_content_post($url,$data));
	echo '<img src="'.$file.'">';
	
	
	/**
     * 通过post方法获取网页源码
     * @param  string $url       请求的链接
     * @param  array  $post_data post提交的数据
     * @param  array  $header    模拟请求头
     * @return string            网页源码
     */
	function get_content_post($url,$post_data=array(),$header=array()){   
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在 
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_AUTOREFERER,true);
        $content = curl_exec($ch);
        $info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL); 
        $code = curl_getinfo($ch,CURLINFO_HTTP_CODE);       
        curl_close($ch);    
        if($code == "200"){
            return $content;
        }else{
            return "错误码:".$code;
        }
    }
?>

记录下遇到的坑:

1、所有请求都是https的,在curl下加上如下代码,跳过证书检查

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在

2、获取小程序码A接口时,四个参数都传的话,一直报数据格式错误,把最后两个去掉就可以获取到

3、从腾讯服务器获取到的是图片流,要保存到本地才能显示