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

如何在MyFatoorah支付接口payload中循环添加商品信息?

解决MyFatoorah SendPayment接口批量添加商品问题

问题说明

我用Python调用MyFatoorah的SendPayment接口发送账单,原本只能手动添加单个商品到InvoiceItems字段,尝试用for循环批量添加商品的名称、价格和数量信息但没成功,以下是原始代码和尝试修改后的代码,求解决方法。

原始代码

###########Send Payment###########
baseURL = "https://apitest.myfatoorah.com"
token = 'rLtt6JWvbUHDDhsZnfpAhpYk4dxYDQkbcPTyGaKp2TYqQgG7FGZ5Th_WD53Oq8Ebz6A53njUoo1w3pjU1D4vs_ZMqFiz_j0urb_BH9Oq9VZoKFoJEDAbRZepGcQanImyYrry7Kt6MnMdgfG5jn4HngWoRdKduNNyP4kzcp3mRv7x00ahkm9LAK7ZRieg7k1PDAnBIOG3EyVSJ5kK4WLMvYr7sCwHbHcu4A5WwelxYK0GMJy37bNAarSJDFQsJ2ZvJjvMDmfWwDVFEVe_5tOomfVNt6bOg9mexbGjMrnHBnKnZR1vQbBtQieDlQepzTZMuQrSuKn-t5XZM7V6fCW7oP-uXGX-sMOajeX65JOf6XVpk29DP6ro8WTAflCDANC193yof8-f5_EYY-3hXhJj7RBXmizDpneEQDSaSz5sFk0sV5qPcARJ9zGG73vuGFyenjPPmtDtXtpx35A-BVcOSBYVIWe9kndG3nclfefjKEuZ3m4jL9Gg1h2JBvmXSMYiZtp9MR5I6pvbvylU_PP5xJFSjVTIz7IQSjcVGO41npnwIxRXNRxFOdIUHn0tjQ-7LwvEcTXyPsHXcMD8WtgBh-wxR8aKX7WPSsT1O8d8reb2aR7K3rkV3K82K_0OgawImEpwSvp9MNKynEAJQS6ZHe_J_l77652xwPNxMRTMASk1ZsJL'

def send_payment():
    url = baseURL + "/v2/SendPayment"
    payload = "{\"CustomerName\": \"Ahmed\",\"NotificationOption\": \"ALL\",\"MobileCountryCode\": \"+965\"," \
              "\"CustomerMobile\": \"12345678\",\"CustomerEmail\": \"xx@yy.com\",\"InvoiceValue\": 100," \
              "\"DisplayCurrencyIso\": \"KWD\",\"CallBackUrl\": \"https://google.com\",\"ErrorUrl\": " \
              "\"https://google.com\",\"Language\": \"en\",\"CustomerReference\": \"ref 1\",\"CustomerCivilId\": " \
              "12345678,\"UserDefinedField\": \"Custom field\",\"ExpireDate\": \"\",\"CustomerAddress\": {\"Block\": " \
              "\"\",\"Street\": \"\",\"HouseBuildingNo\": \"\",\"Address\": \"\",\"AddressInstructions\": \"\"}," \
              "\"InvoiceItems\": [{\"ItemName\": \"Product 01\",\"Quantity\": 1,\"UnitPrice\": 100}]} "
    headers = {'Content-Type': "application/json", 'Authorization': "Bearer " + token}
    response = requests.request("POST", url, data=payload, headers=headers)
    print("Send Payment Response:\n" + response.text)

尝试修改后的代码

url = baseURL + "/v2/SendPayment"

    sss={'ItemName': 'product 01',
                    'Quantity': 30,
                    'UnitPrice': 10,},

    payload={
                "CustomerName": "name",  # Mandatory Field ("string")
                "NotificationOption": "SMS",  # Mandatory Field ("LNK", "SMS", "EML", or "ALL")
                "InvoiceValue": 300,  # Mandatory Field (Number)
            # Optional Fields
                "MobileCountryCode": "+966",
                "CustomerMobile": "12345678", #Mandatory if the NotificationOption = SMS or ALL
                # "CustomerEmail": "mail@company.com", #Mandatory if the NotificationOption = EML or ALL
                "DisplayCurrencyIso": "kwd",
                "CallBackUrl": "https://yoursite.com/success",
                "ErrorUrl": "https://yoursite.com/error",
                "Language": "ar",
                # "CustomerReference": "noshipping-nosupplier",
                # "CustomerAddress": {
                #     "Block": "string",
                #     "Street": "string",
                #     "HouseBuildingNo": "string",
                #     "Address": "address",
                #     "AddressInstructions": "string"
                #     },
                "InvoiceItems": [
                   sss
                    ]
            }
    payload=str(payload)
    print(f"this is pyload: {payload}")
    print(f"this is sss: {sss}")    
    headers = {'Content-Type': "application/json", 'Authorization': "Bearer " + token}
    response = requests.request("POST", url, data=payload2, headers=headers)
    print("Send Payment Response:\n" + response.text)

错误原因分析

  1. 变量格式错误:sss末尾多了逗号,导致它变成元组而非字典,放入InvoiceItems列表会引发JSON格式异常
  2. JSON序列化错误:用str(payload)将字典转字符串,生成的内容含单引号,不符合JSON规范,接口无法解析
  3. 变量名错误:请求时使用了未定义的payload2,会直接报错
  4. 未实现批量逻辑:代码里没有真正用循环生成多个商品条目

修正后的代码(支持批量添加)

import json
import requests

baseURL = "https://apitest.myfatoorah.com"
token = 'rLtt6JWvbUHDDhsZnfpAhpYk4dxYDQkbcPTyGaKp2TYqQgG7FGZ5Th_WD53Oq8Ebz6A53njUoo1w3pjU1D4vs_ZMqFiz_j0urb_BH9Oq9VZoKFoJEDAbRZepGcQanImyYrry7Kt6MnMdgfG5jn4HngWoRdKduNNyP4kzcp3mRv7x00ahkm9LAK7ZRieg7k1PDAnBIOG3EyVSJ5kK4WLMvYr7sCwHbHcu4A5WwelxYK0GMJy37bNAarSJDFQsJ2ZvJjvMDmfWwDVFEVe_5tOomfVNt6bOg9mexbGjMrnHBnKnZR1vQbBtQieDlQepzTZMuQrSuKn-t5XZM7V6fCW7oP-uXGX-sMOajeX65JOf6XVpk29DP6ro8WTAflCDANC193yof8-f5_EYY-3hXhJj7RBXmizDpneEQDSaSz5sFk0sV5qPcARJ9zGG73vuGFyenjPPmtDtXtpx35A-BVcOSBYVIWe9kndG3nclfefjKEuZ3m4jL9Gg1h2JBvmXSMYiZtp9MR5I6pvbvylU_PP5xJFSjVTIz7IQSjcVGO41npnwIxRXNRxFOdIUHn0tjQ-7LwvEcTXyPsHXcMD8WtgBh-wxR8aKX7WPSsT1O8d8reb2aR7K3rkV3K82K_0OgawImEpwSvp9MNKynEAJQS6ZHe_J_l77652xwPNxMRTMASk1ZsJL'

def send_payment():
    url = baseURL + "/v2/SendPayment"
    
    # 模拟批量商品数据,可替换为你的数据源
    products = [
        {"ItemName": "Product 01", "Quantity": 2, "UnitPrice": 50},
        {"ItemName": "Product 02", "Quantity": 3, "UnitPrice": 30},
        {"ItemName": "Product 03", "Quantity": 1, "UnitPrice": 40}
    ]
    
    # 自动计算总金额,也可手动指定
    invoice_value = sum(item["Quantity"] * item["UnitPrice"] for item in products)
    
    payload = {
        "CustomerName": "name",
        "NotificationOption": "SMS",
        "InvoiceValue": invoice_value,
        "MobileCountryCode": "+966",
        "CustomerMobile": "12345678",
        "DisplayCurrencyIso": "KWD",
        "CallBackUrl": "https://yoursite.com/success",
        "ErrorUrl": "https://yoursite.com/error",
        "Language": "ar",
        "InvoiceItems": products  # 直接传入批量商品列表
    }
    
    # 用json.dumps正确序列化字典为JSON字符串
    payload_json = json.dumps(payload)
    
    headers = {'Content-Type': "application/json", 'Authorization': "Bearer " + token}
    response = requests.request("POST", url, data=payload_json, headers=headers)
    print("Send Payment Response:\n" + response.text)

# 调用函数
send_payment()

关键修改点

  • 用json.dumps()替代str()序列化payload,确保生成符合规范的JSON格式
  • 若商品数据是动态获取的,可通过循环生成商品列表:
    # 动态生成示例
    products = []
    for item in your_data_list:
        products.append({
            "ItemName": item["name"],
            "Quantity": item["qty"],
            "UnitPrice": item["price"]
        })
    
  • 修正变量名错误,确保请求使用正确的payload变量
  • 移除多余逗号,避免字典被转为元组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:35:23