首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
协程环境下curl访问微信支付接口出错
问题:swoole开启SWOOLE_HOOK_CURL调用微信支付退款接口要时需要传证书,报错 ```swoole_curl_setopt(): option[10086] is not supported```,请问下怎么解决 这些方法均无法使用 ``` curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, $sslKeyPath); ``` 以下是微信支付官方SDK的PHP代码 ```php protected static function postXmlCurl($url, $xml, $useCert = false, $second = 30) { $ch = curl_init(); $curlVersion = curl_version(); $ua = "WXPaySDK/3.0.9 (".PHP_OS.") PHP/".PHP_VERSION." CURL/".$curlVersion['version']." " .WechatPayConfig::$merchant_id; //设置超时 curl_setopt($ch, CURLOPT_TIMEOUT, $second); $proxyHost = WechatPayConfig::$proxyHost; $proxyPort = WechatPayConfig::$proxyPort; //如果有配置代理这里就设置代理 if($proxyHost != "0.0.0.0" && $proxyPort != 0){ curl_setopt($ch,CURLOPT_PROXY, $proxyHost); curl_setopt($ch,CURLOPT_PROXYPORT, $proxyPort); } curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 curl_setopt($ch,CURLOPT_USERAGENT, $ua); //设置header curl_setopt($ch, CURLOPT_HEADER, FALSE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($useCert == true){ //设置证书 //使用证书:cert 与 key 分别属于两个.pem文件 //证书文件请放入服务器的非web目录下 $sslCertPath = WechatPayConfig::$sslCertPath; $sslKeyPath = WechatPayConfig::$sslKeyPath; curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, $sslKeyPath); } //post提交方式 curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); //运行curl $data = curl_exec($ch); //返回结果 if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); curl_close($ch); throw new \Exception("请求支付平台出错:$error",310001); } } ```
发布于6年前 · 14 次浏览 · 来自
提问
xmsite
问题:swoole开启SWOOLE_HOOK_CURL调用微信支付退款接口要时需要传证书,报错 ```swoole_curl_setopt(): option[10086] is not supported```,请问下怎么解决 这些方法均无法使用 ``` curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, $sslKeyPath); ``` 以下是微信支付官方SDK的PHP代码 ```php protected static function postXmlCurl($url, $xml, $useCert = false, $second = 30) { $ch = curl_init(); $curlVersion = curl_version(); $ua = "WXPaySDK/3.0.9 (".PHP_OS.") PHP/".PHP_VERSION." CURL/".$curlVersion['version']." " .WechatPayConfig::$merchant_id; //设置超时 curl_setopt($ch, CURLOPT_TIMEOUT, $second); $proxyHost = WechatPayConfig::$proxyHost; $proxyPort = WechatPayConfig::$proxyPort; //如果有配置代理这里就设置代理 if($proxyHost != "0.0.0.0" && $proxyPort != 0){ curl_setopt($ch,CURLOPT_PROXY, $proxyHost); curl_setopt($ch,CURLOPT_PROXYPORT, $proxyPort); } curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 curl_setopt($ch,CURLOPT_USERAGENT, $ua); //设置header curl_setopt($ch, CURLOPT_HEADER, FALSE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($useCert == true){ //设置证书 //使用证书:cert 与 key 分别属于两个.pem文件 //证书文件请放入服务器的非web目录下 $sslCertPath = WechatPayConfig::$sslCertPath; $sslKeyPath = WechatPayConfig::$sslKeyPath; curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, $sslKeyPath); } //post提交方式 curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); //运行curl $data = curl_exec($ch); //返回结果 if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); curl_close($ch); throw new \Exception("请求支付平台出错:$error",310001); } } ```
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-04-13
鲁飞
已增加支持。https://github.com/swoole/library/pull/22 可以等Swoole发布版本或者使用`composer`加载`swoole/library:dev-master`
赞
0
回复
2020-04-14
xmsite
回复
鲁飞
请问下s'woole新版本啥时候发
赞
0
回复
2020-05-05
z
zz_1994
回复
鲁飞
请问目前swoole 4.5.0 版本支持了多少 option,我这里也遇到同样的问题,报错 `swoole_curl_setopt(): option[10065] is not supported` 我需要使用Facebook SDK, 其中用到的 option 如下: ```php $options = [ CURLOPT_CUSTOMREQUEST => $method, CURLOPT_HTTPHEADER => $this->compileRequestHeaders($headers), CURLOPT_URL => $url, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => $timeOut, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_CAINFO => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem', ]; ```
赞
0
回复
2020-05-05
鲁飞
回复
zz_1994
将在master分支支持。
赞
0
回复
2020-05-06
z
zz_1994
感谢~
赞
0
回复