如何在Python中加密有效负载以进行支付-Adyen支付网关
我对编码还比较陌生,这是我正在从事的第一个大型Python项目之一,我在提交Adyen付款时遇到了一个问题 我试图在一个使用Adyen支付网关的网站上进行支付。Adyen在客户端加密您的支付数据,只接受加密请求,否则他们将抛出400个错误请求,支付将无法通过 说到点子,我就被卡住了,我分析了Charles的流量,当我手动付款时-付款前,手机会向Adyen网站上的链接发送GET请求,然后下一个请求是向付款URL发送PUT请求,数据已经加密 我不知道如何加密我的详细信息,以便Adyen能够接受这些信息并成功地完成付款。 在付款之前,我是否使用链接中的代码在我的计算机上创建一个JS文件,然后我可以在Python脚本中调用JS来加密细节 我曾尝试将未加密的数据发送到付款URL,但正如我之前所说的,它只会返回400状态码,付款无法通过。 正确请求发送的加密数据如下所示:如何在Python中加密有效负载以进行支付-Adyen支付网关,python,encryption,adyen,Python,Encryption,Adyen,我对编码还比较陌生,这是我正在从事的第一个大型Python项目之一,我在提交Adyen付款时遇到了一个问题 我试图在一个使用Adyen支付网关的网站上进行支付。Adyen在客户端加密您的支付数据,只接受加密请求,否则他们将抛出400个错误请求,支付将无法通过 说到点子,我就被卡住了,我分析了Charles的流量,当我手动付款时-付款前,手机会向Adyen网站上的链接发送GET请求,然后下一个请求是向付款URL发送PUT请求,数据已经加密 我不知道如何加密我的详细信息,以便Adyen能够接受这些信
“encryptedData”:“adyenjs\u 0\u 1\u 18$……”
预期的结果应该是一个200状态码,付款实际进行,但没有加密,它总是会返回400状态码。我认为您正在将自己插入不应该插入的流程中。Adyen有目的地在客户端为您加密详细信息。这是必需的 仅当您是PCI级别1或2时处理。您需要每年处理一百万或更多交易才能获得资格 假设没有,您应该使用组件(捆绑js购物者收集表单的Adyen术语)来收集卡的详细信息。您有两个组件可供选择:
- :更多即插即用功能,为所有卡采集字段插入单个div
- :更可自定义,为卡的每个字段插入一个div(例如编号、cvc、过期)
http://localhost:8080
在任何一种情况下,这两种方法都要求您实现一个回调,该回调将为您提供需要传递给Adyen的加密blob
功能更改(状态、组件){
if(state.isValid){
//所有卡片字段都通过格式验证
获取('localhost:8080/handleComponentData'{
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”
},
正文:JSON.stringify(state.data)
})
}
}
该状态。数据可以作为请求的一部分在paymentMethod
对象中传递
说明.数据的内容:
{
type: "scheme",
encryptedCardNumber: "adyenjs_0_1_18$MT6ppy0FAMVMLH...",
encryptedExpiryMonth: "adyenjs_0_1_18$MT6ppy0FAMVMLH...",
encryptedExpiryYear: "adyenjs_0_1_18$MT6ppy0FAMVMLH...",
encryptedSecurityCode: "adyenjs_0_1_18$MT6ppy0FAMVMLH..."
}
付款申请:
curlhttps://checkout-test.adyen.com/v46/payments \
-H“x-API-key:您的x-API-key”\
-H“内容类型:应用程序/json”\
-d'{
“金额”:{
“货币”:“欧元”,
“价值”:1000
},
“参考”:“您的订单号”,
“付款方式”:{
“类型”:“方案”,
“加密卡号”:“adyenjs_0_1_18$MT6ppy0FAMVMLH…”,
“encryptedExpiryMonth”:“adyenjs_0_1_18$MT6ppy0FAMVMLH…”,
“encryptedExpiryYear”:“adyenjs_0_1_18$MT6ppy0FAMVMLH…”,
“加密安全代码”:“adyenjs_0_1_18$MT6ppy0FAMVMLH…”
},
“返回URL”:https://your-company.com/checkout/",
“商户账户”:“您的商户账户”
}'
你读过官方文件吗?这里描述了加密过程示例。它是否缺少您想要的东西?您知道是否有办法在后端测试它吗?我试图找到一个测试数据来传递给“paymentMethod”对象。是否有“encryptedCardNumber”测试?
{
type: "scheme",
encryptedCardNumber: "adyenjs_0_1_18$MT6ppy0FAMVMLH...",
encryptedExpiryMonth: "adyenjs_0_1_18$MT6ppy0FAMVMLH...",
encryptedExpiryYear: "adyenjs_0_1_18$MT6ppy0FAMVMLH...",
encryptedSecurityCode: "adyenjs_0_1_18$MT6ppy0FAMVMLH..."
}