微信小程序码如何生成 微信小程序码生成方法攻略教程大全

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序码如何生成 微信小程序码生成方法攻略教程大全相关的知识,希望对你有一定的参考价值。

参考技术A

微信小程序(wei xin xiao cheng xu),简称小程序,缩写XCX,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。小程序、订阅号、服务号、企业号是并行的体系。小程序码怎么生成?许多小程序开发者,都需要获取进入小程序不同页面的二维码:包括常见的四方形「QR码」和新推出的「小程序码」。

这时候,我们直接在小程序后台中获取到的二维码,就远远无法满足我们以上需求了。贴心的是,微信提供了「获取小程序二维码」的接口。

通过这个接口,商家和开发者能够制作进入不同页面的小程序二维码,而不会限定扫码进入小程序主页。

小程序码怎么生成?

下面,小编就以「虚荣数据库」小程序的某个英雄详情页为例,展示这个接口的使用方法。

【准备工作】

首先,我们需要确保在小程序的app.json代码中,已经注册了相应的页面。

在本例的设定中,我们就需要在pages里,将pages/detail/hero/hero这个页面注册进去。

pages:[pages/index/index,pages/detail/hero/hero]

当然,相应目录下也需要有相应的页面文件,且你的小程序已经有已发布的线上版本。否则,用户扫码后,微信会提示出错。

接下来,我们需要到微信小程序后台,获取小程序的AppSecret(如果已经获取,这一步可以跳过)。

进入小程序后台,点击左侧「设置」,找到「开发设置」,我们就能找到AppSecret一项。点击「获取」或「重置」,扫码之后,网页就会显示新的AppSecret。

需要注意的是,如果你之前生成过新的AppSecret,那么旧的AppSecret会随这个操作而失效。

开发者也需要记得妥善保管AppSecret,尽可能保证AppSecret不会丢失、泄漏。

【获取二维码】

有了小程序的AppID和AppSecret,我们就能利用服务器,获取小程序的二维码了。

在本例,我们通过模拟请求的方式,让大家了解这个接口的使用方法和原理。

我们要利用AppID和AppSecret,获取AccessToken

这一步,我们请求的地址是https://api.weixin.qq.com/cgi-bin/token,你需要使用GET方法,传递你的AppID和AppSecret。

从结果中,我们可以得知:执行这个操作后,微信会给你返回一个JSON数据包。解析这个数据包,我们就可以获得AccessToken。

有了AccessToken,我们就可以获取不同的小程序二维码了。

微信提供了两个POST获取小程序二维码的接口。你可以根据你的业务需求,自由选择任一接口,获取相应的小程序二维码(参数中的ACCESS_TOKEN部分填入上一步我们获取到的AccessToken)。

获取最新的「菊花式」小程序码,可以使用这个接口:https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN。

想要经典的「狗皮膏药式」QR码,可以使用这个接口:https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

POST请求体中,需要包含小程序的页面地址,以及传入小程序的参数。记住,这个页面必须要在小程序里的进行注册。

本例中,JSON请求体如下:

path:pages/detail/hero/hero?hero=kestrel

发送请求后,微信会直接返回一张制作好的「小程序码」。

现在,扫一扫这张小程序码,看看是不是到了指定页面了?

【注意事项】

除了我们文中举例的接口,微信还开放了另一个与二维码相关的接口,就是「扫普通二维码进入小程序」

开发者自己就可以按照一定规律,自行批量生成QR码。但它需要开发者有已经备案的域名,且个人主体小程序无法使用这个接口。

微信将通过「获取小程序二维码」接口获取的二维码的数量限定在十万个,并且似乎并没有「注销以前生成的二维码」的功能和机制。

所以,如果你有非常大量的小程序二维码生成需求,建议使用普通链接二维码的方式生成QR码。如果需要使用微信提供的二维码生成接口,也要注意不要超过限额。

希望大家在这里都能获得自己需要的东西。

微信小程序生成太阳码

微信小程序生成太阳码

https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token

必须通过POST提交

而且参数必须是JSON的格式

<?php

/**
 * curl请求数据
 *
 * @param string $url 请求地址
 * @param array $param 请求参数
 * @param string $contentType 请求参数格式(json)
 * @return boolean|mixed
 */
function https_request($url = \'\', $param = [], $contentType = \'\'){
    $ch = curl_init();

    // 请求地址
    curl_setopt($ch, CURLOPT_URL, $url);

    // 请求参数类型
    $param = $contentType == \'json\' ? json_encode($param) : $param;

    // 关闭https验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    // post提交
    if($param){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
    }

    // 返回的数据是否自动显示
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // 执行并接收响应结果
    $output = curl_exec($ch);

    // 关闭curl
    curl_close($ch);

    return $output !== false ? $output : false;
}

$access_token="10_X1w4ypXMdfliiv4orym7n7Ur8UMV3LsPAyyBng-DOjcZfAW1mlfKb1BAvBQuBIMUvk_Bq2lv3E2TI8QLvTrnmy1TBxoDeXu_JvR_sobPBkUimmA-aNasktu-J6UWLCgAAAFUL";
$request_url=\'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=\'.$access_token;
$request_data=array(
    \'scene\'=>\'abcdef\',
    \'page\'=>\'pages/home/index\',
    \'width\'=>\'690\'
);

print_r(https_request($request_url,$request_data,\'json\'));

这里有几点需要注意,page参数中的值一定要是小程序中存在的。

这里的access_token是用小程序的Appid和AppSecret生成的。之前还傻乎乎的去开启公众号的APPSecret。

再一个,这里返回的数据,不是JSON数据,而是二维码图片数据。

如何通过postman操作呢?

万能的POSTMAN啊。

{"page":"pages/home/index","scene":"abcdef","width":690}

封装

封装接口

// 获取太阳码
public function get_xcx_code() {
        $uid = $_POST[\'uid\'];
        if (!$uid) {
            $this->json->setErr(\'10001\', \'缺少参数\');
            $this->json->Send();
        }

        // 获取用户信息
        $user_model = M(\'user\');
        $user_info  = $user_model->where([\'id\'=>$uid])->find();
        if (!$user_info) {
            $this->json->setErr(\'10002\', \'用户不存在\');
            $this->json->Send();
        }

        $scene = $user_info[\'invite_code\'];

        vendor(\'Func.Http\');
        $request_data = [
            \'scene\' => $scene,
            \'page\'  => "pages/home/index",
            \'width\' => 690
        ];

        $request_url=\'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=\'.$this->get_access_token();
        $result = Http::doPostJson($request_url,$request_data);
        header(\'Content-Type: image/jpeg; charset=UTF-8\');
        echo $result;exit;
}

处理成base64

// 获取太阳码
public function get_xcx_code() {
        $uid = $_POST[\'uid\'];
        if (!$uid) {
            $this->json->setErr(\'10001\', \'缺少参数\');
            $this->json->Send();
        }

        // 获取用户信息
        $user_model = M(\'user\');
        $user_info  = $user_model->where([\'id\'=>$uid])->find();
        if (!$user_info) {
            $this->json->setErr(\'10002\', \'用户不存在\');
            $this->json->Send();
        }
        $scene = $user_info[\'invite_code\'];
        vendor(\'Func.Http\');
        $request_data = [
            \'scene\' => $scene,
            \'page\'  => "pages/home/index",
//            \'width\' => 690
        ];
        $request_url=\'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=\'.$this->get_access_token();
        $result = Http::doPostJson($request_url,$request_data);
        // ob_clean();
        // header(\'Content-Type: image/png; charset=UTF-8\');
        // echo $result;exit;
        $this->json->setErr(0, \'获取成功\');
        $this->json->setAttr(\'data\',base64_encode($result));
        $this->json->Send();
}

封装post请求

// 通过POST方式发送json数据
static public function doPostJson($url = \'\', $param = [] ,$contentType = \'json\') {
        $ch = curl_init();
        // 请求地址
        curl_setopt($ch, CURLOPT_URL, $url);
        // 请求参数类型
        $param = $contentType == \'json\' ? json_encode($param) : http_build_query($param);
        // 关闭https验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // post提交
        if($param){
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
        }
        // 返回的数据是否自动显示
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // 执行并接收响应结果
        $output = curl_exec($ch);
        // 关闭curl
        curl_close($ch);
        return $output !== false ? $output : false;
}

继续升级

 // 获取太阳码
public function get_xcx_code() {
        $uid = $_POST[\'uid\'];
        if (!$uid) {
            $this->json->setErr(\'10001\', \'缺少参数\');
            $this->json->Send();
        }

        // 查看是否已存储到数据库
        $user_suncode_model = M(\'user_suncode\');
        $user_suncode_info = $user_suncode_model->where([\'uid\'=>$uid])->find();
        if ($user_suncode_info) {
            $this->json->setErr(0, \'获取成功\');
            $this->json->setAttr(\'data\',$user_suncode_info[\'code_imgurl\']);
            $this->json->Send();
        }

        // 获取用户信息
        $user_model = M(\'user\');
        $user_info  = $user_model->where([\'id\'=>$uid])->find();
        if (!$user_info) {
            $this->json->setErr(\'10002\', \'用户不存在\');
            $this->json->Send();
        }
        
        $scene = $user_info[\'invite_code\'];
        vendor(\'Func.Http\');
        $request_data = [
            \'scene\' => $scene,
            \'page\'  => "pages/home/index",
        ];
        $request_url=\'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=\'.$this->get_access_token();
        $result = Http::doPostJson($request_url,$request_data);

        // 存入cdn
        $cdn_result = $this->upload_cdn($result,\'suncode\');

        if ($cdn_result[\'errno\'] == 0) {
            // 存入数据库
            $add_data = [
                \'uid\' => $uid,
                \'code_imgurl\' => $cdn_result[\'save_name\'],
                \'addtime\' => time()
            ];

            $user_suncode_model = M(\'user_suncode\');
            $user_suncode_model->add($add_data);

            $this->json->setErr(0, \'获取成功\');
            $this->json->setAttr(\'data\',$cdn_result[\'save_name\']);
            $this->json->Send();
        } else {
            $this->json->setErr(10099, \'获取失败\');
            $this->json->Send();
        }
}

cdn函数

public function upload_cdn($img_result,$folders="common"){
        $date_folders = date(\'Ymd\',time());
        $savePath =  "site_upload/".$folders.\'/\'.$date_folders.\'/\';// 设置附件上传目录
        if (!is_dir($savePath)){
            @mkdir(\'./\'.$savePath, 0777,true);
        }

        $file_name = time().\'_\'.mt_rand().".png";
        $upload_flag = file_put_contents($savePath.$file_name,$img_result);

        if($upload_flag){
            vendor(\'Qiniu.Qiniu\');
            $qiniu = new Qiniu();

            $img =  C(\'SF_HOST\'). $savePath . $file_name;

            $ext = pathinfo($img, PATHINFO_EXTENSION);
            $name = time() . mt_rand() . \'.\' . $ext;
            $s = $qiniu->up($img, $name, C(\'QINIU.BUCKET\'));

            if($s){
                @unlink(\'./\'.$savePath . $file_name);
                $res[\'errno\']=\'0\';
                $res[\'errmsg\']=\'ok\';
                $res[\'save_name\'] = C(\'CDN.URI\') . $name;
            }else{
                @unlink(\'./\' .$savePath . $file_name);
                $res[\'errno\']=\'10001\';
                $res[\'errmsg\']=\'上传cdn失败\';
            }
        }else{
            $res[\'errno\']=\'10002\';
            $res[\'errmsg\']=\'上传图片失败\';
        }

        return $res;

 }

以上是关于微信小程序码如何生成 微信小程序码生成方法攻略教程大全的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序菊花码生成

微信小程序菊花码生成

参考教程微信小程序分享小程序码的生成(带参数)以及参数的获取

微信小程序生成太阳码

微信小程序怎么弄成二维码?

微信小程序分享小程序码的生成(带参数)以及参数的获取