如何在Python中加密有效负载以进行支付-Adyen支付网关

如何在Python中加密有效负载以进行支付-Adyen支付网关,python,encryption,adyen,Python,Encryption,Adyen,我对编码还比较陌生,这是我正在从事的第一个大型Python项目之一,我在提交Adyen付款时遇到了一个问题 我试图在一个使用Adyen支付网关的网站上进行支付。Adyen在客户端加密您的支付数据,只接受加密请求,否则他们将抛出400个错误请求,支付将无法通过 说到点子,我就被卡住了,我分析了Charles的流量,当我手动付款时-付款前,手机会向Adyen网站上的链接发送GET请求,然后下一个请求是向付款URL发送PUT请求,数据已经加密 我不知道如何加密我的详细信息,以便Adyen能够接受这些信

我对编码还比较陌生,这是我正在从事的第一个大型Python项目之一,我在提交Adyen付款时遇到了一个问题

我试图在一个使用Adyen支付网关的网站上进行支付。Adyen在客户端加密您的支付数据,只接受加密请求,否则他们将抛出400个错误请求,支付将无法通过

说到点子,我就被卡住了,我分析了Charles的流量,当我手动付款时-付款前,手机会向Adyen网站上的链接发送GET请求,然后下一个请求是向付款URL发送PUT请求,数据已经加密

我不知道如何加密我的详细信息,以便Adyen能够接受这些信息并成功地完成付款。 在付款之前,我是否使用链接中的代码在我的计算机上创建一个JS文件,然后我可以在Python脚本中调用JS来加密细节

我曾尝试将未加密的数据发送到付款URL,但正如我之前所说的,它只会返回400状态码,付款无法通过。 正确请求发送的加密数据如下所示:
“encryptedData”:“adyenjs\u 0\u 1\u 18$……”


预期的结果应该是一个200状态码,付款实际进行,但没有加密,它总是会返回400状态码。

我认为您正在将自己插入不应该插入的流程中。Adyen有目的地在客户端为您加密详细信息。这是必需的

仅当您是PCI级别1或2时处理。您需要每年处理一百万或更多交易才能获得资格

假设没有,您应该使用组件(捆绑js购物者收集表单的Adyen术语)来收集卡的详细信息。您有两个组件可供选择:

  • :更多即插即用功能,为所有卡采集字段插入单个div
  • :更可自定义,为卡的每个字段插入一个div(例如编号、cvc、过期)
注意:两者都要求您提供与您正在支付的域名相匹配的域名。e、 g.如果您正在进行测试并在端口8080上的本地主机上托管服务器,请为
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..."
}