欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Perl获取微信小程序二维码

程序员文章站 2022-04-29 13:45:48
...

微信小程序API:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html

 

# 参数 $path即页面路径,比如:"pages/index?query=1"

sub get_wxa_code {

    my ($fid, $path) = @_;

 

    my $ret = get_access_token();  #获取access_token

    my $image_fid = "";

    my $json = JSON->new();

    if (length($ret->{access_token})) {

        my $post_data;

        $post_data->{path} = $path;

        #$post_data->{width} = 430;

        #$post_data->{auth_color} = 1;

        #$post_data->{line_color} = {"r"=>"0","g"=>"0","b"=>"0"};

 

        my $param_json_str =$json->encode($post_data);

        my $header = HTTP::Headers->new( Content_Type => 'application/json; charset=utf8', );

        my $http_request = HTTP::Request->new( POST => "https://api.weixin.qq.com/wxa/getwxacode?access_token=".$ret->{access_token}, $header, $param_json_str );

        my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0, SSL_verify_mode => 0x00 });

        $ua->timeout(3);

        my $response = $ua->request($http_request);

        if ($response->message ne "OK" && $response->is_success ne "1") { #出错,或者timeout了

                return "timeout";

        } else { # 如果成功,则返回的是图片对应的二进制内容,这里直接写到文件保存

                my $file = "/var/www/wechat/files/".$fid;   #目录要有读写权限

                open(LOCAL, ">$file");

                binmode(LOCAL); #内容为二进制格式

                print LOCAL $response->content();

                close LOCAL;

                if (-s $file ) { #判断是否写成功

                        $image_fid = $fid;

                } else {

                        return "write file failed";

                }

        }

    } else {

        return "get access_token failed";

    }

    return $image_fid;

}