php生成微信小程序码(二维码/菊花码)

微信官方提供了小程序码的生成接口,支持生成二维码形式的小程序码,或原生的圆形小程序码,这两者在生成的时候仅仅是post接口的url不同,传递的参数都基本相同(提交的post参数需要转成json字符串,不支持 form表单提交)。

本文主要是通过官方提供的接口A和接口C来生成小程序码(提取了两个接口可公共使用的提交参数,所以只要改pos提交的url地址就能实现生成二维码还是原生码了),此情况适用于少量小程序码的生成:

注意事项

接口只能生成已发布的小程序的二维码
接口 A 加上接口 C,总共生成的码数量限制为 100,000,请谨慎调用。
接口 B 调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成。

官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html

下面上php代码,注意我代码里出现的微信小程序相关配置都是测试用的,不是真实的。

<?php
header('content-type:text/html;charset=utf-8');


//配置APPID、APPSECRET
$APPID ="wxa51564dfd3";
$APPSECRET = "4xfg524t65468j641fs68ry78";

//需要生成的带参数小程序码,根据实际情况填写,写入数组是为了方便图片的命名
$mend['小程序码path参数1'] = 'pages/index?bey=1&storeId=cc502061';  
$mend['小程序码path参数2'] = 'pages/main/index?bey=1&storeId=cc288cb7';  
$mend['小程序码path参数3'] = 'pages/main/index?bey=1&storeId=eb12e4d0'; 

//上面是需要修改的配置项及参数,后面的小程序码会生成在php服务器路的php文件同目录下


//缓存access_token
 session_start();
//获取access_token
$access_token ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";
if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() >$_SESSION['expires_in']))
{
   $_SESSION['access_token'] ="";
   $_SESSION['expires_in'] = 0;
   $json = httpRequest($access_token );
   $json = json_decode($json,true);
   // var_dump($json);
   $_SESSION['access_token'] =$json['access_token'];
   $_SESSION['expires_in'] = time()+7100;//有效期2小时,设置提前一点7100s
   $ACCESS_TOKEN =$json["access_token"];
}
else{
    $ACCESS_TOKEN = $_SESSION["access_token"];
}
 
//接口C 小程序二维码,此接口生成的码有总数量限制与下方url接口共享10w总额度
//$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";

//接口A 小程序码,此接口生成的码有总数量限制与上方url接口共享10w总额度
$qcode ="https://api.weixin.qq.com/wxa/getwxacode?access_token=".$ACCESS_TOKEN;

//循环生成带参数小程序码
foreach ($mendian as $k => $v){
   $param = json_encode(array("path"=>$v,"width"=> 1080));// path参数必填 ,width是将要生成的小程序码的宽度
   //$param = json_encode(array("path"=>"pages/main/index?bey=1&storeId=724ed3b7","width"=> 1080));
   $result = httpRequest($qcode,$param,"POST");//将参数$param 进行post提交


   //将微信返回的结果存为图片,如果生成图片失败,微信会返回json数据
   $errcode = json_decode($result,true)['errcode'];
   $errmsg = json_decode($result,true)['errmsg'];
   if($errcode){
       echo "{"status:"$errcode,"info:"$errmsg}";
   }else{
       file_put_contents($k.".png",$result);//存入图片
       //$base64_image ="data:image/jpeg;base64,".base64_encode($result );//将图片转换为base64格式图片

   }
    sleep(5);
}
 
echo ‘结束……’;
 
//封装post、get请求的函数
// httpRequest($url); // get请求
// httpRequest($url,$json_param,"POST");// post请求
function httpRequest($url,$data='',$method='GET'){
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL,$url);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //不校验ssl
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); //不校验ssl
  curl_setopt($curl, CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
  //curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
  if($method=='POST')
  {
      curl_setopt($curl, CURLOPT_POST, 1);
      if ($data !='')
      {
          curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
      }
  }
  curl_setopt($curl, CURLOPT_TIMEOUT, 15); //超时时间15s
  curl_setopt($curl, CURLOPT_HEADER, 0);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $result = curl_exec($curl);
  curl_close($curl);
  return $result;
}
?>

其中要注意的就是php在post请求微信生码接口后如果成功,微信返回的是图片 Buffer,需要使用file_put_contents函数直接输出到图片文件!

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/php-create-weixin-qrcode/

赞赏

微信赞赏支付宝赞赏

python-include-files
python3-7使用钉钉2-x版本接口
美国亚马逊直邮中国的地址写法