我有一个后端web服务(不是网页),它试图从前端客户端创建一个支付。在一些细节和事务列表之间没有数据匹配的地方,我从沙坑那里得到了适当的错误消息,解释了出了什么问题后,我最终得到了payment.create方法来执行,而没有抛出异常。不幸的是,虽然我可以看到测试web服务和paypal之间存在SSL通信,但是当例程返回时,我没有链接,也没有创建状态。我可能完全误解了api的机制,但是在调用中没有任何错误或异常的情况下,我有点困惑。
下面是我使用的代码:
var config = ConfigManager.Instance.GetProperties();
var clientid = config[BaseConstants.ClientId];
var clientSecret = config[BaseConstants.ClientSecret];
var accessToken = new OAuthTokenCredential(clientid, clientSecret, config).GetAccessToken();
var apiContext = new APIContext(accessToken);
var itemList = new ItemList() { items = new List<Item>() };
using (var context = new PETTEntities3())
{
SubscriptionType subType = context.SubscriptionTypes.FirstOrDefault(s => s.SubscriptionTypeID == Subscription.SubscriptionTypeID);
itemList.items.Add(new Item()
{
name = subType.SubscriptionName,
currency = "NZD",
price = (Subscription.Amount / (decimal)1.15).ToString("0.00"),
quantity = "1",
sku = subType.SubscriptionTypeID.ToString()
});
var payer = new Payer() { payment_method = "paypal" };
var redirectUrls = new RedirectUrls()
{
cancel_url = ConfigurationManager.AppSettings["PaymentConfirmationURL"] + Subscription.PaymentApprovalID,
return_url = ConfigurationManager.AppSettings["PaymentCancellationURL"] + Subscription.PaymentApprovalID
};
var details = new Details()
{
tax = (Subscription.Amount - decimal.Parse((Subscription.Amount / (decimal)1.15).ToString("0.00"))).ToString("0.00"),
subtotal = (Subscription.Amount / (decimal)1.15).ToString("0.00"),
shipping="0"
};
var amount = new Amount()
{
currency = "NZD",
total = Subscription.Amount.ToString("0.00"),
details = details
};
var transactionList = new List<Transaction>();
transactionList.Add(new Transaction()
{
description = "PETT Subscription.",
invoice_number = "PETT1420" + Subscription.SubscriptionID.ToString(),
amount = amount,
item_list = itemList
});
Payment payment = new Payment()
{
intent = "sale",
payer = payer,
transactions = transactionList,
redirect_urls = redirectUrls
};
payment.Create(apiContext);
.... At this point the payment state is still null and no links are present even though I appear to have a successful call with no exceptions.任何关于我所缺少的线索或洞察力都将不胜感激。
发布于 2014-12-04 01:43:37
啊,太明显了。没有注意到函数签名payment.create,它返回了一个新的支付。这是您需要使用的,而不是用于调用创建的付款:
支付paymentToUse = payment.Create(apiContext);
paymentToUse把所有的货物都买好了。
https://stackoverflow.com/questions/27260047
复制相似问题