我一直在使用API,我曾经运行过一个cron作业,并且每隔5分钟就进行一次API调用。最近,他们推出了类似于PayPal IPN的功能,一旦订单得到响应,它就会发布变量。
我确实打印了帖子变量并邮寄它以查看响应的内容。这是我使用的代码。
$post_var = "Results: " . print_r($_POST, true);
mail('email@mail.com', "Post Variables", $post_var);
我收到了邮件。
Results: Array
(
[--------------------------918fc8da7040954f
Content-Disposition:_form-data;_name] => "ID"
1
--------------------------918fc8da7040954f
Content-Disposition: form-data; name="TXN"
1234567890
--------------------------918fc8da7040954f
Content-Disposition: form-data; name="Comment"
This is a test comment
--------------------------918fc8da7040954f
Content-Disposition: form-data; name="ConnectID"
1
--------------------------918fc8da7040954f
Content-Disposition: form-data; name="ConnectName"
Test Connect (nonexisting)
--------------------------918fc8da7040954f
Content-Disposition: form-data; name="Status"
Unavailable
--------------------------918fc8da7040954f
Content-Disposition: form-data; name="CallbackURL"
http://www.example.com/ipn
--------------------------918fc8da7040954f--
)
现在我需要ID的值,即1,TXN,即1234567890等,我从未使用过这些数组。我该如何进行以及我实际得到的回应是什么。这是cUrl响应还是多部分表单数据响应?
请尽可能向我解释。
答案 0 :(得分:1)
即使这个问题已经有6个月了,我也会在这里添加我的回复,因为我刚遇到这个问题并且无法在线找到简单的解析器。
假设$response
包含您的多部分内容:
// Match the boundary name by taking the first line with content
preg_match('/^(?<boundary>.+)$/m', $response, $matches);
// Explode the response using the previously match boundary
$parts = explode($matches['boundary'], $response);
// Create empty array to store our parsed values
$form_data = array();
foreach ($parts as $part)
{
// Now we need to parse the multi-part content. First match the 'name=' parameter,
// then skip the double new-lines, match the body and ignore the terminating new-line.
// Using 's' flag enables .'s to match new lines.
$matched = preg_match('/name="?(?<key>\w+).*?\n\n(?<value>.*?)\n$/s', $part, $matches);
// Did we get a match? Place it in our form values array
if ($matched)
{
$form_data[$matches['key']] = $matches['value'];
}
}
// Check the response...
print_r($form_data);
我确信这种方法有很多警告,所以你的里程可能会有所不同,但它满足了我的需求(解析BitBucket片段API响应)。欢迎任何意见/建议。