我使用cURL验证WordPress插件中的PayPal事务.最近我开始收到有关用户无法完成购买过程的错误报告,因为无法验证交易.我将错误追踪到:
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)
我在StackOverflow中发现了很多与同一问题有关的问题,他们中的大多数人说解决方案是使用CURLOPT_CAINFOcURL选项提供一堆CA. 我下载了这个插件,目前随附了http://curl.haxx.se/ca/cacert.pem的最新版本(2012年6月28日转换).这解决了我收到的大部分问题.
现在的问题是,我刚收到另一份付款失败的报告,错误是一样的:SSL certificate problem, verify that the CA cert is OK..有趣的是,现在的解决方法是删除的CURLOPT_CAINFO选项.我想知道是否有解释.我认为使用更新的CA捆绑包(例如我下载的捆绑包)是一般解决方案,但似乎不是这样.
这种问题的一般解决方案是什么?什么可以解释使用更新的CA捆绑导致SSL证书问题,而不是修复它们?
这是cURL configuartion:
<?php
$ch = curl_init("https://www.paypal.com/cgi-bin/webscr");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
?>
Run Code Online (Sandbox Code Playgroud)
更新:www.paypal.com的证书由VeriSign签署.证书层次结构(如Firefox中所示)是:
我维护的网站之一的移动可用性报告目前显示215 个有效(移动友好页面)。同时,Coverage 报告显示共有399 页有效(已编入索引)。
我下载了所有已编入索引的 URL 列表以及当前被认为适合移动设备的所有 URL 的列表。然后我比较了这两个列表,并开始使用 URL 检查工具检查几个已编入索引但未显示为移动友好的 URL。
我检查过的所有 URL 的 URL 检查结果都显示该页面适合移动设备。一个例子如下所示:
移动可用性报告显示5 个带有错误的 URL,因此我掌握了大约 220 个已编入索引的 URL 总数的信息。
我想了解一些 URL 当前已编入索引,但不被认为适合移动设备,也没有重要的移动可用性问题,这意味着什么。
附加信息:
两个月前(大约 11 月 15 日),适合移动设备的页面数量增加到 248 个,没有显示错误的页面。这个数字开始减少,直到达到当前值,但没有报告相应数量的错误。
这就像一些页面被简单地从移动可用性报告中删除,但没有明确的原因。
在同一时间段内,索引页面的数量增加了 1。
11 月 25 日的Google 搜索更新表明,一些报告将显示主要来自移动优先索引的数据。不幸的是,我仍然不清楚为什么索引页面>(移动友好页面+有移动问题的页面)。
期望所有不适合移动设备的索引 URL 都显示错误是否不正确?
感谢您抽出时间来查看这个问题。
我正在使用 sqlalchemy-migrate 来更改 Postgre SQL 数据库中表中一列的类型。我正在使用的升级脚本是:
# -*- cofing: utf-8 -*-
from sqlalchemy import MetaData, Table, Column, String, Integer
from migrate import changeset
metadata = MetaData()
def upgrade(migrate_engine):
# ALTER TABLE courses ALTER COLUMN number SET DATA TYPE character varying;
metadata.bind = migrate_engine
courses = Table('courses', metadata, Column("number", Integer), extend_existing=True)
courses.c.number.alter(type=String)
def downgrade(migrate_engine):
# ALTER TABLE courses ALTER COLUMN number SET DATA TYPE integer;
metadata.bind = migrate_engine
courses = Table('courses', metadata, Column("number", String), extend_existing=True)
courses.c.number.alter(type=Integer, cast='numeric')
Run Code Online (Sandbox Code Playgroud)
升级部分似乎工作,但降级总是失败并出现以下错误:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) column …Run Code Online (Sandbox Code Playgroud)