圣詹姆斯公园
  • Introduction
  • 算法
    • RSA算法原理
    • 小议分解质因数函数的实现
  • 开发
    • OTP简介
    • PHP命令行下的信号处理
    • 将普通字符转换为HTML转义字符
    • 如何在微信或给到APP中打开点评APP
    • 开源许可证教程
    • 线上环境关于时间查询的一个坑
    • Git
      • Git的4个阶段的撤销更改
      • Git实用配置笔记
      • Git忽略提交.gitignore
    • SugarCRM
      • SugarCRM6.5中字段定制显示方法研究
      • SugarCRM6.5支持使用Elasticsearch记录日志
      • SugarCRM6.5数据查询方法研究
  • 运维
    • shell终端输出内容美化
    • tcpdump使用简介
    • Wikitten的Nginx配置拾遗
    • 在Docker Terminal中运行容器中的PHPUnit
Powered by GitBook
On this page
  • 引言
  • URL Schemes
  • 常用页面
  1. 开发

如何在微信或给到APP中打开点评APP

作者:James Zhu (fatindeed@hotmail.com)

创建日期:2018-03-28

引言

由于点评业务的需要,支付请求是在点评APP内发起的,因此需要在不同场景下打开点评APP。如

  • 点评账号绑定完成后打开点评APP去消费

  • 1楼咖啡吧提供一个二维码,让用户直接扫码买单

那么如何打开点评APP呢?我们可以通过URL Schemes来实现。

URL Schemes

常见的URL Schemes有:

  • http://ciicpr.guanaitong.com/

  • tel://33352634

  • sms://13601873601

  • mailto:james.zhu@guanaitong.com

而对于已安装点评APP的手机,其注册了dianping://这个scheme,打开点评APP首页的方法为dianping://home。

然而,在微信中,因为软件限制,我们无法在关爱通页面直接写一个dianping://home的链接来打开点评APP,必须通过点评的一个推广系统(可能微信为这个域名设置了白名单)。例如,http://evt.dianping.com/synthesislink/19043.html。

实际使用过程中,遇到了以下几个问题:

  1. 如何找到打开dianping://home的页面?

  2. 如何找到打开指定商家的页面?

  3. 安卓下载链接已失效,如何找到可用的安卓下载链接页面?

因此,我写了一个dianping-spider.php来枚举抓取evt.dianping.com下的页面,获取每个页面对应的scheme。

define('SQL_CREATE_TABLE', 'CREATE TABLE IF NOT EXISTS Link (
    id    INTEGER PRIMARY KEY,
    link1 VARCHAR (255),
    protocol1 VARCHAR (30),
    link2 VARCHAR (255),
    protocol2 VARCHAR (30),
    link3 VARCHAR (255),
    protocol3 VARCHAR (30)
)');
define('SQL_INSERT_DATA', 'INSERT INTO Link (id, link1, protocol1, link2, protocol2, link3, protocol3) VALUES (:id, :link1, :scheme1, :link2, :scheme2, :link3, :scheme3)');

// Ctrl-C handler
pcntl_signal(SIGINT, function() {
    echo PHP_EOL.'finish at #'.$GLOBALS['i'].PHP_EOL;
    exit();
});

try {
    $dbh = new PDO('sqlite:dianping.db');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->exec(SQL_CREATE_TABLE);
    $sth = $dbh->query('SELECT id from Link ORDER BY id DESC LIMIT 1');
    $lastId = $sth->fetchColumn();
    if($lastId == false) {
        $lastId = 3000;
    }
    else {
        $lastId++;
    }
    $stmt = $dbh->prepare(SQL_INSERT_DATA);
    echo 'start from #'.$lastId.PHP_EOL;
    for($i = $lastId; $i < $lastId + 1000; $i++) {
        pcntl_signal_dispatch();
        $content = file_get_contents('http://evt.dianping.com/synthesislink/'.$i.'.html');
        if($content && preg_match_all('/openLink_\d = "(.*)",/iU', $content, $matches)) {
            $links = $matches[1];
            $schemes = array_map(function($v) {
                $offset = strpos($v, '?');
                return ($offset !== false ? substr($v, 0, $offset) : $v);
            }, $links);
            $stmt->execute(array(
                ':id' => $i,
                ':link1' => $links[0],
                ':scheme1' => $schemes[0],
                ':link2' => $links[1],
                ':scheme2' => $schemes[1],
                ':link3' => $links[2],
                ':scheme3' => $schemes[2]
            ));
        }
    }
    echo 'finish at #'.$i.PHP_EOL;
} catch(PDOException $e) {
    echo $e->getMessage();
}

常用页面

  • dianping://home

  • dianping://shopinfo

Previous将普通字符转换为HTML转义字符Next开源许可证教程

Last updated 6 years ago