저는 이것이 매우 오래된 Perl 모듈이라는 것을 알고 있습니다 (지난 업데이트 이후 5 년 전). Perl에서해야하는 프로젝트에 유용하다는 것을 알았습니다. 아래에서 위로 시작하기보다는 기본을 수행하는 것이 도움이된다는 것을 알았습니다. 나는 이미 그것과 몇 가지 버그를 수정했습니다 - 그러나 이것은 나는 문제의 모듈은Net :: Kashflow - utf8 설명과 함께 작동하지 않습니다.
알아낼 수 없습니다 : https://github.com/simoncozens/Net-KashFlow는
문제와 사용 예는 다음과 같습니다
my $kf = Net::KashFlow->new(username => q|[email protected]|, password => "xxxx");
my $i = $kf->create_invoice({
CustomerReference => "0123-1111111", CustomerID => 50108952,
CurrencyCode => "EUR"
}) || die $!;
$i->add_line({
Quantity => 1,
Description => "íéó foo bar test",
Rate => 10,
VatAmount => 4,
VatRate => 0,
CurrencyCode => "GBP"
});
이 항목은 추가됩니다 만, "설명"값으로 변환됩니다 :
7enzIGZvbyBiYXIgdGVzdA의 ==
정상적인 a-z 0-9를 사용하면 올바르게 작동하고 올바르게 작동합니다. 문제는 base64로 인코딩 한 다음 상대방에서 제대로 디코딩되지 않는 것 같습니다. 내 추측에 따르면 KashFlow는이 문제를 "고칠 것"이 아니므로 실제로이 작업을 수행해야합니다. 나는 SOAP :: Lite 모듈에 익숙하지 않다. (다시 말하지만 꽤 오래된 모듈이다.)하지만 그것이 사용하는 것이다.
이
내가 생각하는 부분입니다 송장에 새로운 "라인"을 추가로 거래 : 현재 구조를 볼 수 있습니다InsertInvoiceLine => {
endpoint => 'https://securedwebapp.com/api/service.asmx',
soapaction => 'KashFlow/InsertInvoiceLine',
namespace => 'KashFlow',
parameters => [
SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
SOAP::Data->new(name => 'InvoiceID', type => 'xsd:int', attr => {}),
SOAP::Data->new(name => 'InvLine', type => 'tns:InvoiceLine', attr => {}),=> {})
], # end parameters
}, # end InsertInvoiceLine
:이 연구 한 후
https://securedwebapp.com/api/service.asmx?op=InsertInvoiceLine
을, SOAP :: Lite ~ 이 아닌은 utf8을 base64로 변환합니다 (예 : 가정) :
0을 사용하는 것이 좋습니다.구조는 다음
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<InsertInvoiceLine xmlns="KashFlow">
<UserName>string</UserName>
<Password>string</Password>
<InvoiceID>int</InvoiceID>
<InvLine>
<Quantity>decimal</Quantity>
<Description>string</Description>
<Rate>decimal</Rate>
<ChargeType>int</ChargeType>
<VatRate>decimal</VatRate>
<VatAmount>decimal</VatAmount>
<ProductID>int</ProductID>
<Sort>int</Sort>
<ProjID>int</ProjID>
<LineID>int</LineID>
<ValuesInCurrency>integer</ValuesInCurrency>
</InvLine>
</InsertInvoiceLine>
</soap:Body>
</soap:Envelope>
그래서 그 바디> InsertInvoiceLine> InvLine> 설명처럼 보인다 ..하지만 난 그 특정 문자열을 인코딩하지 말 것을 말할 수있는 방법을 확실 해요.
모든 조언을 주시면 감사하겠습니다. 주요 쇼 스토퍼 (모든 데이터가 시스템에 있음)는 아니지만 항목 이름이 예상대로 표시되는 것이 훨씬 더 편리합니다.
감사합니다.
답장을 보내 주셔서 감사합니다. 나는 그것이 단순하지 않다고 느꼈다. 나는 "정상적인"문자를 대체 할 것이라고 생각하고있다 :'{{{{{AAAaaaCcEEEEeeeeIIIiiOoooUUUuuu}}; 이것은 나 자신을위한 백엔드 인보이스 시스템 일 뿐이므로 적절한 억양이 필요하지 않습니다. –