必威体育Betway必威体育官网
当前位置:首页 > IT技术

微信小程序生成带参数的二维码

时间:2019-09-05 17:12:16来源:IT技术作者:seo实验室小编阅读:81次「手机版」
 

微信二维码生成

微信程序生成带参数的二维码

    • 微信官方说明
    • PHP代码实现
    • 重要的也是最坑的
    • 源码下载(调查问卷微信小程序带tp后台)

微信官方说明

  1. 先查看文档,共有三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口C

    https://developers.weixin.qq.com/Miniprogram/dev/framework/open-ability/qr-code.html

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html

  2. 详细的三个接口地址请大家执行查看

    A:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/createWXAQRCode.html

    B:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/getWXACode.html

    C:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/createWXAQRCode.html

    在这里插入图片描述

PHP代码实现

需要调用的公共函数

function https_request($url,$data = null){
    if(function_exists('curl_init')){
      $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
        if (!empty($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;
    }else{
      return false;
    }
}

封装了两个方法

// 发送access_token
public function getAccessToken($APPid,$secret,$grant_type){
	if (empty($appid)||empty($secret)||empty($grant_type)) {
		return '参数错误';
	}
		 // https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type={$grant_type}&appid={$appid}&secret={$secret}";
    if (S('wx_token')) {
    	$token = S('wx_token');
    	return 'success';
    }
    $json = https_request($url);
    $data=json_decode($json,true);
    if (empty($data['access_token'])) {
    	return $data;
    }
    S('wx_token',$data,3600);
    return 'success';
}
// 获取带参数的二维码
// 获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。
public function getWXACodeUnlimit($access_token,$path='',$width=430){
	if (empty($access_token)||empty($path)) {
		return 'ERROR';
	}
		 // https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
    $url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token={$access_token}";
    $data = array();
    $data['path'] = $path;
    //最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
    $data['width'] = $width;
    //二维码的宽度,默认为 430px
    $json = https_request($url,json_encode($data));
    return $json;
}

这里是核心的代码逻辑

public function qrcode(){
        $wechat = C('wechat');
        $SupermarketModel = D('Supermarket');
        $superId = I('request.id','','intval');
        $w = array();
        $w['id'] = $superId;
        $superDefault = $SupermarketModel->where($w)->find();
        if (empty($superDefault)) {
        	ajax_return(false,'未找到相关信息');
        }
        $res = $SupermarketModel->getAccessToken($wechat['appId'],$wechat['appSecret'],'client_credential');
        if ($res == 'success') {
        	$token = S('wx_token');
        	$access_token = $token['access_token'];
        }else{
        	ajax_return(false,$res);
        }
        if (empty($access_token)) {
        	ajax_return(false,'access_token为空,无法获取二维码');
        }
        $path = 'pages/index/index?super='.$superId;
        $width = 430;
        $res2 = $SupermarketModel->getWXACodeUnlimit($access_token,$path,$width);
        // var_dump($res2);
        //将生成的二维码保存到本地
        // $file ="/Uploads/".substr($path,strripos($path,"?")+1).".jpg";
        $file ="Uploads/".$superId.".jpg";
        file_put_contents('./'.$file,$res2);
        if (file_exists($file)) {
        	ajax_return(true,'','/'.$file);
        }else{
        	ajax_return(false);
        }
    }

重要的也是最坑的

1.在获取二维码时,需要post向接口提交数据,只是说返回的是object。没有直接在文件中说明提交的post数据也需要是json对象。发送的既然不是数组,那么在curl请求就不能写成

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post))

必须写成

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

在这里插入图片描述

2.最坑的就是二维码获取成功后的处理。只要逻辑没有问题,获取参数二维码成功后,接口地址会直接返回如下字符串。

在这里插入图片描述

这表明你已经获取成功了。该如何把它变为一张图片呢,百度了好多,大家都没仔细描述这一步,还有同样的做到这里不会做了,后期更新。自己来吧:就是利用php自带的文件写入函数,把这些字符写入到图片格式的文件中就成功了。

$file ="Uploads/qrcode.jpg";
file_put_contents('./'.$file,$res2);

源码下载(调查问卷微信小程序带tp后台)

https://download.csdn.net/download/weixin_42799222/10958116

相关阅读

微信部分功能故障:目前各项功能已经全部修复

A5创业网(公众号:iadmin5)6月5日讯,随着科技的发展,如今智能手机,移动社交工具都成了人们日常无法缺失的东西,离开了手机就浑身不自在

微信聊天记录查看器:如何查看已删除的聊天记录?

微信聊天记录查看器其实在好几年前就有了,只是大家忙于工作可能都忽略了它的存在。其实它就在各大下载站中,以目前的科技发达程度,想

微信解封快手链接:微信已经解封快手短视频分享功能

A5创业网(公众号:iadmin5)6月24日讯,据悉,微信已经解封了快手小视频分享到微信朋友圈的链接,直接点击授权后即可在微信朋友圈线播放了

微信订阅号再次改版,「运营喵」这次又要注意什么?(附头图

「常读的订阅号」,将是一个运营者必争的黄金展示位。9月25日,微信6.7.3 iOS版正式更新了!而就在9月22日,微信6.7.3安卓内测版就已经开

微信偷偷更新的隐藏实用功能,我都给你扒出来了!

声明:本文来自于微信公众号运营研究社公众号(ID:U_quan),作者:套路编辑部,授权站长之家转载发布。上周,微信更新了一个悬浮窗的功能。这

分享到:

栏目导航

推荐阅读

热门阅读