Perl 微信模块--Weixin::Client

package Weixin::Client;
use strict;
use File::Spec;
use Weixin::Util;
use LWP::UserAgent;
use Weixin::UserAgent;
use LWP::Protocol::https;

use base qw(
    Weixin::Message 
    Weixin::Client::Callback
    Weixin::Client::Operate
    Weixin::Client::Friend
    Weixin::Client::Chatroom
    Weixin::Client::Request 
    Weixin::Client::Cron
    Weixin::Client::Plugin
    Weixin::Client::Base
);

our $VERSION = "2.0";

sub new{
    ##$class 是Weixin::Client
    my $class = shift;
	##%pdebug0  是传入的my $client = Weixin::Client->new(debug=>0);  
    my %p = @_;
    my $agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062'; 
    my $tmpdir = File::Spec->tmpdir();
    my $cookie_filename = $p{login_file} || "$tmpdir/weixin_client_login.dat";
    my $self = {
        cookie_jar              => HTTP::Cookies->new(hide_cookie2=>1,file=>$cookie_filename,autosave=>1),
        debug                   => $p{debug},
        _token                  => {},
        _watchers               => {},
        _intervals              => {},
        _synccheck_error_count  => 0,
        _synccheck_running      => 0,
        _sync_running           => 0,
        _sync_interval          => 1,
        _synccheck_interval     => 1,
        _send_msg_interval      => 4,
        _last_sync_time         => undef,
        _last_synccheck_time    => undef,
        _send_message_queue     => Weixin::Message::Queue->new,
        _receive_message_queue  => Weixin::Message::Queue->new,       
        _data       => {
            user                => {},  
            friend              => [],
            chatroom            => [],
        },
        on_run                  => undef,
        on_receive_msg          => undef,
        on_send_msg             => undef,
        is_stop                 => 0,
        plugin_num              => 0,
        plugins                 => {},
        ua_retry_times          => 5,
        tmpdir                  => $tmpdir,
        client_version          => $VERSION,
    };
    $self->{ua} = LWP::UserAgent->new(
        cookie_jar      =>  $self->{cookie_jar},
        agent           =>  $agent,
        timeout         =>  300,
        ssl_opts        =>  {verify_hostname => 0},
    );
    $self->{asyn_ua} = Weixin::UserAgent->new(
        cookie_jar  =>  $self->{cookie_jar},
        agent       =>  $agent,
        request_timeout =>  300,
        inactivity_timeout  =>  300,
    );

    if($self->{debug}){
        $self->{ua}->add_handler(request_send => sub {
            my($request, $ua, $h) = @_;
            print $request->as_string;
            return;
        });
        $self->{ua}->add_handler(
            response_header => sub { my($response, $ua, $h) = @_;
            print $response->as_string;
            return;
            
        });
        $self->{ua}->add_handler(
            response_done => sub { my($response, $ua, $h) = @_;
            print substr($response->content,0,1000),"
" if $response->header("content-type")=~/^text/;
            return;
        });
    }
	##bless bless 的好处在于它提供给我们一种直接使用该对象的方式,如: bless后 $self 作为方法的第一个参数
	#sub add_friend{
    #my $self = shift;
    #my $friend = shift;
	#在这里,它是RegularEmployee.Perl于是就会如下所示调用这个函数 RegularEmployee::promote($emp1)


    #换句话说,箭头左边的对象只是作为相应子例程的第一个参数。
	#
    bless $self,$class;
    $self->prepare();
    return $self;
}



1;



原文地址:https://www.cnblogs.com/hzcya1995/p/13351096.html