Perl获取微信小程序二维码

微信小程序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;

}

相关推荐