You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sagepay(Opayo)对接Django:生成商户会话密钥MSK失败问题求助

问题根因

你代码的核心错误是requests.post的传参方式不符合接口要求:

  • params参数用于生成URL查询字符串(会把参数拼接到接口地址的?后面)
  • 而你参考的curl命令中-d对应的是POST请求体参数,且要求为JSON格式,你把参数放错了位置才触发422错误。

修正方案

把requests.post的params=data改为json=data即可,requests的json参数会自动将Python字典序列化为JSON请求体,和curl命令的逻辑完全对齐。

修正后的代码如下:

import requests

def BasketView(request): 
    headers = {
        "Authorization": "Basic aEpZeHN3N0hMYmo0MGNCOHVkRVM4Q0RSRkxodUo4RzU0TzZyRHBVWHZFNmhZRHJyaWE6bzJpSFNyRnliWU1acG1XT1FNdWhzWFA1MlY0ZkJ0cHVTRHNocktEU1dzQlkxT2lONmh3ZDlLYjEyejRqNVVzNXU=",
        # 用json参数的话这个Content-Type头可以省略,requests会自动添加
        "Content-type": "application/json",
    }
    data = {"vendorName": "sandbox"}
    # 把params改成json
    r = requests.post("https://pi-test.sagepay.com/api/v1/merchant-session-keys", headers=headers, json=data)
    # 可以打印r.text查看接口返回的具体内容,方便后续排查问题
    print(r.status_code, r.text)

额外排查建议

如果修改后仍有异常,可以打印返回体的具体内容,Opayo的接口会在返回体里明确说明参数校验失败的具体原因。


内容的提问来源于stack exchange,提问作者Johnd90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:24:03