Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序之生成指定页面的太阳码

微信小程序之生成指定页面的太阳码

作者头像
桑先生
发布于 2019-12-18 03:06:57
发布于 2019-12-18 03:06:57
8.8K00
代码可运行
举报
文章被收录于专栏:桑先生的专栏桑先生的专栏
运行总次数:0
代码可运行

最近的项目中也是需要生成小程序的邀请太阳码.一开始生成的是个二维码.但是小程序的客户扫了之后总不能让人家跳到H5页面.所以也是研究了一下.一路上也是坎坎坷坷.这里总结下.顺当分享下自己写的代码.哪里写的不好.多多指教下.

首先.官方也是给出了最直接了当的解决办法.这里也是一路摸着石头过河.有问题查文档,翻手册.我觉的这可能是从无到有最快的解决办法了.

首先看下官方给出生成程序码的例子:

获取小程序码通过该接口生成的小程序码,永久有效,数量暂无限制。

补充下小程序生成太阳码的错误码

41030  接口所传page页面不存在,或者小程序没有发布

47001  请求的数据不是json格式

40001  失效的access_token  token两个小时的有效期,需要注意下.这里官方给出的是两小时,但很有可能提前失效.

待补充…

除去可选参数,我们需要传递的有access_token 这里的scebe写着必填,但是有没有说怎么传递.这里我也是困扰了好久.后来才发现这个是用来传递参数的.-_-||

大概流程就是拿access_token去请求这个接口.这里他返回的是一个base64格式的图片.刚开始以为是乱码.就像解决二维码那样没有效果.眉头一皱,发现事情没有这么简单.原来是个bse64的图片.这里我的处理方式也是直接将他输出到了服务器的根目录下.这里也是经历了暴风雨式的微信报错.才算跑通.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

/**
 * Class WxQrcode
 * 小程序生成太阳码
 */
class WxQrcode{

    /**
     * @param $appid
     * @param $appsecret
     * @return mixed
     * 获取accessToken
     */
    public function getAccessToken($appid,$appsecret)
    {
        $tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
        $getArr=array();
        $tokenArr=json_decode($this->send_post($tokenUrl,$getArr,"GET"));
        $access_token=$tokenArr->access_token;
        return $access_token;
    }

    /**
     * 验证access_token是否有效
     * 这里调用微信接口如果失效则获取新的验证access_token是否有效 或者 将验证access_token是否有效存入数据库做判断也可以
     */
    protected function checkWXToken($access_token){
        //请求微信不限制调用次数的接口
        $ipurl = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$access_token;
        $ipresult = $this->getSSLPage($ipurl);
        $ipdata = json_decode($ipresult,true);

        if($ipdata['errcode'] == '40001'){
            file_put_contents('access_token.txt',date('Y-m-d H:i:s').' access_token提前失效,进入二次获取token'.PHP_EOL,FILE_APPEND);
            $access_token = $this->getAccessToken();
        }
        return $access_token;
    }

    /**
     * @return string
     * 生成小程序太阳码
     */
    public function getQrcode()
    {

        $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$this->getAccessToken();
        //生成二维码图片
        $da['page'] = 'pages/detail/detail'; //小程序路径地址,不写默认跳首页
        $da['width']=430;  //二维码大小
        $da['scene']="name=123"; //页面传参
        //{"errcode":47001,"errmsg":"data format error hint: [WqXQEA06804522]"}   josn格式不正确索性直接转成json
        /* $post_data='{"path":"'. $data['path'].'",
                      "width":'.$data['width'].',
                      "scene":'.$data['scene'].'
                      }';*/
        $post_data = json_encode($da);
        //这里会直接生成base64图片.直接写成文件就可以 打印会显示乱码
        $result=$this->api_notice_increment($url,$post_data);
        // dump($result);die;
        $dir = 'qrcode/';
        //判断目录是否存在
        if(is_dir($dir))
        {
            $filename =  $dir.uniqid().'.png';
        } else {
            mkdir($dir);
            $filename =  $dir.uniqid().'.png';
        }
        //生成唯一文件名
        $file =uniqid().'.png';
        //写入文件
        file_put_contents('qrcode/'.$file,$result);
        return $filename;
    }

    /**
     * @param $file
     * 删除文件
     */
    public function delQrcode($file)
    {
        //这里传入的$file 是我这边存入数据库的图片.调用unlink函数删除服务器上的图片文件
        $path = ROOT_PATH .'public'.$file;
        if (file_exists($path)) {
            unlink ($path);
        };
    }

    /**
     * @param $url
     * @param $data
     * @return bool|string
     */
    protected function api_notice_increment($url, $data){

        $ch = curl_init();

        $header = "Accept-Charset: utf-8";

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        //curl_setopt($ch,  CURLOPT_HTTPHEADER, $header);

        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $tmpInfo = curl_exec($ch);

        if (curl_errno($ch)) {
            return false;
        }else{
            return $tmpInfo;die;
        }

    }

    /**
     * @param $url
     * @param $post_data
     * @param string $method
     * @return false|string
     * 发送post请求
     */
    protected function send_post($url, $post_data,$method='POST') {

        $postdata = http_build_query($post_data);

        $options = array(

            'http' => array(

                'method' => $method, //or GET

                'header' => 'Content-type:application/x-www-form-urlencoded',

                'content' => $postdata,

                'timeout' => 15 * 60 // 超时时间(单位:s)

            )

        );

        $context = stream_context_create($options);

        $result = file_get_contents($url, false, $context);

        return $result;

    }

    /**
     * @param $url
     * @return bool|string
     *
     */
    protected function getSSLPage($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSLVERSION, 30);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }



}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于小程序UrlScheme跳转
本文最后更新于2022年01月11日,已超过152天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
田小檬
2022/08/30
6160
微信开发之小程序发送订阅消息
微信小程序在年初也是进行了升级.将原来的模板消息升级为订阅消息.也是在这几天研究了下.发现和公众号的模板消息有一种异曲同工的感觉.
桑先生
2020/02/13
7980
微信小程序 接口调用讲解 (AccessToken、小程序码登录)
♘ 通过微信小程序实现扫码登录 ♘【网页版】使用小程序码登录 ♘ 通过扫小程序码实现网站登录功能
泥豆芽儿 MT
2022/05/10
19.2K0
微信小程序 接口调用讲解 (AccessToken、小程序码登录)
公众号开发之发送模板信息
前阵子小程序项目中因为需要及时通知用户,就打算对接小程序的模板通知.可是说是小程序在明年的一月份就不支持了.所以就放下了.
桑先生
2019/12/17
8270
公众号开发之发送模板信息
php实现微信小程序消息通知「建议收藏」
接入消息通知指引地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/custommsg/callback_help.html
全栈程序员站长
2022/09/29
2.2K0
php实现微信小程序消息通知「建议收藏」
修改CommentToMail插件,评论公众号和邮箱同步推送
之前写过一篇类似的文章操作说明。原文章传送门→利用公众号的模板消息把评论/留言推送到微信 但是我觉得,太麻烦了(改的多,插件也多)。正好换了主题,插件全部卸载了,需要什么再重新安装。微信推送评论只需要一个插件CommentToMail+代码重改即可实现。 CommentToMail这个插件应该是大多数Typecho博主都会安装的必备之一吧。 最终通过4步,马上就能和邮箱同步收到评论消息推送啦!
目的地-Destination
2023/03/06
4310
修改CommentToMail插件,评论公众号和邮箱同步推送
php微信小程序订阅消息发送功能对接实践
在开发微信小程序的过程中,订阅消息功能是与用户保持互动的重要方式之一。本文将详细介绍如何使用 PHP 语言对接微信小程序的订阅消息发送功能,帮助开发者快速理解和实现这一功能。
高久峰
2025/01/20
3320
PHP 生成微信小程序码,并存储图片
泥豆芽儿 MT
2023/10/22
5410
PHP 生成微信小程序码,并存储图片
利用微信公众号提供的素材存储当免费图床用
微信公众平台提供了一个素材管理,里面可以上传图片、视频、音频等类型的素材,那么是否可以将图片素材上传上去,获取到url作为自己小程序项目的图片服务器呢?当然没问题!
PHP学习网
2022/12/17
1.7K0
PHP实现微信公众号企业号自定义菜单接口示例
define(AppId, "wx666cae44xxxxxx2");//定义AppId,需要在微信公众平台申请自定义菜单后会得到 define(AppSecret, "d77026a714d443a01d0229xxxxxxxx");//定义AppSecret,需要在微信公众平台申请自定义菜单后会得到 include("menu.php");//引入微信类 $wechatObj = new Wechat();//实例化微信类 $creatMenu = $wechatObj->creatMenu();//创
Yiiven
2022/12/15
7300
Yii2.0实现微信公众号后台开发
1.用户授权接口:获取access_token、openid等;获取并保存用户资料到数据库
botkenni
2019/09/02
9850
Yii2下使用微信分享JSDK
后端签名 public function getToken() { //获取access_token $app = Yii::$app->wechat->get
素描
2019/11/07
7730
公众号菜单开发_公众平台下面菜单栏怎么设置
微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能。开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接。自定义菜单接口将为公众账号的信息展示空间提供更多可能性。本文将针对自定义菜单做简单的开发应用,以供读者参考。
全栈程序员站长
2022/09/20
1.8K0
公众号菜单开发_公众平台下面菜单栏怎么设置
JSSDK使用注意事项
1 如果要做朋友圈分享 ,除了'checkJsApi'请务必在config中加上
lilugirl
2019/05/28
9600
JSSDK使用注意事项
微信公众平台开发 自定义菜单
自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。开启自定义菜单后,公众号界面如图所示:
庞小明
2018/09/19
2.1K0
微信公众平台开发 自定义菜单
16-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案微信小程序篇
https://www.cnblogs.com/yangfengwu/p/11200767.html
杨奉武
2019/08/18
1.1K0
微信API接口(全) - 微信支付/微信红包/微信卡券/微信小店/JSAPI
微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中。 微信支付、微信红包、微信卡券、微信小店。
程序猿的栖息地
2022/04/29
17.7K0
微信API接口(全) - 微信支付/微信红包/微信卡券/微信小店/JSAPI
微信公众号发布提醒(微信公众号模板消息接口)
灵感来源于学校的 每日健康日报,要求使用微信小程序进行每日健康打卡。所以此项目的功能类似于 QQ群机器人,或者是 每日闹钟。
全栈程序员站长
2022/07/26
13.2K0
微信公众号发布提醒(微信公众号模板消息接口)
微信小程序模板消息实现(PHP+ 小程序)
参考官方文档和部分资料,总结小程序模板消息推送以及相关注意事项,楼主踩过的坑,特来与大家分享。
ITer.996
2019/08/28
6K0
微信小程序模板消息实现(PHP+ 小程序)
推荐阅读
相关推荐
关于小程序UrlScheme跳转
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验