php中curl要求httpsインターフェースデータ
1726 ワード
ネット上のケースでは、curlの一般的な書き方は以下の通りです。
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,'http://127.0.0.1');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// , ,
$data=curl_exec($curl);
curl_close($curl);
var_dump($data);
以上のように簡単なhttpの要求が得られますが、httpsのアドレスであれば違います。証明書のせいで証明書を無視する検証を設定します。直接呼び出しを無視しない、curl_exec()はBooleanのfalseに戻ります。$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,'https://api.mch.weixin.qq.com/pay/unifiedorder');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//
$data=curl_exec($curl);
curl_close($curl);
var_dump($data);
入力して検証したいなら、証明書を設定し、以下の設定(ユーザーの参照)を入れてください。単純にインターフェースを呼び出すのは上のコードだけでいいです。curl_setopt($curl, CURLOPT_CAINFO, '/cert/ca.crt');
curl_setopt($curl, CURLOPT_SSLCERT, '/cert/cert.pem');
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, 'password');
最後のパラメータの問題は、WeChatを呼び出して注文インターフェースを統一する時に、転送が必要な時のxmlデータです。だから私はこのように書きました。$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,'https://api.mch.weixin.qq.com/pay/unifiedorder');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);//
curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: text/xml;charset=utf-8"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'hhhhhhh ');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$data=curl_exec($curl);
curl_close($curl);
var_dump($data);
postはxmlデータをファイル型のバイナリデータに符号化します。