【发布时间】:2017-04-07 13:45:56
【问题描述】:
我正在将用户从信使聊天发送到我的应用程序中的支付页面。 Messenger 在 web 视图中打开页面。 现在我想关闭 webview 并将用户发送回 Messenger,同时向 webhook 发送一些内容以通知它用户已完成支付页面。
最好的方法是什么?
【问题讨论】:
-
找到解决方案了吗?
我正在将用户从信使聊天发送到我的应用程序中的支付页面。 Messenger 在 web 视图中打开页面。 现在我想关闭 webview 并将用户发送回 Messenger,同时向 webhook 发送一些内容以通知它用户已完成支付页面。
最好的方法是什么?
【问题讨论】:
只有控制支付页面(由您开发)才能实现这一点,如果是第三方支付网关则无能为力。如果支付页面由您控制,您可以通过 web_url 将发件人 ID 作为参数传递或通过
获取发件人 ID<script>
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.com/en_US/messenger.Extensions.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "Messenger"));
window.extAsyncInit = function () {
// the Messenger Extensions JS SDK is done loading
MessengerExtensions.getUserID(function success(uids) {
var psid = uids.psid;//This is your page scoped sender_id
alert(psid);
}, function error(err) {
alert("Messenger Extension Error: " + err);
});
};
</script>
然后,您可以使用发件人 ID 将消息文本发送回机器人。 在发送完所有这些后关闭 webview 包含此脚本 给机器人发短信
<script>
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.com/en_US/messenger.Extensions.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "Messenger"));
window.extAsyncInit = function () {
// the Messenger Extensions JS SDK is done loading
//close the webview
MessengerExtensions.requestCloseBrowser(function success() {
}, function error(err) {
});
};
</script>
就像在您的 Bot 中一样,您必须确保在发送文本之前页面访问令牌可用,还要确保将 webview 中使用的域列入白名单并在 web_url 按钮中设置 "messenger_extensions": true否则您将无法使用信使扩展获取发件人 ID
参考
【讨论】: