Code :
<?php
/**
* PHP发送Json对象数据
*
* @param $url 请求url
* @param $jsonStr 发送的json字符串
* @return array
*/
function http_post_json($url, $jsonStr){
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($jsonStr)
)
);
$response = curl_exec($ch);//执行一个cURL会话,成功时返回tru,失败返回false
$err = curl_error($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);//获取最后一次传输的相关信息,最后一个收到的HTTP代码
curl_close($ch);
return array($httpCode, $response, $err);
}
$time = time();
$url = "https://openapi.lechange.cn/openapi/accessToken";
$str = "phone:17691200000,time:{$time},nonce:49735441495760803893403522385895,appSecret:6d5c2c723dbb4ba78fac5a0e9ece81";
$str = md5($str);
$params = array(
"system"=>array(
'ver'=>'1.0',
'sign'=>$str,
'appid'=>'lcce1fdddaa5de4322',
'time'=>"$time",
'nonce'=>'49735441495760803893403522385895'
),
"params"=>array("phone"=>"17691200000"),
"id"=>"80"
);
$jsonparams = json_encode($params);
echo $jsonparams;
list($returnCode, $returnContent, $err) = http_post_json($url, $jsonparams);
echo $returnCode;
var_dump($returnContent);
echo $err;
?>
Pendant le processus d'exécution, deux erreurs seront signalées.
(1)SSL certificate problem: unable to get local issuer certificate。
在php.ini
Après avoir ajouté les deux lignes de code suivantes au fichier, cette erreur disparaît.
curl.cainfo="D:/wamp64/ca-bundle.crt"
openssl.cafile="D:/wamp64/ca-bundle.crt"
(2) Après la disparition de l'erreur ci-dessus, elle est apparue
502 Bad Gateway
The proxy server received an invalid response from an upstream server.
Il n’y a vraiment plus d’autre moyen maintenant. . Même si les paramètres ou la signature sont erronés, l'autre serveur renverra un code d'erreur, mais ce 502 ne donne même pas la possibilité de renvoyer le code d'erreur. Demandez à Dieu de vous aider à le résoudre.
Pourquoi le serveur Wamp obtient-il 502 ? 502 est une erreur de proxy inverse.
Votre apache+php+mysql+windows local fonctionne-t-il en mode proxy inverse ou en mode gestionnaire apache2 ?
De toute évidence, le site Web de l'autre partie est en panne... Lorsque je l'ouvre directement dans le navigateur, il obtient également 502
L'invite est plus évidente. Il y a un problème avec le service backend, donc l'amont renvoie un 502.
Le service backend de l'autre partie a renvoyé un résultat que le proxy n'a pas accepté en répondant à votre demande (généralement 4XX, 5XX).
Il existe deux situations :
Le service backend de l'autre partie pensait à l'origine qu'il ne devrait pas y avoir de résultats 5XX (ou le service backend de l'autre partie est en panne), donc en amont ne prend pas en charge l'acceptation de tels résultats. Il s'agit de demander à l'autre partie de modifier le service et de ne pas renvoyer d'erreur 5xx.
Si le service backend de l'autre partie estime qu'il prend en charge l'utilisation de 4xx/5xx pour représenter certains résultats (courant dans les services Restful), alors l'autre partie doit modifier la configuration en amont pour prendre en charge que ces résultats soient renvoyés comme des résultats normaux.
Définir : CURLOPT_SSL_VERIFYPEER => faux
Page de demande, débogage de l'interface, utilisez postman. Un outil très utile. En simulant une requête, vous pouvez facilement obtenir le code de l'instance de requête