alipay ILLEGAL_SIGN 错误解决

date: 2017-8-6 10:34:12
title: alipay ILLEGAL_SIGN 错误解决

大概是 2 周前周五遇到的问题吧,现在回想起来,当时追踪并解决问题的过程挺有意思的,记录下来给大家看看。

事件回顾

我们的产品提供消费分期的能力给航旅商户,当天下午 2 点,有一个商户反馈他们调起我们的 sdk 后选择 alipay 时,跳出支付宝 ILLEGAL_SIGN 提示页面。

接到反馈后,我们进行了 alipay 的单元测试、自家机酒产品进入 sdk 后使用 alipay 以及使用商户传递过来的订单信息进行 alipay 单元测试,都没有复现这个问题。

PS:支付系统我开发完,已经稳定运行 3 个月了,这是第一次收到这样问题的反馈。

我们反馈给商户,希望商户确认一下自己的环境,我们也根据搜索引擎的结果,增加了:

header("Content-type:text/html;charset=utf-8");

随后配合商家测试,问题依旧存在。

定位问题

由于周五有各种例会(项目会、技术团队会、周报等),等到下午 6 点才有时间继续跟进。

根据上面代码 charset=utf-8,我尝试用 chrome 的 Charset 插件,通过修改字符集为 GBK,终于稳定复现了这个问题。

chrome-ext-charset
charset-gbk

其实就是确定了,问题出在 charset 上面。

round one:fail

于是,围绕 charset 做了多个尝试:

  • html 通过 meta 限定 charset
  • form 表单提交数据的 4 种格式,以及数据对应的编码
<meta charset="UTF-8"> // html meta
<form action="" method="post" enctype="multipart/form-data;charset=utf-8"></form>

// http header 'Content-type' 标准形式
Content-type: application/x-www-form-urlencoded; charset=UTF-8

PS: http 协议中的 key 是不区分大小写的,所以写 'content-type' 也是可以的

但是无论怎么改,还是会一直跳出支付宝 ILLEGAL_SIGN 提示页面。

还是插件

仔细一回顾,本来我这里是不会出现这个问题的,是通过chrome charset 插件才稳定复现的,于是又尝试用插件将 charset 改回 utf-8,果然好了!!!

所以,这插件干了什么?!!!

# show me the code
git clone https://github.com/jinliming2/Chrome-Charset.git
// 原来插件接管了所有请求
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if(tab.url.startsWith('file://') && changeInfo.status === 'complete' && localStorage.getItem('tab' + tabId)) {
        let xmlHttp = new XMLHttpRequest();
        xmlHttp.overrideMimeType('text/plain; charset=' + localStorage.getItem('tab' + tabId)); // 看这里
        xmlHttp.onload = () => {
            const is_html = /\.html?$/.test(tab.url);
            const data = is_html ? encodeURI(xmlHttp.responseText) : encodeURI(html_special_chars(xmlHttp.responseText));
            chrome.tabs.executeScript(tabId, {
                code: `const _t = document.open('text/${is_html ? 'html' : 'plain'}', 'replace');
                _t.write(${is_html ? `decodeURI('${data}')` : `'<pre>' + decodeURI('${data}') + '</pre>'`});
                _t.close();`,
                runAt: 'document_start'
            });
        };
        xmlHttp.onerror = () => {
            alert(chrome.i18n.getMessage('cannotLoadLocalFile'));
        };
        xmlHttp.open('GET', tab.url, true);
        xmlHttp.send();
    }
}
charset-code

所以,果断禁用掉。

PS: chrome 的「隐身模式」简直是调试神器,欢迎尝试。

round two: fail

禁用插件之后,继续按照 round one 的思路进行修改,然后,这问题就没办法复现了。

所以,现在变成了 世纪难题 了:

  • 如果不启用 charset 插件,就无法复现问题了
  • 如果启动插件,所有 chrome 的请求都会被接管,修改的代码不会生效,也无法验证和修复问题

final:月光就在眼前

进入死胡同的时候,千万不要怀疑人生,你要相信:

  • 我书读得少,你不要骗我。
  • 那些看似无解的问题,往往只是你孤陋寡闻。
  • 知识这东西就是这样:知道就是知道,不知道就是不知道,所以还是多知道一点比较好

所以,翻开了《http 权威指南》,仔细查阅之后,你就会发现,在 http协议里面,只有 2 个地方会影响到 charset:

  • 客户端:accept-charset='utf-8'
  • 服务端:content-type: text/plain;charset:utf-8

所以,在代码里面修改为:

<form id='alipaysubmit' name='alipaysubmit' accept-charset='utf-8'></form>

晚上 10 点的月光,正好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容