我正在尝试使用avalara.net中的API获取增值税数据,他们的API文档列出了一行实质上是带有JSON格式长字符串的代码,用于通过cURL连接到他们的API;我不熟悉这种单一字符串样式,正在尝试将其转换为遵循php手册样式的格式,例如通过curl_setopt()设置选项,而不是像-u和-d这样的内联命令,但我没有取得任何进展。
我已经研究过php-将curl命令行实现到php,尝试过,但出现了错误,并添加了他们的解决方案-由于我没有收到任何错误消息,我不知道我的问题是否相同,但添加CURLOPT_FOLLOWLOCATION似乎不会有什么坏处。似乎没有什么区别。
我还查看了php代码中的convert curl line命令,但它没有帮助,因为我的代码中已经有curl_exec(),并且一直在阅读php手册页。
他们的代码可以在https://github.com/avadev/AvaTax-Calc-REST-cURL/blob/master/tax-get-POST.txt相关部分为:
curl -u <AccountNumber>:<LicenseKey> -H "Content-Type: text/json" -d '{
--long string of data omitted; see link above for full data--
}' "https://development.avalara.net/1.0/tax/get"
我做了一些研究,发现-u代表用户名/密码,-H是一个特殊的标头,-d代表要发送的数据。。。这就是我所做的:
// Identify the target URL
$url = 'https://development.avalara.net/1.0/tax/get';
// Start the process
$curl = curl_init($url);
// Tell cURL to fail if an error occurs
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
// Allow for redirects; we don't know how avalara might route requests
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
// Assign the returned data to a variable
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// Set the timeout
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
// Make sure to use POST method
curl_setopt($curl, CURLOPT_POST, 1);
// Set cURL to use a login:password for access
curl_setopt($curl, CURLOPT_USERPWD, "[1100033004]:[1FC8AED1543C699B]");
// Add some custom header info
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: text/json'));
// Use Heredoc syntax to encapsulate data, to avoid having to escape a million quotes
$data = <<<EOD
{
"DocDate": "2013-12-23",
"CustomerCode": "12345678123456781234567812345678",
"CompanyCode": "EGU",
"DocType": "SalesInvoice",
"Commit": false,
"Client": "Cool ERP,3,5",
"DocCode": "29",
"DetailLevel": "Tax",
"CustomerUsageType": "G",
"ExemptionNo": "12334",
"Discount": 0,
"PurchaseOrderNo":"PO 23423",
"ReferenceCode":"",
"PosLaneCode":"",
"BusinessIdentificationNo":"",
"TaxOverride":
{
"Reason":"Item Returned",
"TaxDate":"2013-05-05",
"TaxOverrideType":"TaxDate"
},
"Addresses":
[
{
"AddressCode": "Origin",
"Line1": "269",
"Line2": "7723 Tylers Place Blvd",
"City": "West Chester",
"Region": "OH",
"PostalCode": "45069-4684",
"Country": "US"
},
{
"AddressCode": "Dest",
"Line1": "1060 W. Addison St",
"City": "Chicago",
"Region": "IL",
"PostalCode": "60613-4566",
"Country": "US"
}
],
"Lines":
[
{
"LineNo": "00001",
"DestinationCode": "Dest",
"OriginCode": "Origin",
"ItemCode": "SP-001",
"Description": "Eyeglasses",
"TaxCode": "PC030147",
"Qty": 1,
"Amount": 100
}
]
}
EOD;
// That EOD ends the encapsulation via Heredoc syntax
// Note that the actual code does not indent the closing of Heredoc; only indented for stack overflow code view
// Set the POST data
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
// Execute the transaction
$r = curl_exec($curl);
// Close the connection
curl_close($curl);
// Print the results for debugging
print_r($r);
然而,当我尝试查看网页时,我什么也看不到——没有错误消息,没有结果,什么都没有。
我已经看了stackoverflow和php手册中的其他一些帖子——我现在甚至不确定如何调试它,因为我没有收到任何错误消息。任何想法都将不胜感激。
这是一个演示示例,演示在PHP中使用API,这可能会帮助您将一些数据发布到API
$url = '<your url here>';
$curl = curl_init($url);
$data_string = '[
{
"FirstName": "Value"
},
{
"EmailAddress": "Value"
},
{
"Phone": "Value"
}
]';
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json',
'Content-Length:'.strlen($data_string)
));
$json_response = curl_exec($curl);
$curl_errorno = curl_errno($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($status) {
echo 'Status is 200 OK! ';
}else{
echo "Sorry Something went wrong. Please retry!";
curl_close($curl);
}
弄清楚你在状态代码中得到了什么,这将对你有所帮助。编辑
这将是你的价值
$data_string=
'{
"DocDate": "2013-12-23",
"CustomerCode": "12345678123456781234567812345678",
"CompanyCode": "EGU",
"DocType": "SalesInvoice",
"Commit": false,
"Client": "Cool ERP,3,5",
"DocCode": "29",
"DetailLevel": "Tax",
"CustomerUsageType": "G",
"ExemptionNo": "12334",
"Discount": 0,
"PurchaseOrderNo": "PO 23423",
"ReferenceCode": "",
"PosLaneCode": "",
"BusinessIdentificationNo": "",
"TaxOverride": {
"Reason": "Item Returned",
"TaxDate": "2013-05-05",
"TaxOverrideType": "TaxDate"
},
"Addresses": [
{
"AddressCode": "Origin",
"Line1": "269",
"Line2": "7723 Tylers Place Blvd",
"City": "West Chester",
"Region": "OH",
"PostalCode": "45069-4684",
"Country": "US"
},
{
"AddressCode": "Dest",
"Line1": "1060 W. Addison St",
"City": "Chicago",
"Region": "IL",
"PostalCode": "60613-4566",
"Country": "US"
}
],
"Lines": [
{
"LineNo": "00001",
"DestinationCode": "Dest",
"OriginCode": "Origin",
"ItemCode": "SP-001",
"Description": "Eyeglasses",
"TaxCode": "PC030147",
"Qty": 1,
"Amount": 100
}
]
}'
答案像一样将大括号从这行中删除
curl_setopt($curl, CURLOPT_USERPWD, "1100033004:1FC8AED1543C699B");