格式为API密钥:时间戳:API操作:API秘密密钥
为了本例的目的,让我们假设
def sha256():
# tested on Python 3.8.5
from urllib import parse, request
import hashlib
import datetime
from time import strftime, gmtime
# credentials and request params
my_merchant_id = 'apikey'
api_token = 'test123'
api_secret_key = 'UAV213Q'
my_timestamp = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
api_version = 2.9
action_verb = 'ledger'
# set up request params
data = parse.urlencode({'merchantId': my_merchant_id, 'token': api_token,
'version': api_version, 'action': action_verb})
# authentication
sig = api_token + ':' + my_timestamp + ':' + action_verb + ':' + api_secret_key
sig_hash = hashlib.sha256(sig.encode('utf-8')).hexdigest()
my_headers = {'x-ShareASale-Date': my_timestamp,
'x-ShareASale-Authentication': sig_hash}
print(sig_hash)
API密钥需要有时间戳才能发挥作用。我在考虑在应用程序脚本中计算它,因为它是一个已知的常数。例如,在加密脚本中,它将硬编码api令牌,以utc格式调用时间戳,并以正确的格式硬编码api秘密密钥,也许只是添加操作的函数,这样我就可以进行更改,所以它将是sha256(分类帐),它将合并到加密中
这个答案怎么样?
thu,2011年4月14日22:44:22 GMT
是thu,2011年4月14日22:44:22+0000
当您的python脚本转换为Google Apps脚本时,它将变成如下所示。请将其复制并粘贴到脚本编辑器,并在脚本编辑器中运行函数myfunction
。这样,您就可以在日志中看到结果值。
function myFunction() {
const api_token = 'test123';
const api_secret_key = 'UAV213Q';
const my_timestamp = 'Thu, 14 Apr 2011 22:44:22 +0000';
const action_verb = 'ledger';
const value = `${api_token}:${my_timestamp}:${action_verb}:${api_secret_key}`;
const bytes = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value);
const res = bytes.map(byte => ('0' + (byte & 0xFF).toString(16)).slice(-2)).join('');
console.log(res)
}
8c3a6873fe71c402dc1e3ca7bc828712e3dfb7a66ed09feeeca2152dd809df81
const my_timestamp = new Date().toUTCString().replace("GMT", "+0000");
当您想要以大写的形式检索值时,请使用下面的脚本。但是当我测试您的python脚本时,结果值是小写的。所以请小心这个。
function myFunction() {
const api_token = 'test123';
const api_secret_key = 'UAV213Q';
const my_timestamp = 'Thu, 14 Apr 2011 22:44:22 +0000';
const action_verb = 'ledger';
const value = `${api_token}:${my_timestamp}:${action_verb}:${api_secret_key}`;
const bytes = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value);
const res = bytes.map(byte => ('0' + (byte & 0xFF).toString(16)).slice(-2)).join('').toUpperCase();
console.log(res)
}
8C3A6873FE71C402DC1E3CA7BC828712E3DFB7A66ED09FEEECA2152DD809DF81
。当我尝试安装 patroni 时,我可以使用 md5 初始化数据库,所有的集群都运行良好。. 但当我试图用初始化紧急停堆sha 256安装patroni时,它没有启动,状态也保持不变 群集中所有数据库实例的“副本”。同样在patroni日志上,我可以看到这个错误“”postgres“没有有效的SCRAM验证器”。解决方案是什么? 信息:password_encryption是scram-sha 2
我是新来的谷歌工作表脚本和卡住试图做以下事情。我有2列:C包含开始时间码,D包含结束时间码。第三列(F)包含从开始时间码和结束时间码产生的电影提示的长度。由于时间码来自脚本,因此包含结果的单元格不能导出为其他格式。因此,我试图创建第四列,将列F的结果打印为值。我设法写了一个小脚本,可以做到这一点。它看起来像这样: 问题是,当我编辑C或D中的任何时间码时,它不会自动执行。 所以我试了一下: 它没有给
我试图在Firebase中创建一个动态链接,当我选择android应用程序时,它显示一个错误,说“将SHA-1添加到这个android应用程序”,我已经添加了一个凭据,但我不确定我到底如何“将SHA-1添加到应用程序” 这是怎么做到的?
我想找到一个解决方案或方法,使我能够添加盐和控制迭代次数。本机Rfc2898DeriveBytes基于HMACSHA1。理想情况下,使用SHA-256或SHA-512将使系统经得起未来的考验。 这是迄今为止我发现的最好的例子:http://jmedved.com/2012/04/pbkdf2-with-sha-256-and-others/但是当我用SHA-256运行它时,它实际上比用SHA-51
我有一个打包成WAR文件的Spring Boot web应用程序,我希望能够按需运行一些任务(脚本或命令)。例如: 初始化数据库模式 以编程方式为数据库设定种子 新版本应用程序(移动文件、数据库操作等)需要时进行数据迁移 验证存储文件和数据库内容之间的数据完整性 如果这些“命令”可以访问与Web应用程序本身相同的bean(服务,DAO)和模型,则实现起来会容易得多。我希望我必须在某个地方创建一个S
我在谷歌工作表中有一个下拉菜单,它引用了不同工作表中的值。 参考表A行值1,B行值1:Value1\u说明值2:Value2\u说明。 在我的工作表中,单元格中有一个下拉菜单,用于设置和显示值1、值2等。 我希望下拉菜单显示参考表Value1:Value1_说明、Value2:Value2_说明等中的显示名称,但仅将Value1 Value2等设置为单元格中的值。 确实如此,但是在谷歌的表单中ht
如何在Vue.js应用程序中动态加载JavaScript脚本? 以下是一个简单的解决方案: 但是第一行不加载脚本(它不向HTML添加元素)。 第二行是有效的。第二行是相同的,只是将app变量替换为纯文本(
我有这张表: 个人财务表 我使用此脚本对A列和B列进行“OneEdit”排序: 现在,我不想对A列进行排序,而是对其进行筛选,以便不显示选中的复选框: 想要过滤视图 似乎与和有关,但我真的搞不清楚。 有人能帮帮我吗? 谢谢