微信支付成功,更改订单状态本来用curl调用java接口已经调通,后来需求变成了多店支付问题,然后也因为多个环境来回切换便弄了多个文件,通过软连接形式调用,发现总是更改订单状态失败
$oIdAndPId=$arr['out_trade_no'];
$domain=" http://xxx.beta.xxx.com/trade/getOrderStatusByP";
$_url = $domain."?out_trade_no=".$oIdAndPId;//这里out_trade_no就是给java传递的paymentId去更改payment表的支付状态
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS);
$output = curl_exec($ch);
$a=curl_errno($ch);
if($a) {
return curl_error($ch);
} else {
$ret = json_decode($output, true);
if ($ret['status'] == 0) {
file_put_contents("/server/logs/notify_success.txt", "_url ={$_url} \t \t output_success=" . var_export($output, true) . "\t date=" . date('Y-m-d H:i:s', time()) . " \r\n", FILE_APPEND);
return true;
} else {
file_put_contents("/server/logs/notify_fail.txt", "_url ={$_url} \t \t output_fail=" . var_export($output, true) . "\t date=" . date('Y-m-d H:i:s', time()) . " \r\n", FILE_APPEND);
return false;
}
}
1、记录日志发现$a输出错误码1
CURLE_UNSUPPORTED_PROTOCOL(1)
你的URL传递给libcurl的使用协议,这libcurl的不支持。支持可能是你没有使用一个编译时的选项,它可以是一个拼写错的协议字符串,或者只是一个协议的libcurl没有代码。
$ch = curl_init();发现输出null
根本不知道说的啥意思,然后百度说看phpinfo()查看是否安装curl相关类库,输出发现有,也不是这个问题,而且在其他文件写了简单的demo测试发现能使用curl
2、怀疑接口不是用post方式传输,改成get了,尝试把curl_setopt($ch, CURLOPT_POST, 1);去掉或者改为0发现还是不可以
3、 查看连接curl具体错误,获取一个cURL连接资源句柄的信息
$info = curl_ getinfo( $ch );
返回如下代码:
array (
'url' => ' http://xxx.beta.xxx.com/trade/getOrderStatusByP?out_trade_no=1349161_309712298',
'content_type' => NULL,
'http_code' => 0,
'header_size' => 0,
'request_size' => 0,
'filetime' => -1,
'ssl_verify_result' => 0,
'redirect_count' => 0,
'total_time' => 0,
'namelookup_time' => 0,
'connect_time' => 0,
'pretransfer_time' => 0,
'size_upload' => 0,
'size_download' => 0,
'speed_download' => 0,
'speed_upload' => 0,
'download_content_length' => -1,
'upload_content_length' => -1,
'starttransfer_time' => 0,
'redirect_time' => 0,
'certinfo' =>
array (
),
'primary_ip' => '',
'redirect_url' => '',
)
发现content_type为null,添加如下代码
$header[] = "Content-type: application/x-www-form-urlencoded";
curl_setopt($oCurl, CURLOPT_HTTPHEADER,$header);
还是不可以
4、发现软连接文件所属组和所有用户不对,其他的都是develop,只有这个文件是root
更改了所有组和所有者发现还是不可以
5、回想这次和上次的变化,应该只有软连接这块,然后对比之前文件方法,发现双引号中间有个空格,然后去掉发现可以
$domain=" http://mobile.beta.yiwang.com/trade/getOrderStatusByP";
然后看curl_errno($ch);输出的提示
你的URL传递给libcurl的使用协议,这libcurl的不支持。支持可能是你没有使用一个编译时的选项,它可以是一个拼写错的协议字符串,或者只是一个协议的libcurl没有代码。
网友评论