首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过包"URI::foreign“在PERL2EXE_STORAGE/LWP/Protocol/http.pm第157行找到对象方法"host”

无法通过包"URI::foreign“在PERL2EXE_STORAGE/LWP/Protocol/http.pm第157行找到对象方法"host”
EN

Stack Overflow用户
提问于 2022-10-27 20:18:30
回答 1查看 42关注 0票数 1

我有一个使用Perl和Tk的应用程序,我们使用的Perl版本是v5.30.3,我编写了一个程序,用于与REST通信,发送JSON数据。

这是程序

代码语言:javascript
复制
use REST::Client;
use JSON;
use Data::Dumper;

@reference = undef; @authCode = undef; @line = undef; $num = 0;

$merchantId = 1000005;

@posData = undef;

$posData[1] = 'Manual';     #panCaptureMethod
$posData[2] = 'false';      #cardPresent
$posData[3] = 'Attended';       #deviceAttendance
$posData[4] = 'KeyedOnly';      #deviceInputCapability
$posData[5] = 'OnPremise';      #deviceLocation
$posData[6] = 'Supported';      #partialApprovalSupport
$posData[7] = 'Unknown';        #pinCaptureCapability

$index = (index($exp, "/"));
$month = substr($exp,0,$index);
$year  = substr($exp,$index+1);


    my $client = REST::Client->new();
    $client->setHost("https://sandbox.api.mxmerchant.com/checkout/v3/");        
    $client->addHeader('Accept', 'application/json');
    $client->addHeader('Content-Type', 'application/json');
    $client->addHeader('Authorization', 'Basic TkxvTXhDdlNzaWpSNFJkOHFPWEx5QV=');           

    $amt = sprintf('%.2f',$amt);
    %rec_hash = (
        merchantId => $merchantId,
        tenderType => "Card",
        amount => $amt,
        paymentType => "Sale",
        cardAccount => {
                number => $card,
                expiryMonth => $month,
                expiryYear => $year,
                cvv => $cvv,
                avsStreet => $GA_A[6],
                avsZip => $zip
        },
        customer => {
                name => $name,
                firstName => $fname,
                lastName => $lname
        },
        posData => {
                cardholderPresence => $cardholderPresence,
                panCaptureMethod => $posData[1],
                cardPresent => $posData[2],
                deviceAttendance => $posData[3],
                deviceInputCapability => $posData[4],
                deviceLocation => $posData[5],
                partialApprovalSupport => $posData[6],
                pinCaptureCapability => $posData[7]
        }
    );


    my $json = encode_json \%rec_hash;

    $client->POST('payment?echo=true', $json);
    $response = $client->responseContent();
    $json_data = decode_json($response);

    $error = 'NO';
    $status = $json_data->{status};
    $authMessage = $json_data->{authMessage};
    $errorCode = $json_data->{errorCode};
    $errorMessage = $json_data->{message};

    $message = $authMessage;
    if ($errorCode ne '')
    {
        $error = 'YES';
        $status = $errorCode;
        $message = $errorMessage;
    }

    $reference = $json_data->{reference};
    $authCode = $json_data->{authCode};

return($status, $message, $error);

当我使用perl.exe和环境变量中所有必需的path语句运行这个程序时,它可以工作。它发出了请求,我得到了正确的回应。

我遇到的问题是,当我在测试环境中使用编译好的.exe时,它不能工作。主机没有收到任何类型的请求,$response中的数据是

无法通过包“URI::line”在PERL2EXE_STORAGE/LWP/Protocol/http.pm第157行找到对象方法"host“

要创建已编译的exe,我将使用Indigo Perl2exe

我尝试过添加包,更新包。

EN

回答 1

Stack Overflow用户

发布于 2022-10-28 16:51:02

我怀疑您需要将LWP::Protocol::https绑定到已编译的.exe中。我怀疑这一点,因为从您展示的错误消息中可以看出,https: URL被解析为LWP::Protocol::foreign。LWP::Protocol::https可能比较棘手,因为它的依赖关系最终需要外部SSL库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74227870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档