- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用 LINE BOT API 试用版 SDK PHP ( https://github.com/line/line-bot-sdk-php )。
但是,对于这个方法:
$res = $bot->sendText(['TARGET_MID'], 'Message');
如何让用户的MID给他们发消息?
感谢您的帮助。
最佳答案
1) 获取交互式用户的 mid
的一种非常快速的方法(实际上更有趣)是根据 API instructions 注册一个回调 URL ,然后将 POST 数据捕获到该 URL,如下所示:
// /callback/index.php
<?php
$postdata = file_get_contents("php://input");
@file_get_contents('https://'.$_SERVER['SERVER_NAME'].'/LINE/' . json_encode($postdata));
接下来,扫描 channel 控制台中的二维码并将您的试用机器人添加到您的 LINE 帐户。完成后,快速发送一个“你好!”文本。
然后您可以根据需要将 POST 数据保存到文本文件中,或者您可以检查服务器日志。例如,您可能会看到如下内容:
163.128.118.223 - - [03/Sep/2016:07:25:25 -0700] "POST /line/callback/ HTTP/1.1" 200 - "-" "ChannelEventDispatcher/1.0"
106.152.218.107 - - [03/Sep/2016:07:25:25 -0700] "GET /LINE/{\"result\":[{\"content\":{\"toType\":1,\"createdTime\":1472114754839,\"from\":\"ub7dbd4a12c322f6c0117773d739c55a4\",\"location\":null,\"id\":\"4357194057879\",\"to\":[\"u2b6a4ba287028dee7291122094dac827\"],\"text\":\"Hello!\",\"contentMetadata\":{\"AT_RECV_MODE\":\"2\",\"SKIP_BADGE_COUNT\":\"true\"},\"deliveredTime\":0,\"contentType\":1,\"seq\":null},\"createdTime\":1472912724868,\"eventType\":\"138311609000106301\",\"from\":\"u236d23c2e36bd87217655609a1c31cb8\",\"fromChannel\":1241102815,\"id\":\"WB1519-3102846635\",\"to\":[\"u2b6a4ba287028dee7291122094dac827\"],\"toChannel\":1462261375}]} HTTP/1.1" 404 15 "-" "-"
\"from\":\"ub7dbd4a12c322f6c0117773d739c55a4\"
是相关部分。
2) 如果您想开始使用 receiving messages ,您可以像这样开始作为您的回调脚本。只需向您的 BOT 发送消息“mid”,它就会以您的 mid
进行响应。
这是我用 signature verification 为您制作的起始回调脚本。
// /callback/index.php
<?php
// Show all errors for testing
error_reporting(E_ALL);
// SDK is installed via composer
require_once __DIR__ . "/includes/vendor/autoload.php";
use LINE\LINEBot;
use LINE\LINEBot\HTTPClient\GuzzleHTTPClient;
// Set these
$config = [
'channelId' => LINE_CHANNEL_ID,
'channelSecret' => LINE_CHANNEL_SECRET,
'channelMid' => LINE_CHANNEL_MID,
];
$sdk = new LINEBot($config, new GuzzleHTTPClient($config));
$postdata = @file_get_contents("php://input");
$messages = $sdk->createReceivesFromJSON($postdata);
// Verify the signature
// REF: http://line.github.io/line-bot-api-doc/en/api/callback/post.html#signature-verification
$sigheader = 'X-LINE-ChannelSignature';
// REF: http://stackoverflow.com/a/541450
$signature = @$_SERVER[ 'HTTP_'.strtoupper(str_replace('-','_',$sigheader)) ];
if($signature && $sdk->validateSignature($postdata, $signature)) {
// Next, extract the messages
if(is_array($messages)) {
foreach ($messages as $message) {
if ($message instanceof LINEBot\Receive\Message\Text) {
$text = $message->getText();
if ($text == "mid") {
$fromMid = $message->getFromMid();
// Send the mid back to the sender and check if the message was delivered
$result = $sdk->sendText([$fromMid], 'mid: ' . $fromMid);
if(!$result instanceof LINE\LINEBot\Response\SucceededResponse) {
error_log('LINE error: ' . json_encode($result));
}
} else {
// Process normally, or do nothing
}
} else {
// Process other types of LINE messages like image, video, sticker, etc.
}
}
} // Else, error
} else {
error_log('LINE signatures didn\'t match');
}
关于php - 如何使用 PHP SDK 获取 LINE 用户中间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100788/
当前问题陈述的输入是 - 输入.txt #START_OF_TEST_CASES #DATA key1:VA1 key2:VA2 key3:VA3 key4:VA4 key5:VA5 #DEND #E
编辑:添加了 PDO 调用。 这是实际的错误: Notice: Object of class PDOStatement could not be converted to int in Unknow
“git diff --stat”和“git log --stat”显示如下输出: $ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56
我有一个具有以下格式的输入文件:安大略省:布兰普顿:北纬 43° 41':西经 79° 45'安大略省:多伦多:北纬 43° 39':西经 79° 23'魁北克省:蒙特利尔:北纬 45° 30':西经
空白行仅包含\n或\r\n或\r。 tempfile = open(file,"r") for id,line in enumerate(tempfile): if(line != "\n"
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
有一个while read循环: while read line; do grep "^$line" file1 done < target 我应该使用 "^$line" 来获得正确答案。我想
我有一个我无法解决的 numpy 问题。我有填充 0 和 1 的 3D 数组 (x,y,z)。例如,z 轴上的一个切片: array([[1, 0, 1, 0, 1, 1, 0, 0],
作为临时方法,我使用 .txt 文件来存储程序的某些变量。写入与 fs.appendFile 完美配合,但考虑到它的大小,使用 fs.readFile 读取不合适 - 我想得到某一行 来自文件,以及
我试图找到一种通过R studio进行调试的方法,但是我发现的所有解决方案都无法真正起作用。 1.)CTRL + enter:有效,但不会通过循环的每次迭代,而只能执行一次。 2.)添加“browse
在我的应用程序中,我的 EditText 左侧有行号 - 到目前为止一切都很好,行号与 EditText 的行完全对齐。 问题是,如果用户更改 EditText 的文本大小,则行号无法正确对齐。所以我
通过使用 + 的参数调用它,我可以使 vim 将光标定位在文件的最后一行。 : vi + myfile # "+" = go to last line of file 我怎样才能做到
我已经在文件中写入了这样的数据(某种) {:a 25 :b 28} {:a 2 :b 50} ... 我想要这些 map 的惰性序列。 大约有 4000 万行。我也可以写 10000 的 block
我在文本区域中发现了一个奇怪的错误(?)... 比如说,有一个 使用多行文本(用户粘贴的文本或预设文本无关紧要,两者都经过测试)。 我想从 中获取文本并替换 \n与其他东西......结果是,.re
我需要一个新行,这样我就可以在 PFD 中看到一个格式,我尝试添加一个页面宽度但它没有用,我用另一个东西/n 也没有用。这是我的代码。我可以手动添加格式,因为我需要显示从数据库中获取的信息,并且我在一
我正在尝试编写一个 Java 程序,它将大量 GPS 坐标捕捉到线形文件(道路网络),并且不仅返回新坐标,还返回捕捉到的线段的唯一标识符。该标识符是否是 FID、其他语言中使用的“索引”(即,其中 1
你好,我正在努力处理 JavaScript/NodeJS 中的数组。 基本上,这是我的代码: let arr = new Array(); arr = { "Username" : var1,
我正在学习 matplotlib 的基本教程,我正在处理的示例代码是: import numpy as np import matplotlib.pylab as plt x=[1,2,3,4] y=
所以,假设我有一个包含 20 行的文本文件,每行都有不同的文本。我希望能够有一个包含第一行的字符串,但是当我执行 NextLine(); 时我希望它成为下一行。我试过了,但它似乎不起作用: strin
我是一名优秀的程序员,十分优秀!