如何通过Deluge脚本正确配置Zoho Books报价单的Stripe支付网关
解决Zoho Books Deluge脚本更新报价单支付网关的JSON格式错误问题
问题背景
在Zoho Books中,我们需要为所有报价单默认配置Stripe作为唯一支付网关,避免手动配置遗漏导致客户无法支付。但在通过Deluge脚本自动设置时,将包含Stripe配置的List直接赋值给quoteMAP的payment_options字段后,调用zoho.books.updateRecord接口始终返回"JSON is not well formed"错误,即便JSON格式校验合法也无法完成更新。
核心原因
Zoho Books的API对payment_options字段的结构有严格要求:它是一个嵌套Map,而非直接接收payment_gateways列表。payment_gateways只是payment_options这个Map中的一个子键,对应的值才是网关配置列表。直接用List替换payment_options会破坏API要求的JSON结构。
正确的字段映射实现
1. 构造Stripe网关配置Map
首先创建包含Stripe必要配置的Map,注意gateway_id必须是你Zoho Books账户中已激活的Stripe网关ID(可通过zoho.books.getPaymentGateways(organizationId)接口获取):
stripe_gateway = Map(); stripe_gateway.put("gateway_name", "Stripe"); stripe_gateway.put("gateway_type", "CARD"); stripe_gateway.put("gateway_id", "YOUR_STRIPE_GATEWAY_ID"); // 替换为实际ID stripe_gateway.put("is_active", true);
2. 构建支付网关列表
将Stripe网关Map存入List:
payment_gateways_list = List(); payment_gateways_list.add(stripe_gateway);
3. 构造合规的payment_options Map
将网关列表作为子键值,嵌套到payment_optionsMap中,同时补充其他必填的支付选项字段(如是否允许线下支付):
payment_options = Map(); payment_options.put("payment_gateways", payment_gateways_list); payment_options.put("allow_offline_payments", false); // 按需设置 payment_options.put("auto_charge", false); // 按需设置自动扣费
4. 更新报价单并调用API
将合规的payment_optionsMap赋值给报价单对象,再调用更新接口:
quote_map = Map(); quote_map.put("payment_options", payment_options); // 调用更新接口,替换为你的报价单ID和组织ID response = zoho.books.updateRecord("quotes", "QUOTE_ID", quote_map, "ORGANIZATION_ID");
关键注意事项
- 必须确保
gateway_id与Zoho Books中已配置的Stripe网关完全匹配,否则会导致配置无效 payment_options中的其他字段(如allow_offline_payments)不可省略,需根据业务需求设置布尔值- 若需禁用其他支付方式,确保
payment_gateways_list中仅包含Stripe的配置
内容的提问来源于stack exchange,提问作者Basil1105
相关产品推荐
相关产品推荐

