在 Stripe Customer 对象 C# 中访问元数据时遇到问题
Posted
技术标签:
【中文标题】在 Stripe Customer 对象 C# 中访问元数据时遇到问题【英文标题】:Having trouble accessing Metadata in Stripe Customer Object C# 【发布时间】:2021-03-31 13:24:24 【问题描述】:我正在尝试创建一个解决方案,允许我将 Stripe 和 Discord 链接在一起,以便 Discord 机器人在用户停止支付订阅费用时自动踢出用户。我现在正在研究该框架,并尝试自学如何使用可用的免费选项来导航条带 API,以便于测试。我的第一个测试只是确保我可以将 Discord 用户名作为元数据存储在每个客户对象中,然后根据需要使用该元数据让 Discord 机器人运行 kick 命令。
但是,我似乎无法获取每个客户的元数据,以便可以将其作为字符串发送到 Discord 机器人。
对于我的测试,我为产品设置了一个简单的结帐会话,并通过扩展结帐会话成功访问了客户对象,但是在尝试访问元数据时出现错误
“无法将类型 'System.Collections.Generic.Dictionary
' 隐式转换为 'string”。
我认为我需要使用多级选项来扩展不同的对象,但我似乎得到了与上面相同的错误。我已经把代码sn-p贴在下面了。
var options = new SessionGetOptions();
options.AddExpand("customer");
var service = new SessionService();
Session session = service.Get("checkout_session_id", options);
Customer customer = session.Customer;
string customer2 = customer.Metadata;
我可能遗漏了一些简单的东西,但我终生无法弄清楚它是什么。
【问题讨论】:
错误本身说明了问题所在。条带中的元数据是Dictionary<string, string>
类型,而您正试图分配给 string
变量。修复 string customer2 = customer.Metadata;
行并通过 key
从 c# Dictionary
读取必要的元数据值
谢谢,我知道这很简单。
【参考方案1】:
感谢Pirate's comment 我找到了解决方案,并在下面添加了代码。
var options = new SessionGetOptions();
options.AddExpand("customer");
var service = new SessionService();
Session session = service.Get("checkoutsession_id", options);
Customer customer = session.Customer;
var customer2 = customer.Metadata;
string discord = customer2.ElementAt(0).Value;
【讨论】:
这很好用,但您也可以使用metadata["keyname"]
获得比使用ElementAt(0)
更好的语义表示【参考方案2】:
您可以在保存到var
时按名称键访问metadata
:
var service = new CustomerService();
var options = new CustomerCreateOptions
Email = "test@example.com",
Description = "Example customer",
;
options.AddExtraParam("metadata[user_id]", "cooluser123");
Customer customer = service.Create(options);
var cust = service.Get(customer.Id);
var metadata = cust.Metadata;
Console.WriteLine("Metadata['user_id']: " + metadata["user_id"]);
【讨论】:
以上是关于在 Stripe Customer 对象 C# 中访问元数据时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 中的 Stripe Subscription 对象中检索产品信息?
如何在 PHP Codeception 中模拟 Stripe 类
为啥 Stripe checkout Webhooks 会将 customer_email 发送为 null?