问题标签 [mastercard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - MPGS 集成 CREATE_CHECKOUT_SESSION cURL
我正在尝试配置 MPGS 并尝试设置回调 url。它需要使用 REST 创建会话。
代码类似于下面的代码。我不确定应该如何使用 cURL 编写代码。谁能帮忙
谢谢
c# - 确定来自内部库/NuGet 包的序列化错误的原因
有时当通过 NuGet 包 MasterCard-Match 调用 Mastercard MATCH API 时,我会得到一个 JSON 反序列化异常:
解析值时遇到意外字符:<。路径 '',第 0 行,第 0 位置。
异常来自 MasterCard.Core,内部异常来自 Newtonsoft.Json,两者都有相同的消息。
看起来我正在接收 HTML('<' 在第 0 行,第 0 位)并且库正在尝试将其反序列化为 JSON。我的猜测是 MasterCard API 发送回一个 HTML 错误页面而不是 JSON 错误。但是我不能在抛出异常之前进入函数调用来“查看”它得到的响应。
根据文档,我使用提供的数据和调用创建了一个请求映射TerminationInquiryRequest.Create(map)
,这是引发异常的行。这个函数调用是一个黑匣子,我无法进入它,它只是抛出异常。
我已经使用这个库进行了超过 11,000 次调用,只有 32 次出现了这个错误,但我当然每次都会听到它。
有什么方法可以调试我不知道的库,或者查看库从 API 获得的响应吗?
我已经有一些逻辑可以等待并在失败时重试呼叫。
payment-gateway - 带会话 ID 的 MaterCard 支付网关完成回调
我想知道是否有人使用 MPGS 托管的结帐付款 i 参数构建了 API,它没问题,交易正确移动并显示收据页面,但问题是当收据页面显示给客户时,没有重定向到我的网站;我搜索了如何进行回调:
完成回调完成:
- 使用创建结帐会话操作创建结帐会话
- 将 session.id 传递给 checkout.configure ()
- 提供 callback.complete 函数或 url
创建结帐会话的代码是:
但我不知道如何将它放在上面的脚本中。
我该如何解决?
请指教 ,
javascript - JSON 解析引发的意外令牌错误
需要一些帮助来找出页面加载时引发的 JSON.parse 错误。
未捕获的 SyntaxError:JSON.parse () 位置 0 处的 JSON 中的意外标记 m
这只是 Mastercard 支付网关文档中提供的示例代码。我正在尝试使用商家提供的测试数据对其进行测试。我通过验证器运行代码,它没有返回任何错误。
这是我要执行的代码。
javascript - MPGS(万事达卡)集成安全性
根据 MPGS 集成指南,如果商户想在支付成功后显示收据,则 MPGS 将重定向到商户站点回调 URL,并带有 resultIndicator。商户网站需要将 resultIndicator 与之前存储的 successIndicator 进行比较。
黑客可以先启动 MPGS 支付会话而无需支付。然后假装是 MPGS 并通过使用不同的 resultIndicator 调用该商家站点回调 URL 反复进行暴力尝试,直到它与存储的 successIndicator 匹配。商家随后认为黑客已经付款。
这可能吗?如果是,如何避免这个漏洞?在不信任 resultIndicator 的情况下收到回调时需要调用 Inquiry API?
payment-gateway - 无法调用基本回调万事达卡
实际上,我已经集成了万事达卡托管结帐并且它工作正常。 https://ap-gateway.mastercard.com/api/documentation/integrationGuidelines/hostedCheckout/integrationModelHostedCheckout.html
但对于进一步的流程,我必须调用基本回调来取消付款并将客户重定向到商家网站(如错误、取消、完成回调)。
但我无法调用这些回调。
android - 如何创建/更新会话?(MasterCard Gateway 集成在 android 和 iOS 中)
我正在尝试使用卡信息更新会话。
我正在遵循本指南:
在“更新会话”部分中,它说:
您可以请求添加或更新会话中包含的请求字段。
使用邮递员,我设置
授权:基本身份验证为用户名部分中的“商家。{您的网关商家 ID}”和密码部分中的 API 密码。
网址:“ https://ap-gateway.mastercard.com/api/rest/version/51/merchant/{merchantId}/session/{sessionId } ”
方法:放
正文:“原始”为 JSON,如下所示:
问题:得到响应。
我是如何获得 Session id 的!
我已遵循本指南:
使用邮递员,我设置
授权:基本身份验证为用户名部分中的“商家。{您的网关商家 ID}”和密码部分中的 API 密码。
网址:“ https://ap-gateway.mastercard.com/api/rest/version/51/merchant/{merchantId}/session ”
方法:POST
正文:“原始”为 JSON,如下所示:
成功:得到响应。
我在上述请求中收到的会话 ID 已传递给更新会话请求。
我希望更新的会话包含卡信息,但收到错误:“不支持直接提供持卡人数据。考虑使用会话或令牌。”
javascript - 万事达卡付款集成完成付款后如何重定向到链接
付款完成后我需要重定向到一个 URL
我使用了文档中提供的代码
一切正常,但付款完成后我无法重定向,所以我可以做些什么来让它在付款完成后重定向到一个 url?
java - 如何使用 Selenium for Java 自动设置“https://stage.masterpassteststore.com/configuration”?
使用 Selenium for Java,我尝试自动设置 2 个元素 -Merchant integration version (v5/v6)
和https://stage.masterpassteststore.com/configurationMerchant Checkout ID (Sandbox-V7-STD-9CCBB)
页面。
我已经解决了设置环境(Sandbox/Production)
,但仅此而已。
欢迎来自聪明人的任何帮助。:)
“Dmitri T”的唯一一个建议以以下错误结尾:
在端口 37781 上启动 ChromeDriver 75.0.3770.140 (2d9f97485c7b07dc18a74666574f19176731995c-refs/branch-heads/3770@{#1155}) 仅允许本地连接。请保护 ChromeDriver 和相关测试框架使用的端口,防止恶意代码访问。Srp 23, 2019 12:57:04 ODP。org.openqa.selenium.remote.ProtocolHandshake createSession INFO:检测到的方言:W3C 环境选择成功:线程“main”中的沙盒异常 org.openqa.selenium.ElementClickInterceptedException:元素单击被拦截:元素 ... 在点不可单击(669 , 464)。其他元素将收到点击:...(会话信息:chrome=75.0.3770.80)构建信息:版本:'3.9.1',修订:'63f7b50',时间:'2018-02-07T22:42:22.379Z '系统信息:主机:'*', ip: '10.45.1.194', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_221' 驱动信息: org. openqa.selenium.chrome.ChromeDriver Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 75.0.3770.80, chrome: {chromedriverVersion: 75.0.3770.140 (2d9f97485c7b..., userDataDir: C:\Users*\AppDat...}, goog:chromeOptions: {debuggerAddress: localhost:55213}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability :false,超时:{implicit:0,pageLoad:300000,脚本:30000},unhandledPromptBehavior:dismiss and notify} 会话 ID:903a3ae8fe6f8d9e7260742bb2ffa419 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance( NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec .createException(W3CHttpResponseCodec.java:187) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) 在 org.openqa.selenium.remote.HttpCommandExecutor。在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) 执行(HttpCommandExecutor.java:160) .openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279) 在 org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83) 在 App.main(App.java:36)在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) 执行(HttpCommandExecutor.java:160) .openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279) 在 org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83) 在 App.main(App.java:36)在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) 执行(HttpCommandExecutor.java:160) .openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279) 在 org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83) 在 App.main(App.java:36)
cryptography - MasterCard PIN 更改发行者脚本失败,Thales HSM 用于 MAC 生成。EMV
我使用泰雷兹 Payshield 9000 HSM。到目前为止,所有命令都有效,一切都达到了我想要的。
现在的问题是在尝试更改 ATM 中的密码时。检查万事达卡文档时,生成了密码更改脚本,格式看起来没问题。
我们的 PIN 更改脚本如下所示:86158424000210PPPPPPPPPPPPPPPPMMMMMMMMMMMMMMMM
其中 16 个 P 字母是 DE125 中发送的 PIN 块,16 M 个字母代表 MAC。(我屏蔽了它们,但下面将使用示例中的数据)
有了这个脚本,从我这边看来一切正常。现在我怀疑问题是MAC生成。
要生成 MAC,我们使用以下 HSM 命令:
- HA(生成 TAK(它是一个随机密钥,每次(每次 PIN 更改操作)我都调用此命令,密钥不同)) - 输入为:
key = PVK key (U+32Hex symbols under LMK)
,delimiter = ';'
,keySchemeTmk = 'U'
,keySchemeLmk = 'U'
; 然后收到TAK密钥 - M6(生成 MAC) - 输入为:
modeFlag = 0
,inputFormatFlag = 2
,macSize = 1
,macAlgorithm = 3
,paddingMethod = 0
,keyType = '003'
,key = 'Tak key from HA command'
,messagelength = '0030'
,message = '8424000210345755BFDC4F2903A392B3E1229A502C892680'
(消息像上面的屏幕截图一样连接:命令头 + ApplicationtransactionCounter + ARQC + PIN Block)(这里的消息数据来自屏幕截图中的示例)
因此,当执行这两个命令时,我会收到我需要的 16HEX 符号 MAC。所以脚本是这样准备的: 8424000210 B3E1229A502C8926 422A8FF11056ACD4
:header => 8424000210
和pinBlock => B3E1229A502C8926
MAC => 422A8FF11056ACD4
当我去 ATM 并更改密码时,我的密码永远不会改变,我会收到反转消息。
任何人都可以解释这些标志是什么,我不确定应该使用哪些标志(命令 M6):
所以问题是:
- HSM 命令 M6 是否正确命令为 PIN 更改/解锁脚本生成 MAC?它需要 TAK 密钥,而 MasterCard 文档明确指出应该使用 SMI 密钥完成。
- 尝试检索 MAC 哈希时,我的 M6 命令配置是否不正确?
更新
我设法让 KU 命令工作,它给我带来了响应,但 PIN 更改本身没有成功完成。下面我将向您展示我对 KU 命令生成的请求:
{
"mode_flag": "3",
"scheme_id": "1",
"mk_smi": "U25A22A6553A7F68ABACBD1E04BBD8889",
"pan": "7891234567891200",
"integrity_session_data": "55BFDC4F2903A392",
"plaintext_message_data_length": "0018",
"plaintext_message": "8424000210345755BFDC4F2903A392B3E1229A502C892680",
"delimiter": ";",
"confidentiality_session_data": "55BFDC4F2903A392",
"offset": "000F",
"cipher_text_message_data_length": "0008",
"cipher_text_message_data": "B3E1229A502C8926",
"delimiter2": ";",
"source_pin_encryption_key_type": "0",
"source_pin_encryption_key": "UBAAAA3488AA6AA564AAC8AA3AAC1AAA2",
"source_pin_block_format_code": "01",
"destination_pin_block_format_code": "35",
"pan2": "891234567891"
}
密钥和敏感数据被屏蔽,因此此处使用 PAN:5678912345678912
和序列号000
。对于第一个pan
参数,使用的最后 14 个 PAN 数字 + 序列号的最后两个数字。对于pan2
参数,仅使用最后 12 个 PAN 数字,不包括校验位。
我是否使用正确的偏移标志将明文数据中的 PIN 块替换为新的加密 pin 块?