日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php对接钉钉_PHP使用POST方法与钉钉对接无返回结果的问题

發(fā)布時間:2024/2/28 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php对接钉钉_PHP使用POST方法与钉钉对接无返回结果的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

現(xiàn)在公司轉(zhuǎn)向釘釘了,為了更好的與內(nèi)部系統(tǒng)的結(jié)合,API對接是必然的,于是開始了接口調(diào)試,GET時發(fā)現(xiàn)一切正常,但在POST下發(fā)現(xiàn)無返回值,環(huán)境檢查過也正常。

function Post(string $url,array $data){

$data=json_encode($data,JSON_UNESCAPED_UNICODE);

$ch = curl_init($url.$this->Toke());

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data)));

$response = curl_exec($ch);

return $response;

}

從代碼上看起來貌似也合理,當(dāng)排除了所有可能性的時候,突然發(fā)現(xiàn)接口地址是https,于是可能發(fā)現(xiàn)是證書驗證問題,于是加上以下兩句代碼:

溫馨提示: 此處內(nèi)容需要 評論本文 ,待審核后 稍后回來刷新本頁 才能查看!我直接忽略了證書的驗證,當(dāng)然測試沒關(guān)系,正式使用加上證書即可

關(guān)于雙向驗證我找到了一個例子SHOW一下

curl_setopt($ch, CURLOPT_VERBOSE, '1');

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '1');

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');

curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/cert/ca.crt');

curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/cert/mycert.pem');

curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'password');

?>

/**

*

@name ssl Curl Post數(shù)據(jù)

*

@param string $url 接收數(shù)據(jù)的api

*

@param string $vars 提交的數(shù)據(jù)

*

@param int $second 要求程序必須在$second秒內(nèi)完成,負(fù)責(zé)到$second秒后放到后臺執(zhí)行

*

@return string or boolean 成功且對方有返回值則返回

*/

function curl_post_ssl($url,

$vars,

$second=30,$aHeader=array())

{

$ch =

curl_init();

//curl_setopt($ch,CURLOPT_VERBOSE,'1');

curl_setopt($ch,CURLOPT_TIMEOUT,$second);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,

1);

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');

curl_setopt($ch,CURLOPT_SSLCERT,'/data/cert/php.pem');

curl_setopt($ch,CURLOPT_SSLCERTPASSWD,'1234');

curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');

curl_setopt($ch,CURLOPT_SSLKEY,'/data/cert/php_private.pem');

if(

count($aHeader)

>= 1 ){

curl_setopt($ch,

CURLOPT_HTTPHEADER, $aHeader);

}

curl_setopt($ch,CURLOPT_POST,

1);

curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);

$data =

curl_exec($ch);

curl_close($ch);

if($data)

return $data;

else

return false;

}

參數(shù)解釋:

CURLOPT_TIMEOUT:超時時間

CURLOPT_RETURNTRANSFER:是否要求返回數(shù)據(jù)

CURLOPT_SSL_VERIFYPEER:是否檢測服務(wù)器的證書是否由正規(guī)瀏覽器認(rèn)證過的授權(quán)CA頒發(fā)的

CURLOPT_SSL_VERIFYHOST:是否檢測服務(wù)器的域名與證書上的是否一致

CURLOPT_SSLCERTTYPE:證書類型,”PEM” (default), “DER”, and”ENG”.

CURLOPT_SSLCERT:證書存放路徑

CURLOPT_SSLCERTPASSWD:證書密碼

CURLOPT_SSLKEYTYPE:私鑰類型,”PEM” (default), “DER”, and”ENG”.

CURLOPT_SSLKEY:私鑰存放路徑

由于php的curl只支持pem格式、der、eng格式,而之前生成的是p12的格式,所以需要轉(zhuǎn)換一下

PKCS#12 到 PEM 的轉(zhuǎn)換

openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem

驗證

openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem

總結(jié)

以上是生活随笔為你收集整理的php对接钉钉_PHP使用POST方法与钉钉对接无返回结果的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。