今天遇到一个问题,和对方互发api接口交换数据时,我放发送的数据对方接受不到,对方发送的数据我发接收不到。
发送数据问题解决:
使用curl发送post请求
private function send_post($url, $data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
$info = curl_exec($curl);
curl_close($curl);
return $info;
}
敲重点:
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
添加这个header头
接收数据问题解决:
对方回调的数据格式是这样的,试了$_POST无法拿到数据。
查询资料后发现需要获取到访问请求的原始数据才能顺利拿到数据,后面就是对数据操作。
$data = file_get_contents("php://input");
$data = explode(',',$data);
foreach($data as $v){
if(strpos(explode(':',$v)[0],'pay_id')){
$out_trade_no = str_replace('"','',explode(':',$v)[1]);
}elseif(strpos(explode(':',$v)[0],'order_id')){
$pay_trade_no = str_replace('"','',explode(':',$v)[1]);
}elseif(strpos(explode(':',$v)[0],'uuid')){
$out_username = str_replace('"','',explode(':',$v)[1]);
}elseif(strpos(explode(':',$v)[0],'status')){
$out_trade_status = str_replace('"','',explode(':',$v)[1]);
}elseif(strpos(explode(':',$v)[0],'token_value')){
$actamount = str_replace('"','',explode(':',$v)[1]);
}
}