小编Lou*_* B.的帖子

Shopify:如何处理卸载,然后立即重新安装?

我最近遇到过用户卸载我的Shopify应用程序并立即重新安装它的情况.这导致了一个问题,因为我将所有用户都存储在数据库表中.

登录/安装的工作原理如下:

  1. 用户告诉我他的商店网址
  2. 我将用户转发到example.myshopify.com/admin/oauth/authorize,其中访问权限授予了我的应用
  3. 我检查该商店URL是否已存储在我的本地用户数据库中
    • 如果不是:我请求永久访问令牌并将用户转发到计划选择页面
    • 如果是:我从用户数据库获取存储的永久访问令牌,并将用户登录到我的应用程序中

卸载:

  1. 用户在他的Shopify后端卸载我的应用程序
  2. Shopify将webhook发送到我的应用程序
  3. 我从用户数据库中删除该用户的数据

问题是webhooks有时会延迟.如果用户卸载并立即重新安装,我的应用程序会认为安装是登录尝试,并将使用存储在用户数据库中的现在无效的访问令牌.

我想我可以检查授权页面的重定向是否包含临时访问令牌,如果是,它将是一个新安装,但即使已经安装了应用程序,似乎也会返回访问令牌.

所以我的问题是:如何才能优雅地处理即时重新安装?当然有一些我忽略的东西,Shopify API中不会出现如此巨大的"逻辑错误"?

shopify

10
推荐指数
1
解决办法
1787
查看次数

iOS/WebKit:touchmove/touchstart无法处理输入和textarea

我有一个无法滚动的IOS Web App.出于这个原因,我想停用滚动.为此,我使用元素的ontouchmove属性并让它调用一个使用element.preventDefault的函数.但是,当它在textarea或input元素上启动时,即使元素被禁用,我也无法检测到任何触摸事件!我也尝试通过JavaScript的addEventlistener将touchmove或touchstart事件绑定到这些元素,但没有成功!

这是我的JavaScript:

function onBodyLoad() {

 document.addEventListener( "touchstart", doNotScroll, true );
 document.addEventListener( "touchmove", doNotScroll, true );

}

function doNotScroll( event ) {

 event.preventDefault();
 event.stopPropagation();

}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

scroll webkit ios

9
推荐指数
1
解决办法
1万
查看次数

PHP:cURL会在后台完成,还是阻止所有进一步的脚本执行?

我正在构建一个应用程序,它一度卷曲外部URL中的一些内容.到目前为止,这一直都很快/立即完成.但是,我不确定如果外部服务器需要很长时间才能响应会发生什么.在cURL完成之前,PHP会等待执行以下代码吗?

我无法真正测试它,因为我不知道如何"模拟"较慢的响应.我希望这个伪代码能够清楚地表达我的问题:

$ch = curl_init( $some_remote_url );
$fp = fopen( $some_local_file, 'wb' );
curl_setopt( $ch, CURLOPT_FILE, $fp );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_exec( $ch ); // Let's say this takes 20 seconds until the other server responds
curl_close( $ch );
fclose( $fp );
redirect( $some_other_url ); // Will this be executed instantly or only after 20 seconds?
Run Code Online (Sandbox Code Playgroud)

我之所以想知道这是因为我不希望我的用户在远程服务器响应缓慢的情况下查看"加载"页面20秒,所以我可能不得不将整个过程移动到cron作业.用户不需要立即卷曲的结果,因此在完成该过程时对他来说无关紧要.

php curl

7
推荐指数
1
解决办法
1708
查看次数

将递归/多维数组与另一个数组匹配

我有以下数组($example_array如下所示):

array(3) {
  ["id"]=> string(4) "123"
  ["name"]=>
      array(1) {
        ["first"]=> string(3) "pete"
        ["last"]=> string(3) "foo"
      }
  ["address"]=>
      array(1) {
        ["shipping"]=>
            array(1) {
              ["zip"]=> string(4) "1234"
              ["country"]=> string(4) "USA"
            }
      }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个函数,我可以对这样的数组运行,并寻找匹配.以下是我希望能够执行的搜索:

// These should return true:
search( $example_array, array( 'id' => '123' ) );
search( $example_array, array( 'name' => array( 'first' => 'pete' ) );
search( $example_array, array( 'address' => array( 'shipping' => array( 'country' => 'USA' ) ) );

// These don't have to return true: …
Run Code Online (Sandbox Code Playgroud)

php

7
推荐指数
1
解决办法
123
查看次数

为什么PHP的内置函数使用常量而不仅仅是字符串作为参数?

我注意到PHP的内部函数从不使用字符串作为预定义或有限值,只使用常量.

例如:

pad_type:

可选参数pad_type可以是STR_PAD_RIGHT,STR_PAD_LEFT或STR_PAD_BOTH.如果未指定pad_type,则假定为STR_PAD_RIGHT.

这里不使用字符串作为参数的原因是什么?

str_pad($test, 10, 0, 'left') 看起来比简单得多 str_pad( $test, 10, 0, STR_PAD_LEFT)

(这更像是一个元问题.我希望可以在这里问一下.)

php

6
推荐指数
1
解决办法
290
查看次数

不同语言CMS页面的不同URL键

我目前正在建立一个支持几种不同语言的Magento商店.

我遇到的一个问题是我无法找到如何将两个CMS页面链接在一起,以便当用户切换他们的语言时,它们会自动转发到当前的CMS页面,但是使用他们的首选语言.一种选择是对两个页面使用相同的URL密钥,但这不会非常用户友好,因为一些用户会看到不是用他们的母语的URL密钥.

让我给你举个例子:

我有一个"关于我们"页面.在商店的英文版本中,该页面的URL为/about-us.现在,德国用户登陆该页面并切换他的语言.但是因为德语相当于"关于我们"是"Überuns",该页面的德语版本是/ueber-uns,所以用户将被呈现404页面,因为没有德语版本/about-us存在.

有谁知道如何解决这个问题?

更新:做了一些更多的研究,一无所获.我不敢相信我是唯一有这个问题的人吗?使用所有语言的相同URL密钥的首选解决方案似乎非常难看,并且不是非常用户友好!

url-rewriting magento magento-1.7

6
推荐指数
1
解决办法
7535
查看次数

jQuery.ajax()省略了"空"对象属性

我有以下JS对象:

var data_test = { foo: [], bar: [ 'baz' ] };
Run Code Online (Sandbox Code Playgroud)

当我通过jQuery.ajax()以下提交此对象时:

$.ajax({
    url: "test.php",
    type: "POST",
    data: data_test
});
Run Code Online (Sandbox Code Playgroud)

事实证明只bar发送了数组,而不是那个foo.

证明:在test.php中我简单地var_dump编辑了$_REQUEST:

array(1) {
  ["bar"]=>
  array(1) {
    [0]=>
    string(3) "baz"
  }
}
Run Code Online (Sandbox Code Playgroud)

是否有可能强制jQuery也提交一个空对象属性?我需要jQuery发送data_test对象的精确副本,如果它省略了破坏我的逻辑的空值!

jquery

5
推荐指数
1
解决办法
6172
查看次数

无法使基于Susy的网格正确对齐

我一直在试用Compass(SASS)的Susy插件,但我注意到它并没有按照我的意图工作.

我把index.htmlscreen.scss来自官方与Susy教程,编译SCSS并把它挂在我的服务器.你可以看到它看起来就像它应该(在我测试的所有浏览器上):

在此输入图像描述

我接下来做的是以下内容:

  • 复制<article><div role="main">,并将其粘贴六倍
  • screen.scss,相应地更改column-span(div[role="main"] > article):from @include columns(6,9);to@include columns(1,9);

但是现在这些新元素根本不与网格对齐,它们被一个清晰可见的空间所取代.我在FF,Safari和Chrome的最新版本中对此进行了测试,只有FF似乎才能正确显示.屏幕截图来自Chrome:

在此输入图像描述

我还上传了每个人在这里检查的来源.

这是Susy的普遍问题,网格不正确还是我做错了什么?如果是第一个,有人知道解决方法吗?我也试过百分比和像素,但都没有奏效.

sass susy-compass compass-sass

3
推荐指数
1
解决办法
1901
查看次数

“值|| 0”是什么意思?

可能的重复:
在 Javascript 中,当变量声明中有逻辑运算符时,这意味着什么?

在网上偶然发现了这段代码,不知道它是做什么的,也无法通过 FireBug 找到,而且由于特殊字符,我无法用谷歌搜索它......

var myValue = myInput.value || 0;
Run Code Online (Sandbox Code Playgroud)

javascript

2
推荐指数
1
解决办法
1395
查看次数

是否可以在服务器端获取渲染DOM的屏幕截图?

在我的Web应用程序中,用户可以创建一些保存在我的数据库中的HTML/CSS标记.我想为该标记提供一个"缩略图",例如在概览视图中.

由于缩略图应该在200x200px左右,并且原始标记打算在900x900px左右查看,我必须找到一种方法来"缩放"该标记:应该就像我在900px处截取渲染标记一样并将其缩小到200px.

有人知道这是否可以使用JavaScript或PHP?或者也许是另一种服务器端语言?我想避免使用任何第三方小程序,如ActiveX.

编辑:我猜某种混搭,其中截图是在客户端拍摄的,然后发送到服务器也行.

javascript php webpage-screenshot

2
推荐指数
1
解决办法
1136
查看次数

获取产品的父类别,即使直接访问它也是如此

我有一个自定义模型/块,可以获取当前产品的父类别:

class Namespace_Module_Model_Product extends Mage_Catalog_Model_Product
{
    public function someFunction()
    {
        $category = $this->getCategory();
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

此自定义块用于产品页面.如果通过其父类别访问产品,则此方法非常有效,例如:domain.com/some-category/my-product.html.但是,如果直接访问产品(例如通过搜索)并且URL类似domain.com/my-product.html,则它不起作用.其中的所有函数Mage_Catalog_Model_Product都可用于检索类别返回空值,就好像产品未分配给任何类别一样.

我的问题是:检索产品类别的全球方式是什么,即使该产品不是通过其类别访问的?

magento magento-1.7

2
推荐指数
1
解决办法
3322
查看次数