我有一个使用Perl和Tk的应用程序,我们使用的Perl版本是v5.30.3,我编写了一个程序,用于与REST通信,发送JSON数据。
这是程序
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
我尝试过添加包,更新包。
发布于 2022-10-28 16:51:02
我怀疑您需要将LWP::Protocol::https绑定到已编译的.exe中。我怀疑这一点,因为从您展示的错误消息中可以看出,https: URL被解析为LWP::Protocol::foreign。LWP::Protocol::https可能比较棘手,因为它的依赖关系最终需要外部SSL库。
https://stackoverflow.com/questions/74227870
复制相似问题