ECshop鸿宇小京东 - 修复阿里云提示发现后门(Webshell)文件app/custom.php问题
鸿宇教程库 • 鸿宇 发表了文章 • 0 个评论 • 1463 次浏览 • 2020-08-07 17:52
鸿宇论坛:bbs.hongyuvip.com
鸿宇QQ群:90664526
技术客服QQ号:1527200768
解决方案:下载附件,直接覆盖
鸿宇论坛:bbs.hongyuvip.com
鸿宇QQ群:90664526
技术客服QQ号:1527200768
解决方案:下载附件,直接覆盖
ECshop鸿宇小京东 - 订单导出乱码问题解决方案
鸿宇教程库 • 鸿宇 发表了文章 • 0 个评论 • 1192 次浏览 • 2020-07-17 11:50
鸿宇论坛:bbs.hongyuvip.com
鸿宇QQ群:90664526
1、先用notepad++软件打开导出的订单文件(orderexcel)
2、然后依次选择:编码->使用UTF-8编码->保存文件。
3、再用表格软件打开文件,乱码问题解决,显示正常。
查看全部
鸿宇论坛:bbs.hongyuvip.com
鸿宇QQ群:90664526
1、先用notepad++软件打开导出的订单文件(orderexcel)
2、然后依次选择:编码->使用UTF-8编码->保存文件。
3、再用表格软件打开文件,乱码问题解决,显示正常。
Java Maven 源改为国内阿里云镜像
Java • 鸿宇 发表了文章 • 0 个评论 • 1240 次浏览 • 2020-06-25 16:31
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>其实这样设置,我发现其实镜像并没有改变,还是maven的中央库。在maven 库的官网上http://maven.apache.org/settings.html,是建议我们这样设置的(文章底部提供settings.xml文件下载压缩包)<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云谷歌仓库</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云阿帕奇仓库</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云spring仓库</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云spring插件仓库</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
</mirrors>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>这样设置之后,我发现maven库确实改成了阿里云库。
转载出处: https://zhuanlan.zhihu.com/p/71998219
查看全部
<mirrors>其实这样设置,我发现其实镜像并没有改变,还是maven的中央库。在maven 库的官网上http://maven.apache.org/settings.html,是建议我们这样设置的(文章底部提供settings.xml文件下载压缩包)
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"这样设置之后,我发现maven库确实改成了阿里云库。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云谷歌仓库</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云阿帕奇仓库</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云spring仓库</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云spring插件仓库</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
</mirrors>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
转载出处: https://zhuanlan.zhihu.com/p/71998219
ECshop鸿宇小京东 - 二级域名切换跳转时session不同步,解决session无法共享同步导致无法登陆的问题
小京东 • 鸿宇 发表了文章 • 0 个评论 • 1199 次浏览 • 2020-06-19 23:45
ecshop 二级域名切换时,比如你的域名是www.example.com ,跳转到abc.example.com,那么会导致session无法获取到而无法登陆的问题。
解决方法,找到includes/init.php
1、在
@ini_set('session.cache_expire', 180);
前,添加如下代码,将.example.com换成你的域名,注意有一个“.”符号 ecshop模板
@ini_set("session.cookie_domain",'.example.com');
2、找到你data/config.php
将如下代码
$cookie_domain = "";
替换为:
$cookie_domain = ".example.com";
3、此时其实已经生效,但你的本地会有缓存,无法看到效果,清除一下浏览器缓存。此时问题已经解决! 查看全部
ecshop 二级域名切换时,比如你的域名是www.example.com ,跳转到abc.example.com,那么会导致session无法获取到而无法登陆的问题。
解决方法,找到includes/init.php
1、在
@ini_set('session.cache_expire', 180);
前,添加如下代码,将.example.com换成你的域名,注意有一个“.”符号 ecshop模板
@ini_set("session.cookie_domain",'.example.com');
2、找到你data/config.php
将如下代码
$cookie_domain = "";
替换为:
$cookie_domain = ".example.com";
3、此时其实已经生效,但你的本地会有缓存,无法看到效果,清除一下浏览器缓存。此时问题已经解决!
大商创 - 微信支付在微信App内不显示按钮问题解决方案
大商创 • 鸿宇 发表了文章 • 0 个评论 • 2023 次浏览 • 2020-06-17 18:13
一、问题原因:
1. 无法获取微信openid:文件 mobile/app/Plugins/payment/wxpay.php 中 get_code() 函数无法正确获取 openid 造成按钮不显示问题。
2.生成订单号逻辑错误, 会造成微信接口返回订单号重复错误。
二、解决方案:
1. 打开文件 mobile/app/Plugins/payment/wxpay.php 约 55 行,修改get_code()函数代码:public function get_code($order, $payment)
{
include_once BASE_PATH . 'Helpers/payment_helper.php';
$this->payment = $payment;
$options = array('appid' => $this->payment['wxpay_appid'], 'mch_id' => $this->payment['wxpay_mchid'], 'key' => $this->payment['wxpay_key']);
if (isset($this->payment['wxpay_sub_mch_id']) && !empty($this->payment['wxpay_sub_mch_id'])) {
$options['sub_mch_id'] = $this->payment['wxpay_sub_mch_id'];
}
$weObj = new \App\Extensions\Wechat($options);
$order_amount = $order['order_amount'] * 100;
if (!is_wechat_browser()) {
$scene_info = json_encode(array(
'h5_info' => array('type' => 'Wap', 'wap_url' => __URL__, 'wap_name' => C('shop.shop_name'))
));
$this->setParameter('body', $order['order_sn']);
$this->setParameter('out_trade_no', $order['order_sn'] . time() . 'A' . $order['log_id']);
$this->setParameter('total_fee', $order_amount);
$this->setParameter('spbill_create_ip', $this->get_client_ip());
$this->setParameter('notify_url', notify_url(basename(__FILE__, '.php')));
$this->setParameter('trade_type', 'MWEB');
$this->setParameter('scene_info', $scene_info);
$respond = $weObj->PayUnifiedOrder($this->parameters);
if (isset($respond['mweb_url'])) {
if ($respond['result_code'] == 'SUCCESS') {
$redirect_url = __URL__ . '/respond.php?code=wxpay&type=wxh5&log_id=' . $order['log_id'];
}
$button = '<a class="box-flex btn-submit" type="button" onclick="window.open(\'' . $respond['mweb_url'] . '&redirect_url=' . urlencode($redirect_url) . '\')">微信支付</a>';
} else {
$button = '';
return false;
}
} else {
$openid = '';
if (isset($_SESSION['openid']) && !empty($_SESSION['openid'])) {
$openid = $_SESSION['openid'];
} else {
if (isset($_SESSION['openid_base']) && !empty($_SESSION['openid_base'])) {
$openid = $_SESSION['openid_base'];
} else {
//return false;
$openid = $this->getOpenid();
}
}
$this->setParameter('openid', $openid);
$this->setParameter('body', $order['order_sn']);
$this->setParameter('out_trade_no', $order['order_sn'] . time() . 'A' . $order['log_id']);
$this->setParameter('total_fee', $order_amount);
$this->setParameter('spbill_create_ip', $this->get_client_ip());
$this->setParameter('notify_url', notify_url(basename(__FILE__, '.php')));
$this->setParameter('trade_type', 'JSAPI');
$respond = $weObj->PayUnifiedOrder($this->parameters, true);
$jsApiParameters = json_encode($respond);
$js = "<script language=\"javascript\">\r\n function jsApiCall(){WeixinJSBridge.invoke(\"getBrandWCPayRequest\"," . $jsApiParameters . ',function(res){if(res.err_msg == "get_brand_wcpay_request:ok"){location.href="' . return_url(basename(__FILE__, '.php')) . '&status=1&log_id=' . $order['log_id'] . '"}else{location.href="' . return_url(basename(__FILE__, '.php')) . '&status=0&log_id=' . $order['log_id'] . "\"}})};function callpay(){if (typeof WeixinJSBridge == \"undefined\"){if( document.addEventListener ){document.addEventListener(\"WeixinJSBridgeReady\", jsApiCall, false);}else if (document.attachEvent){document.attachEvent(\"WeixinJSBridgeReady\", jsApiCall);document.attachEvent(\"onWeixinJSBridgeReady\", jsApiCall);}}else{jsApiCall();}}\r\n </script>";
$button = '<a class="box-flex btn-submit" type="button" onclick="callpay();">微信支付</a>' . $js;
}
return $button;
}2. 打开文件 mobile/app/Plugins/payment/wxpay.php 约 365 行,修改getOpenid()函数代码:private function getOpenid()
{
if (!isset($_GET['code'])) {
$redirectUrl = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . (!empty($_SERVER['QUERY_STRING']) ? '?' : '') . $_SERVER['QUERY_STRING']);
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->payment['wxpay_appid'] . '&redirect_uri=' . $redirectUrl . '&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect';
header('Location: ' . $url);
exit();
} else {
$code = $_GET['code'];
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->payment['wxpay_appid'] . '&secret=' . $this->payment['wxpay_appsecret'] . '&code=' . $code . '&grant_type=authorization_code';
/*
$result = \App\Extensions\Http::doGet($url);
if ($result) {
$json = json_decode($result);
if (isset($json['errCode']) && $json['errCode']) {
return false;
}
$_SESSION['openid_base'] = $json['openid'];
return $json['openid'];
}
return false;
*/
$get_token_url = $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $get_token_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$res = curl_exec($ch);
curl_close($ch);
$json_obj = json_decode($res, true);
$openid = $json_obj['openid'];
$_SESSION['openid'] = $openid;
return $openid;
}
}
3. 代码修改重点
查看全部
一、问题原因:
1. 无法获取微信openid:文件 mobile/app/Plugins/payment/wxpay.php 中 get_code() 函数无法正确获取 openid 造成按钮不显示问题。
2.生成订单号逻辑错误, 会造成微信接口返回订单号重复错误。
二、解决方案:
1. 打开文件 mobile/app/Plugins/payment/wxpay.php 约 55 行,修改get_code()函数代码:
public function get_code($order, $payment)2. 打开文件 mobile/app/Plugins/payment/wxpay.php 约 365 行,修改getOpenid()函数代码:
{
include_once BASE_PATH . 'Helpers/payment_helper.php';
$this->payment = $payment;
$options = array('appid' => $this->payment['wxpay_appid'], 'mch_id' => $this->payment['wxpay_mchid'], 'key' => $this->payment['wxpay_key']);
if (isset($this->payment['wxpay_sub_mch_id']) && !empty($this->payment['wxpay_sub_mch_id'])) {
$options['sub_mch_id'] = $this->payment['wxpay_sub_mch_id'];
}
$weObj = new \App\Extensions\Wechat($options);
$order_amount = $order['order_amount'] * 100;
if (!is_wechat_browser()) {
$scene_info = json_encode(array(
'h5_info' => array('type' => 'Wap', 'wap_url' => __URL__, 'wap_name' => C('shop.shop_name'))
));
$this->setParameter('body', $order['order_sn']);
$this->setParameter('out_trade_no', $order['order_sn'] . time() . 'A' . $order['log_id']);
$this->setParameter('total_fee', $order_amount);
$this->setParameter('spbill_create_ip', $this->get_client_ip());
$this->setParameter('notify_url', notify_url(basename(__FILE__, '.php')));
$this->setParameter('trade_type', 'MWEB');
$this->setParameter('scene_info', $scene_info);
$respond = $weObj->PayUnifiedOrder($this->parameters);
if (isset($respond['mweb_url'])) {
if ($respond['result_code'] == 'SUCCESS') {
$redirect_url = __URL__ . '/respond.php?code=wxpay&type=wxh5&log_id=' . $order['log_id'];
}
$button = '<a class="box-flex btn-submit" type="button" onclick="window.open(\'' . $respond['mweb_url'] . '&redirect_url=' . urlencode($redirect_url) . '\')">微信支付</a>';
} else {
$button = '';
return false;
}
} else {
$openid = '';
if (isset($_SESSION['openid']) && !empty($_SESSION['openid'])) {
$openid = $_SESSION['openid'];
} else {
if (isset($_SESSION['openid_base']) && !empty($_SESSION['openid_base'])) {
$openid = $_SESSION['openid_base'];
} else {
//return false;
$openid = $this->getOpenid();
}
}
$this->setParameter('openid', $openid);
$this->setParameter('body', $order['order_sn']);
$this->setParameter('out_trade_no', $order['order_sn'] . time() . 'A' . $order['log_id']);
$this->setParameter('total_fee', $order_amount);
$this->setParameter('spbill_create_ip', $this->get_client_ip());
$this->setParameter('notify_url', notify_url(basename(__FILE__, '.php')));
$this->setParameter('trade_type', 'JSAPI');
$respond = $weObj->PayUnifiedOrder($this->parameters, true);
$jsApiParameters = json_encode($respond);
$js = "<script language=\"javascript\">\r\n function jsApiCall(){WeixinJSBridge.invoke(\"getBrandWCPayRequest\"," . $jsApiParameters . ',function(res){if(res.err_msg == "get_brand_wcpay_request:ok"){location.href="' . return_url(basename(__FILE__, '.php')) . '&status=1&log_id=' . $order['log_id'] . '"}else{location.href="' . return_url(basename(__FILE__, '.php')) . '&status=0&log_id=' . $order['log_id'] . "\"}})};function callpay(){if (typeof WeixinJSBridge == \"undefined\"){if( document.addEventListener ){document.addEventListener(\"WeixinJSBridgeReady\", jsApiCall, false);}else if (document.attachEvent){document.attachEvent(\"WeixinJSBridgeReady\", jsApiCall);document.attachEvent(\"onWeixinJSBridgeReady\", jsApiCall);}}else{jsApiCall();}}\r\n </script>";
$button = '<a class="box-flex btn-submit" type="button" onclick="callpay();">微信支付</a>' . $js;
}
return $button;
}
private function getOpenid()
{
if (!isset($_GET['code'])) {
$redirectUrl = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . (!empty($_SERVER['QUERY_STRING']) ? '?' : '') . $_SERVER['QUERY_STRING']);
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->payment['wxpay_appid'] . '&redirect_uri=' . $redirectUrl . '&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect';
header('Location: ' . $url);
exit();
} else {
$code = $_GET['code'];
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->payment['wxpay_appid'] . '&secret=' . $this->payment['wxpay_appsecret'] . '&code=' . $code . '&grant_type=authorization_code';
/*
$result = \App\Extensions\Http::doGet($url);
if ($result) {
$json = json_decode($result);
if (isset($json['errCode']) && $json['errCode']) {
return false;
}
$_SESSION['openid_base'] = $json['openid'];
return $json['openid'];
}
return false;
*/
$get_token_url = $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $get_token_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$res = curl_exec($ch);
curl_close($ch);
$json_obj = json_decode($res, true);
$openid = $json_obj['openid'];
$_SESSION['openid'] = $openid;
return $openid;
}
}
3. 代码修改重点
App封装(手机端封装App)教程 - 鸿宇科技
鸿宇教程库 • 鸿宇 发表了文章 • 0 个评论 • 2313 次浏览 • 2020-05-30 10:01
官方网址:hongyuvip.com
鸿宇论坛:bbs.hongyuvip.com
ebestmall会员QQ群:87516690
鸿宇普通QQ群:90664526
******************** 封装步骤 ********************
一、主要步骤:
1、首先打开网站 www.appcan.cn 注册一个会员并登陆
2、打开http://dashboard.appcan.cn/app/manage
3、点击创建应用 => 填写您app的名称跟描述 => 点击确认 => 详细步骤(参考二、详细步骤) => 然后点击应用打包
二、详细步骤:
1、第一步需要制作一张180*180的app按钮图片上传 点击保存(就是你APP软件的按钮了)
2、然后点击启动页设置,这里按照尺寸上传你APP的启动图片 点击保存
3、下面点击云端打包 ,勾选 web app模式 在网站地址中填上你 的手机版域名http://域名/mobile 然后在选择平台,安卓跟ios打钩,在下面的版本号随便写个数字点击生成安装包OK ,app就制作好了。
三、友情提醒
1、服务器存储地址 => (取消勾选)蓝汛服务器,即可免费封装。
2、该网站可以适用于各种wap网站的在线封装,还是不错的!想要那种带有独立功能的需要自己找个技术员做原生态开发啦!! 查看全部
官方网址:hongyuvip.com
鸿宇论坛:bbs.hongyuvip.com
ebestmall会员QQ群:87516690
鸿宇普通QQ群:90664526
******************** 封装步骤 ********************
一、主要步骤:
1、首先打开网站 www.appcan.cn 注册一个会员并登陆
2、打开http://dashboard.appcan.cn/app/manage
3、点击创建应用 => 填写您app的名称跟描述 => 点击确认 => 详细步骤(参考二、详细步骤) => 然后点击应用打包
二、详细步骤:
1、第一步需要制作一张180*180的app按钮图片上传 点击保存(就是你APP软件的按钮了)
2、然后点击启动页设置,这里按照尺寸上传你APP的启动图片 点击保存
3、下面点击云端打包 ,勾选 web app模式 在网站地址中填上你 的手机版域名http://域名/mobile 然后在选择平台,安卓跟ios打钩,在下面的版本号随便写个数字点击生成安装包OK ,app就制作好了。
三、友情提醒
1、服务器存储地址 => (取消勾选)蓝汛服务器,即可免费封装。
2、该网站可以适用于各种wap网站的在线封装,还是不错的!想要那种带有独立功能的需要自己找个技术员做原生态开发啦!!
ECshop鸿宇小京东 - 商品批量设置:新品、热销、精选、并且首页显示商品
鸿宇教程库 • 鸿宇 发表了文章 • 0 个评论 • 1401 次浏览 • 2020-05-22 14:37
UPDATE ecs_goods SET is_best=1,is_new=1,is_hot=1;
执行完成后,请点击依次网站右上角:更新首页静态、更新全部静态、清除缓存、手机缓存,网站才会显示修改后的数据! 查看全部
UPDATE ecs_goods SET is_best=1,is_new=1,is_hot=1;
执行完成后,请点击依次网站右上角:更新首页静态、更新全部静态、清除缓存、手机缓存,网站才会显示修改后的数据!
MySQL5.7 执行sql语句报错 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 解决方案
MySQL • 鸿宇 发表了文章 • 0 个评论 • 1539 次浏览 • 2020-05-22 14:36
@@sql_mode;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));二、重启MySQL服务
select version(),二、重启MySQL服务
@@sql_mode;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
ECshop鸿宇小京东 - 分类id查看/分类链接地址获取
鸿宇教程库 • 鸿宇 发表了文章 • 0 个评论 • 1425 次浏览 • 2020-05-21 13:33
http://你的域名/category.php?id=[分类ID]二:分类ID获取方式:
浏览器无法唤起QQ进行聊天解决方案
其它 • 鸿宇 发表了文章 • 0 个评论 • 2937 次浏览 • 2020-05-12 19:52
解决方案:
一、打开 https://shang.qq.com/v3/widget.html 登录你的QQ客服账号。
二、登录后会弹出QQ推广弹框,提示开通后立即体验通讯组件,请点击【立即免费开通】按钮,即可正常使用QQ客服外链功能了。
扩展介绍:
针对跳转唤起QQ,QQ推广的官方网站https://shang.qq.com/v3/index.html,只需要扫描登录需要被唤起的QQ号,就可以生成一段代码如下所示<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=123456789&site=qq&menu=yes">
<img border="0" src="http://wpa.qq.com/pa?p=2:123456789:52" alt="点击这里给我发消息" title="点击这里给我发消息"/>
</a>这里的数字“123456789”就是需要被唤起的QQ号码。
应用这种方式,可以在大部分的浏览器中唤起QQ客户端,并定位到聊天页面,只是以下几种情况中这种方式会失效:
苹果手机自带的 Safari 浏览器会提示是否在AppStore中打开链接,如果选择是就会直接跳转到App Store 中,然后才能跳转到QQ,但是两次跳转会丢失参数,导致不能打开需要聊天的对象。
在手机端Google浏览器中也会存在类似于 1 中的情况
网页内嵌到自开发的App中,需要唤起QQ时也会出现类似与 1 的情况。
由于Safari浏览器在苹果手机端使用率很高,应业务需求,就不得不为它找一种另外的方式。
通过了解,发现app之间的联系可以通过一种叫做深度链接的技术解决,所谓的深度链接就是绕过网站的首页直接链接道分页的一种链接技术,具体想要了解的可以看看LinkedMe上的一片博文https://www.linkedme.cc/blog/...。
深度链接中的一个解决方案就是定义一个新的URL Scheme ,这个URL Scheme可以通过特定的URI方式传递参数给另一个APP,从而改变App之间独立不通信的局面。
单独说倒唤起QQ,或者解决Safari浏览器不能唤起QQ的问题,可以使用如下的URI:mqqwpa://im/chat?chat_type=wpa&uin=123456789&version=1&src_type=web&web_src=oicqzone.com其中数字“123456789”同样的是需要被唤起的QQ。<a target="_blank" href="mqqwpa://im/chat?chat_type=wpa&uin=123456789&version=1&src_type=web&web_src=oicqzone.com">
123456789
</a>通过多次测试,我整理出如下手机端浏览器唤起QQ的各种不同情况(其中no代表测试不成功,ok代表测试成功):
这里需要提到一点,将URL Scheme 的方案用于电脑的各种浏览器从而去唤起QQ是不起任何效果,因为URL Scheme是专门为解决APP之间孤立的情况而提出来的,并不适用于电脑应用,但是在电脑端可以使用QQ推广给出的的方案。
知道了如何解决App跳转到QQ的方法,但是很多时候我们希望有一种通用的办法可以解决上述几种情况,保证在大多数浏览器(包括电脑浏览器)只需要一套代码就可以解决问题。
我个人通过判断浏览器的userAgent区分手机端浏览器还是电脑端浏览器,然后为它们分别提供不同的方案:
HTML代码<a href="javascript:void(0)" data-qq='qq'>111111111111</a>JavaScript代码window.onload = function () {
var as = document.getElementsByTagName('a');
var kefu101 = "http://wpa.qq.com/msgrd?v=3&uin=381232999&site=oicqzone.com&menu=yes";
var kefu102 = "mqqwpa://im/chat?chat_type=wpa&uin=381232999&version=1&src_type=web&web_src=oicqzone.com";
for (var i = 0, len = a.length; i < len; i++) {
if (as.hasAttribute('data-qq')) {
as.onclick = (function (i) {
return function (e) {
var kefu = e.target ? e.target.getAttribute('data-qq') : e.srcElement.getAttribute('data-qq');
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent) || /(Android)/i.test(navigator.userAgent)) {
window.open(kefu102);
}else {
window.open(kefu101);
}
}
})(i);
}
}
};
这套方案中,手机端使用URL Scheme,电脑端使用QQ推广的方案。
查看全部
解决方案:
一、打开 https://shang.qq.com/v3/widget.html 登录你的QQ客服账号。
二、登录后会弹出QQ推广弹框,提示开通后立即体验通讯组件,请点击【立即免费开通】按钮,即可正常使用QQ客服外链功能了。
扩展介绍:
针对跳转唤起QQ,QQ推广的官方网站https://shang.qq.com/v3/index.html,只需要扫描登录需要被唤起的QQ号,就可以生成一段代码如下所示
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=123456789&site=qq&menu=yes">这里的数字“123456789”就是需要被唤起的QQ号码。
<img border="0" src="http://wpa.qq.com/pa?p=2:123456789:52" alt="点击这里给我发消息" title="点击这里给我发消息"/>
</a>
应用这种方式,可以在大部分的浏览器中唤起QQ客户端,并定位到聊天页面,只是以下几种情况中这种方式会失效:
苹果手机自带的 Safari 浏览器会提示是否在AppStore中打开链接,如果选择是就会直接跳转到App Store 中,然后才能跳转到QQ,但是两次跳转会丢失参数,导致不能打开需要聊天的对象。
在手机端Google浏览器中也会存在类似于 1 中的情况
网页内嵌到自开发的App中,需要唤起QQ时也会出现类似与 1 的情况。
由于Safari浏览器在苹果手机端使用率很高,应业务需求,就不得不为它找一种另外的方式。
通过了解,发现app之间的联系可以通过一种叫做深度链接的技术解决,所谓的深度链接就是绕过网站的首页直接链接道分页的一种链接技术,具体想要了解的可以看看LinkedMe上的一片博文https://www.linkedme.cc/blog/...。
深度链接中的一个解决方案就是定义一个新的URL Scheme ,这个URL Scheme可以通过特定的URI方式传递参数给另一个APP,从而改变App之间独立不通信的局面。
单独说倒唤起QQ,或者解决Safari浏览器不能唤起QQ的问题,可以使用如下的URI:
mqqwpa://im/chat?chat_type=wpa&uin=123456789&version=1&src_type=web&web_src=oicqzone.com其中数字“123456789”同样的是需要被唤起的QQ。
<a target="_blank" href="mqqwpa://im/chat?chat_type=wpa&uin=123456789&version=1&src_type=web&web_src=oicqzone.com">通过多次测试,我整理出如下手机端浏览器唤起QQ的各种不同情况(其中no代表测试不成功,ok代表测试成功):
123456789
</a>
这里需要提到一点,将URL Scheme 的方案用于电脑的各种浏览器从而去唤起QQ是不起任何效果,因为URL Scheme是专门为解决APP之间孤立的情况而提出来的,并不适用于电脑应用,但是在电脑端可以使用QQ推广给出的的方案。
知道了如何解决App跳转到QQ的方法,但是很多时候我们希望有一种通用的办法可以解决上述几种情况,保证在大多数浏览器(包括电脑浏览器)只需要一套代码就可以解决问题。
我个人通过判断浏览器的userAgent区分手机端浏览器还是电脑端浏览器,然后为它们分别提供不同的方案:
HTML代码
<a href="javascript:void(0)" data-qq='qq'>111111111111</a>JavaScript代码
window.onload = function () {
var as = document.getElementsByTagName('a');
var kefu101 = "http://wpa.qq.com/msgrd?v=3&uin=381232999&site=oicqzone.com&menu=yes";
var kefu102 = "mqqwpa://im/chat?chat_type=wpa&uin=381232999&version=1&src_type=web&web_src=oicqzone.com";
for (var i = 0, len = a.length; i < len; i++) {
if (as.hasAttribute('data-qq')) {
as.onclick = (function (i) {
return function (e) {
var kefu = e.target ? e.target.getAttribute('data-qq') : e.srcElement.getAttribute('data-qq');
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent) || /(Android)/i.test(navigator.userAgent)) {
window.open(kefu102);
}else {
window.open(kefu101);
}
}
})(i);
}
}
};
这套方案中,手机端使用URL Scheme,电脑端使用QQ推广的方案。