我正在尝试验证 PayOne (https://www.payone.de/en/)上的信用卡。
我从文档的According to 3.4.1 Verifying credit cards (creditcardcheck)
和3.1.2 Standard parameter
部分得到的参数列表PAYONE_Platform_Client_API_EN.pdf(您可以在此处https://www.payone.de/en/contact/请求)。
# build hash on server side:
import hmac
import hashlib
params = {
'aid': '123456',
'api_version': '3.12',
'mid': '123456',
'mode': 'test',
'portalid': '1234567',
'responsetype': 'JSON',
'request': 'creditcardcheck',
'storecarddata': 'yes'
}
message = ''.join([params[k] for k in sorted(params)])
return hmac.new(b'some-secret-key!', msg=message.encode('utf-8'), digestmod=hashlib.sha384).hexdigest()
{ “customermessage”:“处理此事务时出错(参数错误)。”, “errorcode”:“2007”, “errormessage”:“哈希不正确”, “status”:“ERROR”}
我正在使用python 3.5和angular2。
我在这里做错了什么?
已在网络界面中选择哈希方法:https://pmi.pay1.de/merchants/?navi=portal&rc=1(Method hash calculation*: SHA2-384 (recommended method)
)
答案 0 :(得分:0)
默认情况下,payone商家帐户使用md5而不是sha384
# build hash on server side:
import hmac
import md5
import hashlib
params = {
'request': 'creditcardcheck',
'responsetype': 'JSON',
'mode': 'test',
'mid': '12345',
'aid': '54321',
'portalid': '2222222',
'encoding': 'UTF-8',
'storecarddata': 'yes',
}
message = ''.join([params[k] for k in sorted(params)])
print message
m = hashlib.md5()
m.update(message)
m.update("secretkey")
print m.hexdigest()
输出:
54321UTF-812345test2222222creditcardcheckJSONyes
a435bff18234ec02a2dffa4d4850a08f
然后,打开URL并确保URL中传递的除信用卡参数(和回调方法)之外的所有参数也在哈希中。在这个例子中它是:
答案 1 :(得分:0)
解决方案是没有api_version
参数的呼叫端点:
# build hash on server side:
import hmac
import hashlib
params = {
'aid': '123456',
# 'api_version': '3.12',
'mid': '123456',
'mode': 'test',
'portalid': '1234567',
'responsetype': 'JSON',
'request': 'creditcardcheck',
'storecarddata': 'yes'
}
message = ''.join([params[k] for k in sorted(params)])
return hmac.new(b'some-secret-key!', msg=message.encode('utf-8'), digestmod=hashlib.sha384).hexdigest()
在同一时间api_version
被注明为3.1.2 Standard parameter
部分的必需参数以及应在部分3.1.4 Calculation of the HASH value
进行哈希处理的参数。所以它看起来像是在文档中输入。