在ShopNC中启动QQ互联,遇到不少坑,小记一下:
1. 在QQ互联中填写回调地址
按照shop/api.php中的代码:
elseif ($_GET['act'] == 'toqq'){ define('SHOP_SITE_URL',$site_url); if ($_GET['op'] == 'g'){ include 'api/qq/oauth/qq_callback.php'; }else{ include 'api/qq/oauth/qq_login.php'; } }
回调地址应该是/api.php?act=toqq&op=g,但是这样的带hash的地址QQ不允许使用。
因此只好在新建一个shop/api_qq.php,在最后
include 'api/qq/oauth/qq_callback.php';
2. 在跳转到QQ登陆页面后,回调时出错
QQ返回的出错信息是
error:
100007
msg :
param access token is wrong or lost
经过反复查找原因后发现,原来是session引起的。
因为shopnc采用单一入口方式,默认在index.php下会调用core\framework\core\base.php中的Base::run()
后者调用self::init(),后者再调用self::start_session(),在start_session的最后:
//默认以文件形式存储session信息 session_save_path(BASE_DATA_PATH.'/session'); session_start();将session的保存地址修改为了data/session。
而QQ的回调地址未经过这个单一入口,也就没有修改session的保存地址,经查看phpinfo可知在:
session.save_path | /var/lib/php/session |
解决方案:
1. 修改start_session,不让其修改session_path。
2. 使用memcache、Redis等代替文件来保存session。